Overloading von Produktinfos

Thema wurde von Cyrus (LeGong), 21. Oktober 2014 erstellt.

  1. Mick-D

    Mick-D Erfahrener Benutzer

    Registriert seit:
    13. August 2012
    Beiträge:
    207
    Danke erhalten:
    12
    Danke vergeben:
    20
    Hi,
    gibt es schon eine Lösung um die Zusatzfelder auch auf Produkt Listing anzuzeigen?!


    Gruß Michael
     
  2. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Welche Mode? Artikel-List rows? Oder Artikel-List Cols?
     
  3. Mick-D

    Mick-D Erfahrener Benutzer

    Registriert seit:
    13. August 2012
    Beiträge:
    207
    Danke erhalten:
    12
    Danke vergeben:
    20
    sorry, ich meinte das die Felder auch auf der Artikellistenansicht erscheinen ;-)


    Gruß
     
  4. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    #24 Cyrus (LeGong), 18. März 2015
    Zuletzt bearbeitet: 18. März 2015
    Ja, aber es gibt zwei Einstellungen, einen Artikel pro Zeile "article-list rows" oder gekachelt "article-list cols"

    rows-cols.jpg
     
  5. Mick-D

    Mick-D Erfahrener Benutzer

    Registriert seit:
    13. August 2012
    Beiträge:
    207
    Danke erhalten:
    12
    Danke vergeben:
    20
    Es sollte wenn es möglich ist auf beiden funktionieren
     
  6. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Ich habe leider keine Zeit das zu machen. Aber die betroffene Dateien sind:
    1: EyeCandy/objects/product_box_list.html
    2: EyeCandy/module/product_listing/product_listing_v1.html
    Wenn du die Struktur studierst, dann wirst du schon wissen wie es geht und wie du deine Änderungen positionieren willst. Die geänderte Dateien als:
    1: product_box_list-USERMOD.html
    2: product_listing_v1-USERMOD.html
    speichern. Dann ist es Updatessicher und die ORIGINALE Bleiben erhalten
     
  7. Mick-D

    Mick-D Erfahrener Benutzer

    Registriert seit:
    13. August 2012
    Beiträge:
    207
    Danke erhalten:
    12
    Danke vergeben:
    20
    Ok, danke schon mal für die Info.


    Werde mich da mal ran machen und berichten ;-)


    Gruß Michael
     
  8. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.452
    Danke erhalten:
    11.253
    Danke vergeben:
    1.606
    Das reicht nicht. Die Daten müssen erst in einer php-Datei abgerufen werden, damit sie in der html ausgegeben werden können.
    Das habe ich bisher nicht hinbekommen.
     
  9. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Da hast du bestimmt recht. Aber welche PHP-Datei sollte es sein? Diese datei liegt bestimmt in dem Ordner /system/classes.
     
  10. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.452
    Danke erhalten:
    11.253
    Danke vergeben:
    1.606
    Vermutlich in der system/ classes/ listing/
    und dann eine der ProductListingContent...

    Ich bin hier noch nicht wirklich zum Testen gekommen, hatte das bisher nur in der 2.0 probiert.
     
  11. Mick-D

    Mick-D Erfahrener Benutzer

    Registriert seit:
    13. August 2012
    Beiträge:
    207
    Danke erhalten:
    12
    Danke vergeben:
    20
    ...hat schon jemand eine Idee?!

    Bekomme das irgendwie nicht zum laufen.

    Gruß Michael
     
  12. Mick-D

    Mick-D Erfahrener Benutzer

    Registriert seit:
    13. August 2012
    Beiträge:
    207
    Danke erhalten:
    12
    Danke vergeben:
    20
    ...es funktioniert immer noch nicht :(

    Kann einer helfen :confused:

    Gruß Michael
     
  13. Mick-D

    Mick-D Erfahrener Benutzer

    Registriert seit:
    13. August 2012
    Beiträge:
    207
    Danke erhalten:
    12
    Danke vergeben:
    20
    So ich habe ich jetzt mal einiges getestet.

    In der Datei "ProductListingContentControl.inc.php" im Verzeichnis system/classes/listing/

    habe ich die Zeile p.products_uvp (so lautet mein Extrafeld in der DB Tabelle products) jeweils
    wie folgt eingefügt:
    Zeile: 632
    PHP:
    ....
                
    //build query
                
    $t_select "SELECT distinct
                          p.products_id,
                          p.products_price,
                          p.products_model,
                          p.products_uvp,
                          p.products_quantity,
                          p.products_shippingtime,
                          p.products_fsk18,
    ....
    und hier:
    Zeile: 1195
    PHP:
    ....
                    
    $this->sql_query "SELECT DISTINCT p.products_fsk18,
                                            p.products_shippingtime,
                                            p.products_model,
                                            p.products_uvp,
                                            p.products_ean,
                                            pd.products_name,
                                            m.manufacturers_name,
                                            p.products_quantity,
                                            p.products_image,
    ....
    und hier:
    Zeile: 1282
    PHP:
    ....
                    
    $this->sql_query "SELECT DISTINCT p.products_fsk18,
                                            p.products_shippingtime,
                                            p.products_model,
                                            p.products_uvp,
                                            p.products_ean,
                                            pd.products_name,
                                            m.manufacturers_name,
                                            p.products_quantity,
                                            p.products_image,
    ....
    und hier:
    Zeile: 1408
    PHP:
    ....
                
    $this->sql_query "SELECT DISTINCT p.products_fsk18,
                                                p.products_shippingtime,
                                                p.products_model,
                                                p.products_uvp,
                                                p.products_ean,
                                                pd.products_name,
                                                m.manufacturers_name,
                                                p.products_quantity,
                                                p.products_image,
    ....
    Dann habe ich die Datei "product_listing_v1-USERMOD.html im Ordner templates/EyeCandy/module/product_listing" wie folgt ergänzt:
    Zeile: 153
    PHP:
    ...
                    <
    div class="article-list-item-right">
                        <
    div class="article-list-item-price">
    <!-- 
    BOF products_extrafield -->                            
                                <
    br/>{$txt.text_products_uvp
                                <
    span class="products_uvp">{$module_data.PRODUCTS_UVP}</span><br/>
    <!-- 
    EOF products_extrafield -->
                                <
    span class="price"><a href="{$module_data.PRODUCTS_LINK}">
                                    <
    span class="gm_price" id="gm_attr_calc_price_{$module_data.PRODUCTS_ID}">
                                        {
    $module_data.PRODUCTS_PRICE}
                                        {if 
    $module_data.PRODUCTS_VPE}
                                            <
    br /><span class="gm_products_vpe">{$module_data.PRODUCTS_VPE}</span><br />
                                        {/if}
                                    </
    span>
                                </
    a></span>{if !$module_data.PRODUCTS_VPE}<br />{/if}
                            {if (
    $module_data.PRODUCTS_TAX_INFO neq '' || $module_data.PRODUCTS_SHIPPING_LINK neq '') && $module_data.GM_PRODUCTS_QTY}
                            <
    span class="tax-shipping-text">{$module_data.PRODUCTS_TAX_INFO}{$module_data.PRODUCTS_SHIPPING_LINK}</span><br />
                            {/if}
                        </
    div>
                    </
    div>
    ....
    Es sieht auch so aus wie es soll, doch leider zieht er den Wert nicht aus der Tabelle :confused:
    Wenn ich die Variable änder in eine x beliebige aus der DB die nicht "extra" angelegt wurde, wie z.B.
    {$module_data.PRODUCTS_WEIGHT}
    wird der Wert angezeigt.

    Ich weiß nicht weiter :(

    Vieleicht hat ja einer von euch eine Idee.

    Gruß Michael

    (Bitte keine Fragen warum ich dieses Feld brauche :rolleyes:)
     

    Anhänge:

  14. Mick-D

    Mick-D Erfahrener Benutzer

    Registriert seit:
    13. August 2012
    Beiträge:
    207
    Danke erhalten:
    12
    Danke vergeben:
    20
    Kann keiner helfen ...

    Gruß Michael
     
  15. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    @Mick-D
    Um Extra-Felder in Products_Listing anzeigen zu lassen, muss man an 5 Dateien Änderungen ausüben.
    Datei 1: /shop-ordner/includes/product.php. Suche nach:
    PHP:
    $t_data_array = array('PRODUCTS_NAME' => htmlspecialchars_wrapper($array['products_name']),
                
    'COUNT' => $array['ID'],
                
    'PRODUCTS_ID' => $array['products_id'],
                
    'PRODUCTS_VPE' => $this->getVPEtext($array$products_price['plain']),
                
    'PRODUCTS_IMAGE' => $this->productImage($array['products_image'], $image),
                
    'PRODUCTS_IMAGE_W' => $array['products_image_w'],
                
    'PRODUCTS_IMAGE_H' => $array['products_image_h'],
                
    'PRODUCTS_IMAGE_WIDTH' => PRODUCT_IMAGE_THUMBNAIL_WIDTH,
                
    'PRODUCTS_IMAGE_PADDING' => ((PRODUCT_IMAGE_THUMBNAIL_HEIGHT 8) - $array['products_image_h']) / 2,
                
    'PRODUCTS_IMAGE_ALT' => $array['gm_alt_text'],
    und füge danach: in meinem Beispiel "PRODUCTS_INHALT"
    PHP:
    'PRODUCTS_INHALT' => $array['products_inhalt'],
    Diese Datei, GLAUBE ICH, kann leider nicht Updatessicher geändert werden.
    Datei 2: /shop-ordner/system/classes/listing/ProductListingContentControl.inc.php. Suche nach:
    PHP:
    // sort by price
                
    if(strpos($t_orderby'p.products_price') !== false)
                {
                    if(
    $this->show_price_tax != 0)
                    {
                        
    $t_select_part ", ROUND(IF(s.status = '1' AND p.products_id = s.products_id, s.specials_new_products_price, p.products_price) * (IF(p.products_tax_class_id = 0,0,tax_rate)/100+1), 2) AS final_price ";
                        
    $t_from_part   "LEFT JOIN " TABLE_TAX_RATES " AS tr ON (p.products_tax_class_id = tr.tax_class_id OR p.products_tax_class_id = 0)
                                        LEFT JOIN " 
    TABLE_ZONES_TO_GEO_ZONES .
                                         
    " AS gz ON (tr.tax_zone_id = gz.geo_zone_id AND gz.zone_country_id = '" .
                                         
    $this->customer_country_id "') ";
                        
    $t_where_part  " AND (gz.zone_id = '0' OR gz.zone_id = '" .
                                         
    $this->customer_zone_id "') ";
                    }
                    else
                    {
                        
    $t_select_part ", ROUND(IF(s.status = '1' AND p.products_id = s.products_id, s.specials_new_products_price, p.products_price), 2) AS final_price ";
                    }

                    
    $t_sorting str_replace('p.products_price''final_price'$t_sorting);
                }

                
    $this->sql_query "SELECT DISTINCT p.products_fsk18,
                                                p.products_shippingtime,
                                                p.products_model,
    und füge danach:
    PHP:
    p.products_inhalt,
    Diese Datei kann man evtl. Updatessicher ändern. Aber habe ich leider momentan keine Zeit um das zu testen.
    Datei 3: ../templates/EyeCandy/module/product_listing/product_listing_v1.html. Suche nach der Stelle wo du es platzieren möchtest. Bei mir wie folgt:
    HTML:
    <div class="article-list-item-main">
                            <h2>
                                <a href="{$module_data.PRODUCTS_LINK}" class="product_link"{if $module_data.PRODUCTS_META_DESCRIPTION != ''} title="{$module_data.PRODUCTS_META_DESCRIPTION|truncate:80:"..."|replace:'"':'&quot;'}"{/if}>{$module_data.PRODUCTS_NAME}</a>
                            </h2>
                            <p>{$module_data.PRODUCTS_SHORT_DESCRIPTION}<br />
    Und füge folgendes ein:
    HTML:
    <!-- BOF products_extrafield -->
                        {if $module_data.PRODUCTS_INHALT || $module_data.SHOW_PRODUCTS_INHALT}
                               {$txt.text_products_inhalt}
                               {$module_data.PRODUCTS_INHALT}
                        {/if}
    <!-- EOF products_extrafield -->
    Diese datei kann Updatessicher unter product_listing_v1-USERMOD.html gespeichert werden.
    Datei 4: ../lang/english/sections/_samples/product_listing.lang.inc.php kopieren und in Ordner sections, also eine verzeichnis-Ebene höher speichern.
    Dann in der Datei folgendes suchen:
    PHP:
    $t_language_text_section_content_array = array
    (
      
    'heading_search_result' => 'Your search results',
    und den gewünschten Text wie folgt einfügen:
    PHP:
    // BOF Producst-Extrafield
    'text_products_inhalt' => 'Content:',
    // EOF Products-Extrafield
    Diese datei ist Updatessicher
    Datei 5: Jetzt für die deutsche Sprache dasselbe wiederholen:
    ../lang/german/sections/_samples/product_listing.lang.inc.php kopieren und eine Verzeichnis-Ebene höher speichern.
    Dann in der Datei folgendes suchen:
    PHP:
    $t_language_text_section_content_array = array
    (
      
    'heading_search_result' => 'Ihr Suchergebnis',
    und folgendes einfügen:
    PHP:
    // BOF Producst-Extrafield
    'text_products_inhalt' => 'Inhalt:',
    // EOF Products-Extrafield
    Diese datei ist Updatessicher
    Es kann sein, dass du im Kategorie-Einstellung der Produkte, wo du diesen Feld einfügen willst, die "Vorlage zu Artikelübersicht" auch einstellen muss.
    Listing.png

    kats.png

    Viel Spass
     
  16. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Die Datei 2 kann habe ich wie folgt Updatessicher gemacht:
    1:in ordner ../user_classes/overloads einen Ordner mit folgendem namen erstellen: "ProductListingContentControl" Die genaue schreibweise ist WICHTIG.
    2:eine PHP-Datei mit folgendem Inhalt erstellen und und diesem Ordner speichern.
    PHP:
    <?php


     
    class extrafield_ProductListingContentControl extends extrafield_ProductListingContentControl_parent
     
    {
        public function 
    extend_proceed($p_action)
        {
            
    $t_uninitialized_array $this->get_uninitialized_variables(array(    'current_category_id',
                                                                                
    'customer_country_id',
                                                                                
    'customer_zone_id',
                                                                                
    'customers_fsk18_display',
                                                                                
    'customers_status_id',
                                                                                
    'languages_id',
                                                                                
    'show_price_tax',
                                                                        ));
            if(empty(
    $t_uninitialized_array))
            {
                
    //fsk18 lock
                
    $t_fsk_lock '';
                if(
    $this->customers_fsk18_display == '0')
                {
                    
    $t_fsk_lock ' AND p.products_fsk18 != 1 ';
                }

                
    $t_select_part '';
                
    $t_from_part   '';
                
    $t_where_part  '';

                
    // sorting query
                
    $t_sorting_query xtc_db_query("SELECT
                                                        products_sorting,
                                                        products_sorting2
                                                    FROM " 
    TABLE_CATEGORIES "
                                                    WHERE categories_id = '" 
    $this->current_category_id "'");
                
    $t_sorting_data_array  xtc_db_fetch_array($t_sorting_query);

                if(!
    $t_sorting_data_array['products_sorting'])
                {
                    
    $t_sorting_data_array['products_sorting'] = 'pd.products_name';
                }

                
    $t_sorting ' ORDER BY ' $t_sorting_data_array['products_sorting'] . ' ' .
                             
    $t_sorting_data_array['products_sorting2'] . ' ';

                
    // We show them all
                
    if(GROUP_CHECK == 'true')
                {
                    
    $t_group_check " AND p.group_permission_" $this->customers_status_id " = 1 ";
                }

                
    // sorting
                
    if(isset($this->listing_sort))
                {
                    
    $coo_listing_manager MainFactory::create_object('ListingManager');
                    
    $t_orderby           $coo_listing_manager->get_sql_sort_part($this->listing_sort);

                    if(
    $t_orderby != '')
                    {
                        
    $t_sorting $t_orderby;
                    }
                }

                
    // sort by price
                
    if(strpos($t_orderby'p.products_price') !== false)
                {
                    if(
    $this->show_price_tax != 0)
                    {
                        
    $t_select_part ", ROUND(IF(s.status = '1' AND p.products_id = s.products_id, s.specials_new_products_price, p.products_price) * (IF(p.products_tax_class_id = 0,0,tax_rate)/100+1), 2) AS final_price ";
                        
    $t_from_part   "LEFT JOIN " TABLE_TAX_RATES " AS tr ON (p.products_tax_class_id = tr.tax_class_id OR p.products_tax_class_id = 0)
                                        LEFT JOIN " 
    TABLE_ZONES_TO_GEO_ZONES .
                                         
    " AS gz ON (tr.tax_zone_id = gz.geo_zone_id AND gz.zone_country_id = '" .
                                         
    $this->customer_country_id "') ";
                        
    $t_where_part  " AND (gz.zone_id = '0' OR gz.zone_id = '" .
                                         
    $this->customer_zone_id "') ";
                    }
                    else
                    {
                        
    $t_select_part ", ROUND(IF(s.status = '1' AND p.products_id = s.products_id, s.specials_new_products_price, p.products_price), 2) AS final_price ";
                    }

                    
    $t_sorting str_replace('p.products_price''final_price'$t_sorting);
                }

                
    $this->sql_query "SELECT DISTINCT p.products_fsk18,
                                                p.products_shippingtime,
                                                p.products_model,
                                                p.products_inhalt,
                                                p.products_ean,
                                                pd.products_name,
                                                m.manufacturers_name,
                                                p.products_quantity,
                                                p.products_image,
                                                p.products_image_w, 
                                                p.products_image_h,
                                                p.products_weight,
                                                p.gm_show_weight,
                                                pd.products_short_description,
                                                pd.products_description,
                                                pd.gm_alt_text,
                                                pd.products_meta_description,
                                                p.products_id,
                                                p.manufacturers_id,
                                                p.products_price,
                                                p.products_vpe,
                                                p.products_vpe_status,
                                                p.products_vpe_value,
                                                p.products_discount_allowed,
                                                p.products_tax_class_id
                                                " 
    $t_select_part "
                                            FROM
                                                " 
    TABLE_PRODUCTS " p
                                                LEFT JOIN " 
    TABLE_PRODUCTS_DESCRIPTION " AS pd ON (pd.products_id = p.products_id)
                                                LEFT JOIN " 
    TABLE_PRODUCTS_TO_CATEGORIES " AS ptc ON (ptc.products_id = p.products_id)
                                                LEFT JOIN " 
    TABLE_MANUFACTURERS " AS m ON (m.manufacturers_id = p.manufacturers_id)
                                                LEFT JOIN " 
    TABLE_SPECIALS " AS s ON (s.products_id = p.products_id)
                                                " 
    $t_from_part "
                                            WHERE
                                                p.products_status = 1 AND
                                                pd.language_id = '" 
    $this->languages_id "' AND
                                                ptc.categories_id = '" 
    $this->current_category_id "'
                                                " 
    $t_where_part "
                                                " 
    $t_group_check "
                                                " 
    $t_fsk_lock "
                                                " 
    $t_sorting;
            }
            else
            {
                
    trigger_error("Variable(s) " implode(', '$t_uninitialized_array) . " do(es) not exist in class " get_class($this) . " or is/are null"E_USER_ERROR);
            }
        }
     }
        
    ?>
    Diese Datei als "extrafield_productListingContentControl.inc.php" speichern.
    Jetzt musste es funktionieren. Ich habe es versucht diese Datei kurzer zu machen. Es funktioniert zwar, aber die Sortierung der Artikel stimmt nicht mehr??
     
  17. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Wenn ich so was lese, bekomme ich immer die Krise,,,,

    Im Jahre 3 nach Erfindung des Klass-Overloadings in Gambio kann man das wesentlich besser, weil (größtenteils) updatesicher machen....
     
  18. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Hallo Avenger,
    laut die Liste von Gambio https://tracker.gambio-server.net/projects/gxdoc/wiki/Dateien_die_updatesicher_gemacht_werden_k%C3%B6nnen
    die Dateien in includes/classes sind nicht überladbar. Oder sehe ich das falsch? Und hier geht es nur um eine Datei die nicht überladbar ist:
    includes/classes/product.php. Sonst die andere 4 Dateien sind ja Updatessicher. Vieleicht hast du ja eine Lösung für diese Datei auch. Wenn ja, dann hier damit.
     
  19. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.452
    Danke erhalten:
    11.253
    Danke vergeben:
    1.606
    Hallo Cyrus,

    die Datei includes/ classes/ breadcrumb kann man überladen, dann sollte dass mit der product.php eigentlich auch gehen.
     
  20. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Hallo Barbara,
    also dies hier ist eine Liste von gambio:

    Dateien die updatesicher gemacht werden können

    Klassen in folgenden Verzeichnissen (inkl. Unterverzeichnissen) können überladen werden:
    DIR_FS_CATALOG . 'admin/includes/classes',
    DIR_FS_CATALOG . 'admin/gm/classes',
    DIR_FS_CATALOG . 'gm/classes',
    DIR_FS_CATALOG . 'includes/modules/order_total',
    DIR_FS_CATALOG . 'includes/modules/payment',
    DIR_FS_CATALOG . 'includes/modules/shipping',
    DIR_FS_CATALOG . 'gm/properties', *
    DIR_FS_CATALOG . 'templates/' . CURRENT_TEMPLATE . '/source/classes', *
    DIR_FS_CATALOG . 'system/controls', *
    DIR_FS_CATALOG . 'system/data', *
    DIR_FS_CATALOG . 'system/views', *
    DIR_FS_CATALOG . 'system/request_port', *
    DIR_FS_CATALOG . 'system/overloads',
    DIR_FS_CATALOG . 'system/extender',
    DIR_FS_CATALOG . 'system/classes',
    DIR_FS_CATALOG . 'system/core'


    Wonach sollte man noch suchen um auszufinden was überladbar ist und was nicht? Außerdem, ich sehe, dass Avenger selbst viele Dateien einfach ändert und meint, dass die nicht überladbar wären, aber die anderen zu kritisieren! Dann muss ich wohl sagen "TALK IS CHEAP".