rechtstexte für onlineshop
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: ANLEITUNG: Verfügbarkeitsanzeige mit Grafik (auch für Artikel-Optionen)

    doni

    • Frisch an Board
    • Beiträge: 84
    Vielleicht kann das ja jemand gebrauchen.

    Wenn keine Optionen verfügbar sind und weniger als X Artikel auf Lager sind, dann wird nichts angezeigt.
    Ansonsten wird auf der Detailseite und der Artikellistenseite angezeigt:
    Verfügbarkeit: (hier die Grafik, z.B. Gelb) (Noch X Stück auf Lager)

    Wenn Optionen da sind, dann wird dies nur auf der Detailseite angezeigt.

    ***

    als erstes die Grafiken erstellen (12x12 Pixel):
    dot12x12green.gif
    dot12x12yellow.gif
    dot12x12red.gif

    oder die hier nehmen:

    [ Für Gäste sind keine Dateianhänge sichtbar ] dot12x12green.gif
    [ Für Gäste sind keine Dateianhänge sichtbar ] dot12x12yellow.gif
    [ Für Gäste sind keine Dateianhänge sichtbar ] dot12x12red.gif

    und nach "/templates/AKTUELLES-TEMPLATE/img/" kopieren.

    ***

    "/templates/AKTUELLES-TEMPLATE/source/boxes.php"

    Code: PHP  [Auswählen]
    // start - Verfügbarkeitsanzeige als Ampel ########################################################
    define('MY_OWN_DISPLAY_STOCK','yes');//show stock: 'yes'
    define('MY_OWN_DISPLAY_STOCK_PIECES','yes');//show title-tag for pieces: 'yes' / 'no'
    define('MY_OWN_STOCK_PIECES_MAX','49');// Stückzahl, ab der die Anzahl und die gelbe Grafik angezeigt wird (einfach eine Zahl eingeben)
    // damit Stückzahl von Optionen abgefragt werden kann
    function OptionOnStock($Nummer){
            global $actual_products_id;
            $Query = xtDBquery(" SELECT pa.attributes_stock FROM ".TABLE_PRODUCTS_ATTRIBUTES." AS pa LEFT OUTER JOIN ".TABLE_PRODUCTS_ATTRIBUTES." AS p ON (p.products_id = pa.products_id) WHERE p.products_id = '".$actual_products_id."' AND pa.options_values_id = '".$Nummer."' ");
            $Query = xtc_db_fetch_array($Query,true); return intval($Query[attributes_stock]);
    }
    // ende - Verfügbarkeitsanzeige als Ampel #########################################################
    ***

    "/includes/classes/Smarty_2.6.26/Smarty.class.php"

    nach:

    Code: PHP  [Auswählen]
    define('SMARTY_PHP_PASSTHRU',   0);
    define('SMARTY_PHP_QUOTE',      1);
    define('SMARTY_PHP_REMOVE',     2);
    define('SMARTY_PHP_ALLOW',      3);

    bei Zeile ca. 62 hinzugefügt:

    Code: PHP  [Auswählen]
    // start - Verfügbarkeitsanzeige als Ampel ########################################################
    // Pfad zum PlugIn-Ordner im aktiven Template!
    define('StockImage_by_ProductsID', DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/smarty');
    // ende - Verfügbarkeitsanzeige als Ampel #########################################################

    dann dieses:

    Code: PHP  [Auswählen]
        var $plugins_dir     =  array('plugins');

    gegen folgendes ersetzen: (ca. Zeilen 105)

    Code: PHP  [Auswählen]
    // start - Verfügbarkeitsanzeige als Ampel ########################################################
    // Originalzeile:
    //    var $plugins_dir     =  array('plugins');
    // neue Zeile:
    var $plugins_dir = array('plugins',StockImage_by_ProductsID);
    // ende - Verfügbarkeitsanzeige als Ampel #########################################################
    ***

    In den Sprachdateien am Ende ergänzt (natürlich vor dem "?>"):

    Code: PHP  [Auswählen]
    // start - Verfügbarkeitsanzeige als Ampel ########################################################
    define('MY_OWN_DISPLAY_STOCK_LANG_BEFORE_SINGLEPRODUCT','Verfügbarkeit: ');
    define('MY_OWN_DISPLAY_STOCK_LANG_AFTER_SINGLEPRODUCT','');
    define('MY_OWN_DISPLAY_STOCK_LANG_BEFORE_OPTIONS',' (Verfügbarkeit: ');
    define('MY_OWN_DISPLAY_STOCK_LANG_AFTER_OPTIONS',')');
    define('MY_OWN_DISPLAY_STOCK_LANG_BEFORE_PIECES','Noch ');
    define('MY_OWN_DISPLAY_STOCK_LANG_AFTER_PIECES',' Stück auf Lager');
    // ende - Verfügbarkeitsanzeige als Ampel #########################################################
    ***

    "/templates/AKTUELLES-TEMPLATE/module/product_options/product_options_selection.html"

    nach der Zeile mit:

    Code: PHP  [Auswählen]
    {$item_data.TEXT} {if $item_data.PRICE!=''}( {$item_data.PREFIX}{$item_data.PRICE} ){/if}

    folgendes einfügen:

    Code: PHP  [Auswählen]
    {php}// start - Verfügbarkeitsanzeige als Ampel ########################################################{/php}
    {if MY_OWN_DISPLAY_STOCK_PIECES=='yes'}
     {php}
     $MY_OWN_DISPLAY_STOCK_PIECES_TITLE = MY_OWN_DISPLAY_STOCK_LANG_BEFORE_PIECES . OptionOnStock($this->_tpl_vars[item_data][ID]) . MY_OWN_DISPLAY_STOCK_LANG_AFTER_PIECES;
     {/php}
    {/if}
    {if MY_OWN_DISPLAY_STOCK_PIECES=='no'}
     {php}
     $MY_OWN_DISPLAY_STOCK_PIECES_TITLE = '';
     {/php}
    {/if}
    {if MY_OWN_DISPLAY_STOCK=='yes'}
     {php}
     if((OptionOnStock($this->_tpl_vars[item_data][ID])<=0)){
     echo MY_OWN_DISPLAY_STOCK_LANG_BEFORE_OPTIONS . '<img src="templates/' . CURRENT_TEMPLATE . '/img/dot12x12red.gif" style="margin-bottom: -2px;" title="' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . '">' . MY_OWN_DISPLAY_STOCK_LANG_AFTER_OPTIONS;
     }elseif((OptionOnStock($this->_tpl_vars[item_data][ID])>=1) and (OptionOnStock($this->_tpl_vars[item_data][ID])<=MY_OWN_STOCK_PIECES_MAX)){
     echo MY_OWN_DISPLAY_STOCK_LANG_BEFORE_OPTIONS . '<img src="templates/' . CURRENT_TEMPLATE . '/img/dot12x12yellow.gif" style="margin-bottom: -2px;" title="' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . '"> ' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . MY_OWN_DISPLAY_STOCK_LANG_AFTER_OPTIONS;
     }else{
     echo MY_OWN_DISPLAY_STOCK_LANG_BEFORE_OPTIONS . '<img src="templates/' . CURRENT_TEMPLATE . '/img/dot12x12green.gif" style="margin-bottom: -2px;">' . MY_OWN_DISPLAY_STOCK_LANG_AFTER_OPTIONS;
     }
     {/php}
    {/if}
    {php}// ende - Verfügbarkeitsanzeige als Ampel #########################################################{/php}
    ***

    Verzeichnis anlegen: "/templates/AKTUELLES-TEMPLATE/smarty/" und Datei "modifier.StockImage_by_ProductsID.php" mit folgendem Inhalt dort hinein kopieren:

    Code: PHP  [Auswählen]
    <?php

    // -------------------------------------------------------------------------------
    //
    //      SmartyModifier "StockImage_by_ProductsID" für xt:Commerce
    //      Funktion: Anzeige einer Lagerbestands-Ampel
    //
    //      Version 1.0 (21. August 2007)
    //      (c) Gunnar Tillmann
    //
    // -------------------------------------------------------------------------------
    //      Getestet mit xt:Commerce 3.04, SP2.1
    // -------------------------------------------------------------------------------
    //      Code-Beispiele zum Einsatz im Template
    //
    //              {$PRODUCTS_ID|StockImage_by_ProductsID}
    //              {$module_data.PRODUCTS_ID|StockImage_by_ProductsID}
    //
    //      Weitere Infos: http://www.gunnart.de/?p=334
    // -------------------------------------------------------------------------------

    global $ImageConfig, $ImagePath;

    // -------------------------------------------------------------------------------
    // KONFIGURATION 1
    // Hier Bildnamen, Bestandsgrenzen
    // und Alternativtexte festlegen
    // -------------------------------------------------------------------------------
            $ImageConfig = array (  '0' => array (  'img' => 'dot12x12red.gif',
                                                                                            'alt' => 'Lager leer' ),
                                                            '1'     => array (      'img' => 'dot12x12yellow.gif',
                                                                                            'alt' => 'Bestand knapp' ),
                                                            MY_OWN_STOCK_PIECES_MAX => array (      'img' => 'dot12x12yellow.gif',
                                                                                            'alt' => 'Auf Lager' ),
                                                            MY_OWN_STOCK_PIECES_MAX+1       => array (      'img' => 'dot12x12green.gif',
                                                                                            'alt' => 'Lager voll' ) );
    // -------------------------------------------------------------------------------
    // KONFIGURATION 2
    // Hier den Pfad zu den "Ampelbildern" festlegen
    // -------------------------------------------------------------------------------
            $ImagePath = HTTP_SERVER.DIR_WS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/img/';
    // -------------------------------------------------------------------------------

    function StockImage($Anzahl) {
            global $ImageConfig, $ImagePath;

            if((MY_OWN_DISPLAY_STOCK_PIECES=='yes') and ($Anzahl<=MY_OWN_STOCK_PIECES_MAX)){
                    $MY_OWN_DISPLAY_STOCK_PIECES_TITLE = MY_OWN_DISPLAY_STOCK_LANG_BEFORE_PIECES . $Anzahl . MY_OWN_DISPLAY_STOCK_LANG_AFTER_PIECES;
                    $MY_OWN_DISPLAY_STOCK_PIECES_TEXT_TO_SHOW = ' (' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . ')';
            }
            if(MY_OWN_DISPLAY_STOCK_PIECES=='no'){
                    $MY_OWN_DISPLAY_STOCK_PIECES_TITLE = '';
            }

            $ImageConfigKeys = array_keys($ImageConfig);
            $Count = 0;
            while($Count <count($ImageConfigKeys)) {
                    if($Anzahl>= $ImageConfigKeys[$Count])
                            $ThisImage = $ImageConfigKeys[$Count];
                    $Count++;
            }
            if($Anzahl>=MY_OWN_STOCK_PIECES_MAX+1){
                    return '<div style="margin: 0 0 0 0;"><table cellpadding="0" cellspacing="0"><tr><td>' . MY_OWN_DISPLAY_STOCK_LANG_BEFORE_SINGLEPRODUCT . '</td><td>' . '<img src="'.$ImagePath.$ImageConfig[$ThisImage]['img'].'" alt="'.$ImageConfig[$ThisImage]['alt'].'" title="' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . '" />' . $MY_OWN_DISPLAY_STOCK_PIECES_TEXT_TO_SHOW . '</td><td>' . MY_OWN_DISPLAY_STOCK_LANG_AFTER_SINGLEPRODUCT . '</td></tr></table></div>';
            }else{
                    //return '<img src="'.$ImagePath.$ImageConfig[$ThisImage]['img'].'" alt="'.$ImageConfig[$ThisImage]['alt'].'" title="' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . '" />' . $MY_OWN_DISPLAY_STOCK_PIECES_TEXT_TO_SHOW;
                    return '<div style="margin: 0 0 0 0;"><table cellpadding="0" cellspacing="0"><tr><td>' . MY_OWN_DISPLAY_STOCK_LANG_BEFORE_SINGLEPRODUCT . '</td><td>' . '<img src="'.$ImagePath.$ImageConfig[$ThisImage]['img'].'" alt="'.$ImageConfig[$ThisImage]['alt'].'" title="' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . '" />' . $MY_OWN_DISPLAY_STOCK_PIECES_TEXT_TO_SHOW . '</td><td>' . MY_OWN_DISPLAY_STOCK_LANG_AFTER_SINGLEPRODUCT . '</td></tr></table></div>';
            }
    }

    function smarty_modifier_StockImage_by_ProductsID($ProdID) {
            if($ProdID) {
                    $aufLagerQuery =        xtDBquery("
                                                            SELECT products_quantity
                                                            FROM "
    .TABLE_PRODUCTS."
                                                            WHERE products_id = '"
    .$ProdID."'
                                                            "
    );
                    $aufLagerQuery = xtc_db_fetch_array($aufLagerQuery,true);
                    return StockImage($aufLagerQuery['products_quantity']);
            } else {
                    return false;
            }
    }

    ?>
    ***

    "/templates/AKTUELLES-TEMPLATE/module/product_info/product_info_v1.html"

    vor:

    Code: PHP  [Auswählen]
    {if $PRODUCTS_VPE}

    folgendes einfügen:

    Code: PHP  [Auswählen]
    {php}// start - Verfügbarkeitsanzeige als Ampel ########################################################{/php}
    {if MY_OWN_DISPLAY_STOCK=='yes'}
    {if $MODULE_product_options ==''}{$PRODUCTS_ID|StockImage_by_ProductsID}{/if}
    {/if}
    {php}// ende - Verfügbarkeitsanzeige als Ampel #########################################################{/php}
    ***

    wenn die Artikelanzahl auch in der Produktliste erscheinen soll:

    "/templates/AKTUELLES-TEMPLATE/module/product_listing/product_listing_v1.html"

    nach:

    Code: PHP  [Auswählen]
    <p class="price">{$module_data.PRODUCTS_PRICE}</p><p class="taxandshippinginfo">( {$module_data.PRODUCTS_TAX_INFO}{$module_data.PRODUCTS_SHIPPING_LINK} )</p>

    folgendes einfügen:

    Code: PHP  [Auswählen]
    {php}// start - Verfügbarkeitsanzeige als Ampel ########################################################{/php}
    {if MY_OWN_DISPLAY_STOCK=='yes'}
    {$module_data.PRODUCTS_ID|StockImage_by_ProductsID}
    {/if}
    {php}// ende - Verfügbarkeitsanzeige als Ampel #########################################################{/php}
    ***

      [ Für Gäste sind keine Dateianhänge sichtbar ] [ Für Gäste sind keine Dateianhänge sichtbar ]

    Quelle: Warenbestands-Ampel mit xt:Commerce

    [EDIT Tomcraft 22.09.2011: Anleitung editiert, damit auch die grüne Ampel angezeigt wird.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=5218.0
    Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware

    speedy

    • Viel Schreiber
    • Beiträge: 3.214
    Vielen Dank, doni für diese Lösung.

    Magst du bitte noch den Button PHP nutzen, um den Code lesbar zu machen.

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Eine wunderschöne Anleitung! :thx:

    Die verschiebe ich auch gerne mal in die Modulecke. :B

    Grüße

    Torsten

    ds170477

    • Fördermitglied
    • Beiträge: 1.522
    • Geschlecht:
    Hallo,

    ich kriege folgende Fehlermeldung:

    Code: PHP  [Auswählen]
    Fatal error: Smarty error: [in xtc5/module/product_info/product_info_v1.html line 18]: [plugin] modifier 'StockImage_by_ProductsID' is not implemented (core.load_plugins.php, line 118) in /var/customers/webs/dasch/ulla/includes/classes/Smarty_2.6.26/Smarty.class.php  on line 1097

    Ich hab die Dateien angehangen. Alles laut Anleitung eingebaut. :mhhh:

    Gruss

    Daniel

    ds170477

    • Fördermitglied
    • Beiträge: 1.522
    • Geschlecht:
    Problem durch Neuaufspielung gelöst. :thumbs:

    Ein Bug ist aber noch. Artikel die den Status "Grün" (Lagerbestand 100) haben, werden nicht dargestellt. Bei Lagerbestand 1 und 0 ist die Berechnung da?

    Gruss

    Daniel

      [ Für Gäste sind keine Dateianhänge sichtbar ] [ Für Gäste sind keine Dateianhänge sichtbar ]

    bewusst

    • Mitglied
    • Beiträge: 228
    Hallo,

    super Beschreibung inkl. Bilder!
    Danke  :thumbs:

    LG
    bewusst

    doni

    • Frisch an Board
    • Beiträge: 84
    @ ds170477

    Bei vollem Lagerbestand (grün) wird in meinem Shop nichts angezeigt.
    Wenn Du das ändern willst, war das, glaube ich, in der modifier.StockImage_by_ProductsID.php an Zeile 63.

    ds170477

    • Fördermitglied
    • Beiträge: 1.522
    • Geschlecht:
    @doni
    da hab ich es auch schon gefunden. Nur keine Achnung wie das geändert werden sollte. :doh:

    Gruss

    Daniel

    Desperant

    • Neu im Forum
    • Beiträge: 3
    Ich habe es wie folgt geändert und ich glaube es funktioniert!

    Code: PHP  [Auswählen]
    if($Anzahl>=MY_OWN_STOCK_PIECES_MAX+1){

                    return '<div style="margin: 0 0 0 0;"><table cellpadding="0" cellspacing="0"><tr><td>' . MY_OWN_DISPLAY_STOCK_LANG_BEFORE_SINGLEPRODUCT . '</td><td>' . '<img src="'.$ImagePath.$ImageConfig[$ThisImage]['img'].'" alt="'.$ImageConfig[$ThisImage]['alt'].'" title="' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . '" />' . $MY_OWN_DISPLAY_STOCK_PIECES_TEXT_TO_SHOW . '</td><td>' . MY_OWN_DISPLAY_STOCK_LANG_AFTER_SINGLEPRODUCT . '</td></tr></table></div>';
            }else{
                    //return '<img src="'.$ImagePath.$ImageConfig[$ThisImage]['img'].'" alt="'.$ImageConfig[$ThisImage]['alt'].'" title="' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . '" />' . $MY_OWN_DISPLAY_STOCK_PIECES_TEXT_TO_SHOW;
                    return '<div style="margin: 0 0 0 0;"><table cellpadding="0" cellspacing="0"><tr><td>' . MY_OWN_DISPLAY_STOCK_LANG_BEFORE_SINGLEPRODUCT . '</td><td>' . '<img src="'.$ImagePath.$ImageConfig[$ThisImage]['img'].'" alt="'.$ImageConfig[$ThisImage]['alt'].'" title="' . $MY_OWN_DISPLAY_STOCK_PIECES_TITLE . '" />' . $MY_OWN_DISPLAY_STOCK_PIECES_TEXT_TO_SHOW . '</td><td>' . MY_OWN_DISPLAY_STOCK_LANG_AFTER_SINGLEPRODUCT . '</td></tr></table></div>';
            }

    romanplanet

    • Fördermitglied
    • Beiträge: 63
    Hallo

    An alle modified eCommerce Shopsoftware Forenmitglieder.

    Vielen Dank für dieses Modul!
    Habe es auch sehr leicht installiert bekommen - tolle Anleitung!

    Habe aber nun noch eine Frage:

    Wie bekomme ich das hin, dass die Anzeige z.B. bei gelb auf Lager keine genauen Stückzahlen angibt.

    Sollen also nicht alle wissen, das noch 10 Stk. auf Lager sind.
    ich denke es reicht auch, das man weiß. Toll der Artikel ist auf Lager und kann sofort versendet werden.

    Ich bedanke mich schon einmal bei euch.

    Danke!

    Gruß Michael

    jkatzorke

    • Frisch an Board
    • Beiträge: 77
    Wenn ich es richtig verstanden habe, musst Du MY_OWN_DISPLAY_STOCK_PIECES auf 'no' setzen.

    romanplanet

    • Fördermitglied
    • Beiträge: 63
    Super

    Vielen Dank für die schnelle Hilfe.
    Tja, man sollte besser englisch können ;-)

    Gruß Michael

    Sandro

    • Schreiberling
    • Beiträge: 309
    Wo kann man denn Einstellen, bei welcher Stückzahl welche Farbe angezeigt wird?

    Danke für diese Anleitung!

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Hier:

    Code: PHP  [Auswählen]
    <?php
    [...]
    // -------------------------------------------------------------------------------
    // KONFIGURATION 1
    // Hier Bildnamen, Bestandsgrenzen
    // und Alternativtexte festlegen
    // -------------------------------------------------------------------------------
            $ImageConfig = array (  '0' => array (  'img' => 'dot12x12red.gif',
                                                                                            'alt' => 'Lager leer' ),
                                                            '1'     => array (      'img' => 'dot12x12yellow.gif',
                                                                                            'alt' => 'Bestand knapp' ),
                                                            MY_OWN_STOCK_PIECES_MAX => array (      'img' => 'dot12x12yellow.gif',
                                                                                            'alt' => 'Auf Lager' ),
                                                            MY_OWN_STOCK_PIECES_MAX+1       => array (      'img' => 'dot12x12green.gif',
                                                                                            'alt' => 'Lager voll' ) );
    [...]
    ?>
     
    Kurze Erklärung:

    Bestand = "0" -> rot
    Bestand = "1" -> gelb
    Bestand> "1" -> grün

    Grüße

    Torsten

    Sandro

    • Schreiberling
    • Beiträge: 309
    Was muss ich denn da hin schreiben, wenn ich bei 1 Stück Rot angezeigt haben will, ab 10 Stück Gelb und mehr als 10 Grün?

    14 Antworten
    7966 Aufrufe
    19. Februar 2013, 17:57:43 von Tommy200463
    17 Antworten
    10951 Aufrufe
    08. Dezember 2010, 17:51:35 von spectrum
    5 Antworten
    2649 Aufrufe
    23. April 2016, 23:28:36 von Kawabiker
    0 Antworten
    2000 Aufrufe
    24. August 2010, 18:56:05 von DanceOnTop