OXID Community Forum

> German forum > Module > Mindestbestellmenge auf Warengruppen
Login
FAQ Members List Calendar Search Today's Posts Mark Forums Read

Thread: Mindestbestellmenge auf Warengruppen


Reply
 
Thread Tools Display Modes
#Top   #1  
Old 04-14-2012, 09:06 PM
FabianW FabianW is offline
Member
Join Date: Mar 2012
Location: Würzburg
Posts: 63
FabianW is on a distinguished road
Default Mindestbestellmenge auf Warengruppen

Habe für Oxid mal ein Mindestbestellmengensystem auf Kategoriebasis gebastelt
da es sowas in dieser Art nicht gibt.

Das Mindestbestellmengensystem von Oxid wird auf ALLE Artikel angesetzt und die
käuflichen Module sind auf Artikelbasis. Ich brauchte aber ein System auf Warengruppenbasis.

Da der Kunde z.b. 10 St. einer Warengruppe kaufen muss.
Also 3x Artikel a, 3x Artikel b und 4x Artikel c (einer Warengruppe)

und z.b.: 5St. einer anderen (2x Artikel f und 3x Artikel g)

Es ist zwar nicht nach irgendwelchen richtlinien oder sowas aber es funktioniert.

Hierfür wird das Rabattsystem von Oxid "missbraucht"

Wenn die Mindestbestellmenge für eine Warengruppe auf z.B. min. 4 St. eingestellt ist und ein Kunde nur 3 St. im Warenkorb hat wird eine Dreingabe hinzugefügt die den Kunden drauf hinweist das er zu wenig im Warenkorb hat.
Dies ändert dann den "Weiter zum nächsten Schritt" Button in einen Popup button der nurnoch ausgibt das die Mindestbestellmenge nicht erreicht wurde und den Kunden nicht weiterlässt.

Im Minibasket wurde der "zur Kasse" Button entfernt und durch "Weiter Shoppen" ersetzt. im Warenkorb wurde alle Verlinkungen zur Adressauswahl entfernt (und weiterführenden...)

Als erstes legt man einen "Mindestbestellmengen Artikel" an
Stamm:
Aktiv: JA
Titel: "Das ist der Mindestbestellmengenartikel"
Art.-Nr.: MBMxxxxxx (wichtig ist nur das die ersten 3 Zeichen MBM beinhalten)
Preis: 0
Langtextbeschreibung: Irgendwas was dem Kunden mitteilt das auf diese Warengruppe ine Mindestbestellmenge hinterlegt ist

Erweitert:
Versandkostenfrei: JA
Alle neg. Nachlässe ignorieren. JA

Nun muss man unter Shopeinstellungen --> Rabatte
einen neuen "Rabatt" anlegen.

