Anleitung Artikelnummern in der Listen- und Kachelansicht im Honeygrid

Thema wurde von barbara, 27. November 2016 erstellt.

  1. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    #1 barbara, 27. November 2016
    Zuletzt bearbeitet: 23. Januar 2017
    Da doch immer mal wieder danach gefragt wird, wie man die Artikelnummer in der Artikelübersicht (Liste und Kachel) anzeigen lassen kann, Hier eine Anleitung:

    Zunächst muss man die Artikel-Nummer für die Listenansicht zur Verfügung stellen.
    Dazu muss eine Datei model_product.ink.php im Verzeichnis
    GXUserComponents/ overloads/ product/
    an. (Bei einer Shopversion unter 3.1 muss die Datei in den Ordner user_classes/ overloads/ product/ )

    Die Datei model_product.ink.php hat folgenden Inhalt:
    PHP:
    <?php

    class model_product extends model_product_parent
    {
        function 
    buildDataArray(&$array$image 'thumbnail')
        {
            global 
    $xtPrice$main;
        
            
    $t_data_array=parent::buildDataArray($array$image);
                
            
    //Additional info in $t_data_array
             
    $t_data_array['PRODUCTS_MODEL']=$array['products_model'];
        
            
    //Additional info in $t_data_array

            
    return $t_data_array;
            
    // EOF GM_MOD
        
    }


    function 
    getAlsoPurchased()
       {
         
    // BOF YOOCHOOSE
         
    if(defined('YOOCHOOSE_ACTIVE') && YOOCHOOSE_ACTIVE)
         {
           require_once (
    DIR_WS_INCLUDES 'yoochoose/recommendations.php');
           require_once (
    DIR_WS_INCLUDES 'yoochoose/functions.php');
           return 
    recommendData(getAlsoPurchasedStrategy(), $this->pIDMAX_DISPLAY_ALSO_PURCHASED);
         }
         
    // EOF YOOCHOOSE

         
    global $xtPrice;

         
    $module_content = array();
         
    $t_query=parent::getAlsoPurchased();

         
    $fsk_lock "";
         if(
    $_SESSION['customers_status']['customers_fsk18_display'] == '0')
         {
           
    $fsk_lock ' and p.products_fsk18!=1';
         }
         
    $group_check "";
         if(
    GROUP_CHECK == 'true')
         {
           
    $group_check " and p.group_permission_" $_SESSION['customers_status']['customers_status_id'] . "=1 ";
         }

         
    // BOF GM_MOD:
         
    $t_query "SELECT
                 p.products_fsk18,
                 p.products_id,
                 p.products_price,
                 p.products_tax_class_id,
                 p.products_image,
                 p.products_model,
                 pd.gm_alt_text,
                 pd.products_name,
                 pd.products_meta_description,
                 p.products_vpe,
                 p.products_vpe_status,
                 p.products_vpe_value,
                 pd.products_short_description
               FROM
                 " 
    TABLE_ORDERS_PRODUCTS " opa,
                 " 
    TABLE_ORDERS_PRODUCTS " opb,
                 " 
    TABLE_ORDERS " o,
                 " 
    TABLE_PRODUCTS " p,
                 " 
    TABLE_PRODUCTS_DESCRIPTION " pd
               WHERE
                 opa.products_id = '" 
    $this->pID "'
                 AND opa.orders_id = opb.orders_id
                 AND opb.products_id != '" 
    $this->pID "'
                 AND opb.products_id = p.products_id
                 AND opb.orders_id = o.orders_id
                 AND p.products_status = '1'
                 AND pd.language_id = '" 
    . (int)$_SESSION['languages_id'] . "'
                 AND opb.products_id = pd.products_id
                 AND o.date_purchased > DATE_SUB(NOW(),INTERVAL " 
    MAX_DISPLAY_ALSO_PURCHASED_DAYS " DAY)
                 " 
    $group_check "
                 " 
    $fsk_lock "
               GROUP BY
                 p.products_id
               ORDER BY
                 o.date_purchased desc
               LIMIT
                 " 
    MAX_DISPLAY_ALSO_PURCHASED;
         
    $t_query xtc_db_query($t_query);
         while(
    $orders xtc_db_fetch_array($t_querytrue))
         {
           
    $module_content[] = $this->buildDataArray($orders);
         }

         return 
    $module_content;
       }
       function 
    getCrossSells()
        {
            global 
    $xtPrice;

            
    $t_query "SELECT
                            products_xsell_grp_name_id
                        FROM
                            " 
    TABLE_PRODUCTS_XSELL "
                        WHERE
                            products_id = '" 
    $this->pID "'
                        GROUP BY
                            products_xsell_grp_name_id"
    ;
            
    $cs_groups xtc_db_query($t_query);
            
    $cross_sell_data = array();
            if(
    xtc_db_num_rows($cs_groupstrue) > 0)
            {
                while(
    $cross_sells xtc_db_fetch_array($cs_groupstrue))
                {

                    
    $fsk_lock '';
                    if(
    $_SESSION['customers_status']['customers_fsk18_display'] == '0')
                    {
                        
    $fsk_lock ' AND p.products_fsk18!=1';
                    }
                    
    $group_check "";
                    if(
    GROUP_CHECK == 'true')
                    {
                        
    $group_check " AND p.group_permission_" $_SESSION['customers_status']['customers_status_id'] . "=1 ";
                    }

                    
    // BOF GM_MOD:
                    
    $cross_query "
                                    SELECT
                                        p.products_fsk18,
                                        p.products_tax_class_id,
                                        p.products_id,
                                        p.products_image,
                                        pd.products_name,
                                        p.products_model,
                                        pd.products_short_description,
                                        pd.products_meta_description,
                                        p.products_fsk18,
                                        p.products_price,
                                        pd.gm_alt_text,
                                        p.products_vpe,
                                        p.products_vpe_status,
                                        p.products_vpe_value,
                                        xp.sort_order
                                    FROM
                                        " 
    TABLE_PRODUCTS_XSELL " xp,
                                        " 
    TABLE_PRODUCTS " p,
                                        " 
    TABLE_PRODUCTS_DESCRIPTION " pd
                                    WHERE
                                        xp.products_id = '" 
    $this->pID "'
                                    AND
                                        xp.xsell_id = p.products_id " 
    .
                                        
    $fsk_lock .
                                        
    $group_check "
                                    AND
                                        p.products_id = pd.products_id
                                    AND
                                        xp.products_xsell_grp_name_id='" 
    $cross_sells['products_xsell_grp_name_id'] . "'                        
                                    AND
                                        pd.language_id = '" 
    . (int)$_SESSION['languages_id'] . "'
                                    AND
                                        p.products_status = '1'
                                    ORDER BY
                                        xp.sort_order ASC"
    ;

                    
    $cross_query xtDBquery($cross_query);
                    if(
    xtc_db_num_rows($cross_querytrue) > 0)
                    {
                        
    $cross_sell_data[$cross_sells['products_xsell_grp_name_id']] = array('GROUP' => xtc_get_cross_sell_name($cross_sells['products_xsell_grp_name_id']), 'PRODUCTS' => array());
                    }

                    while(
    $xsell xtc_db_fetch_array($cross_querytrue))
                    {
                        
    $cross_sell_data[$cross_sells['products_xsell_grp_name_id']]['PRODUCTS'][] = $this->buildDataArray($xsell);
                    }
                }
                return 
    $cross_sell_data;
            }
        }
           function 
    getReverseCrossSells()
       {
         global 
    $xtPrice;


         
    $fsk_lock '';
         if(
    $_SESSION['customers_status']['customers_fsk18_display'] == '0')
         {
           
    $fsk_lock ' and p.products_fsk18!=1';
         }
         
    $group_check "";
         if(
    GROUP_CHECK == 'true')
         {
           
    $group_check " and p.group_permission_" $_SESSION['customers_status']['customers_status_id'] . "=1 ";
         }

         
    // BOF GM_MOD:
         
    $t_query "SELECT
                 p.products_fsk18,
                 p.products_tax_class_id,
                 p.products_id,
                 p.products_image,
                 p.products_model,         
                 pd.products_name,
                 pd.products_short_description,
                 pd.products_meta_description,
                 p.products_fsk18,
                 p.products_price,
                 pd.gm_alt_text,
                 p.products_vpe,
                 p.products_vpe_status,
                 p.products_vpe_value,
                 xp.sort_order
               FROM
                 " 
    TABLE_PRODUCTS_XSELL " xp,
                 " 
    TABLE_PRODUCTS " p,
                 " 
    TABLE_PRODUCTS_DESCRIPTION " pd
               WHERE
                 xp.xsell_id = '" 
    $this->pID "'
               AND
                 xp.products_id = p.products_id " 
    .
               
    $fsk_lock .
               
    $group_check "
               AND
                 p.products_id = pd.products_id
               AND
                 pd.language_id = '" 
    . (int)$_SESSION['languages_id'] . "'
               AND
                 p.products_status = '1'
               ORDER BY
                 xp.sort_order ASC"
    ;
     
         
    $cross_query xtc_db_query($t_query);

         while(
    $xsell xtc_db_fetch_array($cross_querytrue))
         {
           
    $cross_sell_data[] = $this->buildDataArray($xsell);
         }

         return 
    $cross_sell_data;
       }
      }
    ?>
    die Datei findet Ihr im Anhang

    Um die Nummer in der Kategorie anzeigen zu lassen, bitte einmal die Datei
    templates/ Honeygrid/ snippets/ product_listing/ product.html
    runterladen.
    Sucht nach der Zeile
    HTML:
    <div class="title-description">
    und fügt darunter dies ein:
    HTML:
    <!-- Artikelnummer start -->
                                {if $module_data.PRODUCTS_MODEL}
                                    <div class="model">
                                {$module_data.PRODUCTS_MODEL}
                                    </div>
                                {/if}
    <!-- Artikelnummer ende -->
    die Datei als product-USERMOD.html speichern und neben die Originale hochladen.

    Damit die Artikelnummer auch auf der Startseite, den Angeboten, Cross-Selling... erscheint, muss das selbe noch einmal mit der Datei
    templates/ Honeygrid/ snippets/ product_listing/ product_grid_only.html
    gemacht werden.

    Wer ein "Artikelnummer: " vor der Artikelnummer haben möchte, nimmt fügt diesen Code in die beiden Template-Dateien einfügen:
    HTML:
    <!-- Artikelnummer start -->
                                {if $module_data.PRODUCTS_MODEL}
                                    <div class="model">
                                Artikelnummer: {$module_data.PRODUCTS_MODEL}
                                    </div>
                                {/if}
    <!-- Artikelnummer ende -->

    Da ich die Änderungen bei mir mit den Extrafeldern zusammengeschrieben habe, hoffe ich mal, dass ich keine Datei vergessen habe.

    Wie immer keine Garantie. Erst im Testshop ausprobieren. Datensicherung nciht vergessen.

    Fehler gefunden und behoben, Datei im Anhang ausgetauscht.
    Hinweis:
    in der Version 3.x ist der Ordner "user_classes" umgezogen und heißt "GXUserComponents"
    Die Datei muss dann dahin.
     

    Anhänge:

  2. Tasso

    Tasso Mitglied

    Registriert seit:
    2. Januar 2017
    Beiträge:
    13
    Danke erhalten:
    1
    Danke vergeben:
    5
    Hallo Barbara,

    ich wollte noch eine Info zu diesem MOD geben, ich habe es in meinem Shop angefügt und beim Aufruf der Produkte kam ein SQL Fehler:

    SQL ERROR(1064): "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.products_name,
    pd.products_short_description,
    pd.prod' at line 8" in /is/htdocs/wp12161028_ROM2SXPAMZ/www/inc/xtc_db_error.inc.php:23

    Ich habe dieses MOD an der Gambio GX3 v3.3.1.2 installiert.

    Ich weiß nicht ob irgendein Fehler nur bei der von mir verwendete Gambio Version auftritt, dachte aber dass diese Information hilfreich sein könnte!

    Ich habe jetzt bei mir die originalen Dateien aufgespielt und der Fehler ist weg.

    Tasso
     
  3. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Danke für den Hinweis.
    Doch das funktioniert, nur wenn da eine Leerzeile und darüber eine Zeile mit Kauderwelsch steht (wie auch immer die dahin gekommen ist :oops:) dann kann kommt der Shop ins schleudern.

    Der Fehler ist oben behoben und die Datei ist neu hochgeladen. Bitte einmal testen :)
     
  4. Tasso

    Tasso Mitglied

    Registriert seit:
    2. Januar 2017
    Beiträge:
    13
    Danke erhalten:
    1
    Danke vergeben:
    5
    Hallo Barbara,

    ich habe es jetzt eingespielt und es funktioniert.

    Falls ich irgendwas bemerke schreibe ich hier!

    Danke dir!!! :)
     
  5. RM-MAG

    RM-MAG Mitglied

    Registriert seit:
    11. Dezember 2014
    Beiträge:
    11
    Danke erhalten:
    0
    Danke vergeben:
    2
    Hallo,

    wir setzen gerade die Version v3.4.2.0 ein und benötigen genau diese Funktion (Art.Nr. auf den Übersichten). Nach der oben genannten Anleitung scheint das Bereitstellen der Artikelnummer nicht zu funktionieren.
    Der Unterordner "product" (GXUserComponents/overloads/product) existiert in der 4.2.0 nicht mehr und habe ihn deshalb neu angelegt - kann es sein, dass hier die Fehlerquelle liegt? Gibt es jemanden, der diese Funktion in der Version 4.2.0 oder neuer betreibt und einen Tipp für mich hat?

    Vielen Dank im Voraus.
     
  6. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    #6 barbara, 13. Juli 2017
    Zuletzt bearbeitet: 13. Juli 2017
    Ich habe die Version 3.5.3.0 und es funktioniert.
    Den Ordner muss man anlegen, das ist richtig.
    Ich vergleiche mal eben die Dateien, ob sich noch einmal etwas geändert hat.

    Nachtrag:
    nein, die Datei ist gleich.
     
  7. RM-MAG

    RM-MAG Mitglied

    Registriert seit:
    11. Dezember 2014
    Beiträge:
    11
    Danke erhalten:
    0
    Danke vergeben:
    2
    Danke für die schnelle Antwort. Ich bin`s nochmal durchgegangen und kann keine Abweichung von der Anleitung entdecken. Muss man ggf. die USERMOD-Datei irgendwo im Shop aktivieren, damit diese greift?
    Ich bekomme in der letztlich Seitenausgabe immer nur folgenden Code - also irgendwie gibt er wohl die Artikelnummer nicht raus ...
    HTML:
                            <div class="title-description">
                            <!-- Artikelnummer start -->
                            <!-- Artikelnummer ende -->
    
                                <div class="title">
    Liegt`s ggf. an Dateiberechtigungen? Diese habe ich allerdings so gesetzt wie die anderen Ordner und Dateien auch.
     
  8. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Ich hatte die Overload - Datei überprüft, aber nicht die USERMODS, sorry
    Nimm mal bitte den Code in der product_grid_only-USERMOD.html:
    Code:
    {if $PRODUCT.PRODUCTS_MODEL}
                                    <div class="model">
                                {$PRODUCT.PRODUCTS_MODEL}
                                    </div>
                                {/if}    
    In der product-USERMOD.html steht bei mir aber weiterhin der andere Code.
     
  9. RM-MAG

    RM-MAG Mitglied

    Registriert seit:
    11. Dezember 2014
    Beiträge:
    11
    Danke erhalten:
    0
    Danke vergeben:
    2
    Vielen Dank. Jetzt funktioniert die Artikelnummer-Anzeige - ich vergaß, den richtigen Cache zu leeren.
    Noch eine kleine Frage: wie muss ich denn den folgenden Code abändern, damit ich das Wort "Artikelnummer:" direkt aus den Sprachdateien laden kann (benötige hier die Mehrsprachigkeit)?
    HTML:
    <!-- Artikelnummer start -->
                                {if $module_data.PRODUCTS_MODEL}
                                    <div class="model">
                                Artikelnummer: {$module_data.PRODUCTS_MODEL}
                                    </div>
                                {/if}
    <!-- Artikelnummer ende -->
     
  10. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Das müsste so gehen:
    HTML:
    <!-- Artikelnummer start -->
                                {if $module_data.PRODUCTS_MODEL}
                                    <div class="model">
                                {$txt.text_model} {$module_data.PRODUCTS_MODEL}
                                    </div>
                                {/if}
    <!-- Artikelnummer ende -->
    Dann sollte der Text erscheinen, der auch im Artikel bei der Artikelnummer steht.
     
  11. RM-MAG

    RM-MAG Mitglied

    Registriert seit:
    11. Dezember 2014
    Beiträge:
    11
    Danke erhalten:
    0
    Danke vergeben:
    2
    Das Wort wird leider noch nicht angezeigt (alle Caches vorab geleert). Kann es sein, dass man die Textpassage vorladen muss bzw. auch nochmal die Overload-Datei dafür modifiziert werden muss?
     
  12. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Ich habe es gerade getestet. das geht, wenn es in der richtigen Sprachdatei steht.

    Hast Du eine lang/ sprache/ user_sections/ product/ product_listing.lang.inc.php?
     
  13. RM-MAG

    RM-MAG Mitglied

    Registriert seit:
    11. Dezember 2014
    Beiträge:
    11
    Danke erhalten:
    0
    Danke vergeben:
    2
    Ich habe es anders gelöst, indem ich in den Dateien "product-USERMOD.html" und "product_grid_only-USERMOD.html" ganz oben jeweils die Zeile
    HTML:
    {load_language_text section="product_info"}
    eingefügt habe.
    So wird jetzt in jeder Sprache der dafür hinterlegte Begriff geladen.
     
  14. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Die Zeile ({load_language_text section="product_info" name="info"})
    gab es bei mir schon, deshalb dacht ich auch, dass es gehen müsste.

    Wenn es nun läuft, ist alles gut :)
     
  15. RM-MAG

    RM-MAG Mitglied

    Registriert seit:
    11. Dezember 2014
    Beiträge:
    11
    Danke erhalten:
    0
    Danke vergeben:
    2
    Der Zusatz name="info" hat die Ladeauswahl wohl so beschränkt, dass die benötigte Zeile nicht zur Verfügung gestellt werden konnte.
    Alles perfekt - vielen Dank nochmal!
     
  16. RM-MAG

    RM-MAG Mitglied

    Registriert seit:
    11. Dezember 2014
    Beiträge:
    11
    Danke erhalten:
    0
    Danke vergeben:
    2
    Hallo Barbara,
    vielleicht können Sie uns bei folgendem Problem auch behilflich sein: https://www.gambio.de/forum/threads/neue-artikel-swiper-auf-artikeldetailseite.32177/

    Es scheint hier - ähnlich wie bei den Artikelnummern - um einen Overload o.ä. zu gehen, der die passenden Artikeldaten zur Anzeige bereitstellt. Wir können zwar die Anzeige einstellen, jedoch werden keine Artikel geladen.
    Sie scheinen sich da in der Struktur besser auszukennen und können uns ggf. auch hier weiterhelfen.
     
  17. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Nein, da bin ich leider raus.
     
  18. RM-MAG

    RM-MAG Mitglied

    Registriert seit:
    11. Dezember 2014
    Beiträge:
    11
    Danke erhalten:
    0
    Danke vergeben:
    2
    Danke trotzdem - hätte ja sein können, dass Sie uns einen Tipp dazu geben hätten können, der uns auf die richtige Spur führt.
     
  19. Anonymous

    Anonymous Mitglied

    Registriert seit:
    19. August 2017
    Beiträge:
    15
    Danke erhalten:
    2
    Danke vergeben:
    2
    Hallo Barbara,

    ich würde gerne den EAN in der Listenansicht mit einbinden.

    Ich habe deine Datei kopiert, diese in "ean_product.inc.php" umbenannt und entsprechen model_product zu ean_product und model_product_parent zu ean_product_parent gemacht.

    in Zeile 13 habe ich folgendes stehen: $t_data_array['PRODUCTS_EAN']=$array['products_ean'];

    und in den SQL Abfragen habe ich products_model durch products_ean ersetzt.

    Die Datei habe ich wie von dir beschrieben in den Ordner: GXUserComponents/overloads/product gelegt
    Muss ich noch irgendwas beachten?

    Leider gibt er mir im Template "product-USERMOD.html" nichts aus.
    Caches habe ich alle geleert.

    Lg Dominic
     
  20. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Welche Shopversion?

    wo kommt die her? oder wo soll die hin?