Stamm:
Name: Mindestbestellmenge deiner Warengruppe (deiner Warengruppe durch die Kategorie austauschen. (ist nur für eure Information)
Aktiv: JA
Einkaufsmenge: 1-3 (für eine Mindestbestellmenge von 4St. (MBM-Artikel zählt als +1 für die Kategorie)
Rabatt: itm
Erstellten "Mindestbestellmengenartikel" zuordnen

Artikel:
Kategorie zuordnen (hier die Warengruppe auf der die Mindestbestellmenge angewendet werden soll angeben)

So das war der einfach teil

Nun ändern wir die tpl/widget/minibasket/minibasket.tpl

und suchen diese Abschnitt Zeile 75
(Ersetzen des Buttons "zur Kasse" in "Weiter Shoppen")
Code:
<p class="functions clear">
                       [{if $oxcmp_user}]
                            <a href="[{ oxgetseourl ident=$oViewConf->getSelfLink()|cat:"cl=payment" }]" class="submitButton largeButton">[{ oxmultilang ident="WIDGET_MINIBASKET_CHECKOUT" }]</a>
                       [{else}]
                            <a href="[{ oxgetseourl ident=$oViewConf->getSelfLink()|cat:"cl=user" }]" class="submitButton largeButton">[{ oxmultilang ident="WIDGET_MINIBASKET_CHECKOUT" }]</a>
                       [{/if}]
                       <a href="[{ oxgetseourl ident=$oViewConf->getSelfLink()|cat:"cl=basket" }]" class="textButton">[{ oxmultilang ident="WIDGET_MINIBASKET_DISPLAY_BASKET" }]</a>
                    </p>
und ersetzen ihn hiermit

Code:
<p class="functions clear">
                       <a href="[{ oxgetseourl ident=$oViewConf->getSelfLink()|cat:"cl=basket" }]" class="textButton">[{ oxmultilang ident="WIDGET_MINIBASKET_DISPLAY_BASKET" }]</a>
                       [{if $oxcmp_user}]
                     
                            <a  class="submitButton largeButton closePop">[{ oxmultilang ident="PAGE_CHECKOUT_BASKET_CONTINUESHOPPING" }]</a>
                       [{else}]
                            <a href="[{ oxgetseourl ident=$oViewConf->getSelfLink()|cat:"cl=user" }]" class="submitButton largeButton">[{ oxmultilang ident="WIDGET_MINIBASKET_CHECKOUT" }]</a>
                       [{/if}]
                       
                    </p>
Dann ändern wir die tpl/page/checkout/basket.tpl

und kommentieren Zeile 27-39 aus
(Oberen button "zum nächsten Schritt" entfernen)
Code:
 [{if $oView->isLowOrderPrice() }]
                    [{block name="checkout_basket_loworderprice_top"}]
                        <div>[{ oxmultilang ident="PAGE_CHECKOUT_BASKET_MINORDERPRICE" }] [{ $oView->getMinOrderPrice() }] [{ $currency->sign }]</div>
                    [{/block}]
                [{else}]
                    [{block name="basket_btn_next_top"}]
                        <form action="[{ $oViewConf->getSslSelfLink() }]" method="post">
                            [{ $oViewConf->getHiddenSid() }]
                            <input type="hidden" name="cl" value="user">
                            <button type="submit" class="submitButton largeButton nextStep">[{ oxmultilang ident="PAGE_CHECKOUT_BASKET_NEXTSTEP" }]</button>
                        </form>
                    [{/block}]
                [{/if}]
in

Code:
[{*if $oView->isLowOrderPrice() }]
                    [{block name="checkout_basket_loworderprice_top"}]
                        <div>[{ oxmultilang ident="PAGE_CHECKOUT_BASKET_MINORDERPRICE" }] [{ $oView->getMinOrderPrice() }] [{ $currency->sign }]</div>
                    [{/block}]
                [{else}]
                    [{block name="basket_btn_next_top"}]
                        <form action="[{ $oViewConf->getSslSelfLink() }]" method="post">
                            [{ $oViewConf->getHiddenSid() }]
                            <input type="hidden" name="cl" value="user">
                            <button type="submit" class="submitButton largeButton nextStep">[{ oxmultilang ident="PAGE_CHECKOUT_BASKET_NEXTSTEP" }]</button>
                        </form>
                    [{/block}]
                [{/if*}]
Zeile 42
von
(Scope einsetzen das die iclude Variablen benutzt werden können)
Code:
[{include file="page/checkout/inc/basketcontents.tpl" editable=true}]
in

Code:
[{include file="page/checkout/inc/basketcontents.tpl" editable=true scope="parent"}]
Zeile 96
(Ersetzen des "zum nächsten Schritt" Button durch die if abfrage ob eine Mindestebestellmenge vorhanden ist und Ausgabe des richtigen Buttons)
Code:
<button type="submit" class="submitButton largeButton nextStep">[{ oxmultilang ident="PAGE_CHECKOUT_BASKET_NEXTSTEP" }]</button>
in

Code:
  [{if $moq}]
                            <button type="button" class="submitButton largeButton nextStep" value="[{ oxmultilang ident="MOQ_BUTTON_INTERN_VALUE" }]" onclick="alert('[{ oxmultilang ident="MOQ_BUTTON_ALERT" }]');"> [{ oxmultilang ident="MOQ_BUTTON_VALUE" }]</button> 
                            
                          
                           
                            [{else}]
                           <button type="submit" class="submitButton largeButton nextStep">[{ oxmultilang ident="PAGE_CHECKOUT_BASKET_NEXTSTEP" }]</button>
                            [{/if}]
Dann ändern wir die tpl/page/checkout/inc/basketcontents.tpl

Zeile 70

von
(Erstzen der Artikelnummer durch blindtext)
Code:
[{ oxmultilang ident="PAGE_CHECKOUT_BASKETCONTENTS_ARTNOMBER" }] [{ $basketproduct->oxarticles__oxartnum->value }]
in
Code:
[{if $basketproduct->oxarticles__oxartnum->value|@substr:0:3 == MBM }] 
              <font color="#ff0000"><b>[{ oxmultilang ident="MOQ_ART_VALUE" }]<b/></font>
            [{assign var="moq" value="moq" }]
         [{else}]
              [{ oxmultilang ident="PAGE_CHECKOUT_BASKETCONTENTS_ARTNOMBER" }] [{ $basketproduct->oxarticles__oxartnum->value }]
      [{/if}]
Dann ändern wir die tpl/page/checkout/inc/steps.tpl

Zeile 19

von
(Im Warenkorb bei den Steps herausnehmen des Links für "Adresse wählen")
Code:
[{assign var=showStepLinks value=true}]
in
Code:
[{assign var=showStepLinks value=false}]
weiter im nächsten Post....

Last edited by FabianW; 04-15-2012 at 12:05 PM.
Reply With Quote
#Top   #2  
Old 04-14-2012, 09:13 PM
FabianW FabianW is offline
Member
Join Date: Mar 2012
Location: Würzburg
Posts: 63
FabianW is on a distinguished road
Default AW: Mindestbestellmenge auf Warengruppen

Dann ändern wir die core/smarty/Smarty_Compiler.class.php

Zeile 969-1014
(Hier wird dem Compiler die Funktionalität zur Vererbung beigebracht)
Code:
 function _compile_include_tag($tag_args)
    {
        $attrs = $this->_parse_attrs($tag_args);
        $arg_list = array();

        if (empty($attrs['file'])) {
            $this->_syntax_error("missing 'file' attribute in include tag", E_USER_ERROR, __FILE__, __LINE__);
        }

        foreach ($attrs as $arg_name => $arg_value) {
            if ($arg_name == 'file') {
                $include_file = $arg_value;
                continue;
            } else if ($arg_name == 'assign') {
                $assign_var = $arg_value;
                continue;
            }
            if (is_bool($arg_value))
                $arg_value = $arg_value ? 'true' : 'false';
            $arg_list[] = "'$arg_name' => $arg_value";
        }

        $output = '<?php ';

        if (isset($assign_var)) {
            $output .= "ob_start();\n";
        }

        $output .=
            "\$_smarty_tpl_vars = \$this->_tpl_vars;\n";


        $_params = "array('smarty_include_tpl_file' => " . $include_file . ", 'smarty_include_vars' => array(".implode(',', (array)$arg_list)."))";
        $output .= "\$this->_smarty_include($_params);\n" .
        "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" .
        "unset(\$_smarty_tpl_vars);\n";

        if (isset($assign_var)) {
            $output .= "\$this->assign(" . $assign_var . ", ob_get_contents()); ob_end_clean();\n";
        }

        $output .= ' ?>';

        return $output;

    }
in

Code:
function _compile_include_tag($tag_args)
    {
        $attrs = $this->_parse_attrs($tag_args);
       // $scope_action = "\$this->_tpl_vars = array_merge((array)\$_smarty_tpl_vars,\$GLOBALS[\"_smarty_tpl_vars_temp\"]);\n";
        $scope_action = "\$this->_tpl_vars = array_merge((array)\$_smarty_tpl_vars, (array)\$GLOBALS[\"_smarty_tpl_vars_temp\"]);\n";
        $arg_list = array();

        if (empty($attrs['file'])) {
            $this->_syntax_error("missing 'file' attribute in include tag", E_USER_ERROR, __FILE__, __LINE__);
        }

        foreach ($attrs as $arg_name => $arg_value) {
            if ($arg_name == 'file') {
                $include_file = $arg_value;
                continue;
            } else if ($arg_name == 'assign') {
                $assign_var = $arg_value;
                continue;
            }
            
            // ADD: Startin block
 else if( $arg_name == 'scope' )
 {
 $scope = @$this->_dequote($arg_value);
 if( $scope != 'local' &&
 $scope != 'parent' &&
 $scope != 'global')
 $this->_syntax_error("invalid 'scope' attribute value");
 if( $scope == 'parent' )
 $scope_action = "";
 if( $scope == 'global' )
 {
 $scope_action = "".
 "\$array_diff = array_diff( array_keys(\$this->_tpl_vars), array_keys(\$_smarty_tpl_vars) );".
 "foreach( \$array_diff as \$key=>\$value ){".
 "\$GLOBALS[\"_smarty_tpl_vars_temp\"][\$value] = \$this->_tpl_vars[\$value];\n".
 "}";
 }
 }
 // Ending block
 
            
            if (is_bool($arg_value))
                $arg_value = $arg_value ? 'true' : 'false';
         //ori
           // $arg_list[] = "'$arg_name' => $arg_value";
          
          // REPLACE THIS LINE WITH THE NEXT TWO
 // $arg_list[] = "'$arg_name' => $arg_value";
 if( $arg_name != 'scope' )
 $arg_list[] = "'$arg_name' => $arg_value";

        }

        $output = '<?php ';

        if (isset($assign_var)) {
            $output .= "ob_start();\n";
        }

        $output .=
            "\$_smarty_tpl_vars = \$this->_tpl_vars;\n";


        $_params = "array('smarty_include_tpl_file' => " . $include_file . ", 'smarty_include_vars' => array(".implode(',', (array)$arg_list)."))";
        $output .= "\$this->_smarty_include($_params);\n" .
        // REPLACE THIS LINE WITH THE NEXT ONE
 // "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" .
 $scope_action."\n".

 "unset(\$_smarty_tpl_vars);\n";
/*        original code
 "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" .
 "unset(\$_smarty_tpl_vars);\n";        */
        
        
        //ori
       // "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" .
     //  "unset(\$_smarty_tpl_vars);\n";

        if (isset($assign_var)) {
            $output .= "\$this->assign(" . $assign_var . ", ob_get_contents()); ob_end_clean();\n";
        }

        $output .= ' ?>';

        return $output;

    }
Dieser Code stammt aus der Mailingliste
http://shkhan.wordpress.com/2009/01/...arty-template/
Fertig

Verbesserungsvorschläge sind gerne gesehen.

Vll kann man ja den ein oder anderen Code noch optimieren oder vereinfachen.

Das Mindestbrestellmengensystem ist für Oxid CE 4.5.9 Azure Theme
für das ältere Versionen bzw. Basix muss nicht an der Smarty_Compiler.class.php rumgeschraubt werden da der Basketcontent nicht included wird sondern in der gleichen Datei vorliegt.

Noch ein Vielen Dank an Earlybird der mir die ganze zeit für Fragen und Antworten zur Seite stand.

Gruß
Fabi
Attached Images
File Type: jpg Warenkorb1.jpg (114.1 KB, 18 views)
File Type: jpg warenkorb 2.jpg (149.3 KB, 15 views)
File Type: jpg warenkorb3.jpg (38.4 KB, 14 views)

Last edited by FabianW; 04-15-2012 at 12:06 PM. Reason: Ergänzug
Reply With Quote
#Top   #3  
Old 04-14-2012, 09:24 PM
FabianW FabianW is offline
Member
Join Date: Mar 2012
Location: Würzburg
Posts: 63
FabianW is on a distinguished road
Default AW: Mindestbestellmenge auf Warengruppen

PS.: in der tpl/widget/minibasket/minibasket.tpl muss für endkunden shops mein Code noch ein bisschen abgeändert werden da der Kunde bei mir immer eingelogged sein muss das er einkaufen kann daher ist die If Abfrage bei mir nebensächlich
Reply With Quote
Reply

Bookmarks

Tags
mindestbestellmenge, warengruppen

« Previous Thread | Next Thread »
Thread Tools
Display Modes

Nicht Sichtbar
Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Mindestbestellmenge pro Artikel HAL9000 Feature-Anfragen 20 02-04-2013 10:46 AM
Mindestbestellmenge auf Warengruppen FabianW Newbies 0 03-28-2012 10:40 AM
Mindestbestellmenge in einer Kategorie anubiz Feature-Anfragen 5 09-16-2009 08:23 AM
unsichtbare Warengruppen / Warengruppenrabatt decius Newbies 2 02-08-2009 05:26 PM
Mindestbestellmenge cyberrob Installation und Konfiguration 2 12-15-2008 10:43 AM

All times are GMT +1. The time now is 11:11 AM.