Exotische Informationen von Produkten in View anzeigen

Thema wurde von schweiz, 9. Juni 2015 erstellt.

  1. schweiz
    schweiz Neues Mitglied
    Registriert seit:
    30. Juli 2011
    Beiträge:
    4
    Danke erhalten:
    0
    Guten Tag

    Wir möchten gerne ein paar Anpassungen machen, welche sich leider nicht für das Admin-Tool lösen lassen und benötigen dabei die Möglichkeit weitere smarty variablen der view hinzu zu fügen.

    Unsere Suche führte uns zu der Datei /system/classes/products/ProductInfoContentView.inc.php, doch wenn wir dort weitere Variablen in der get_html methode einfügen (z.B. $this->set_content_data('TEST', 'Dies ist ein Test');), können wir diese trotzdem nicht im Template gebrauchen (/templates/eSrcBasic/module/product_info/standard.html). Und ja es ist das richtige Template welches wir am bearbeiten sind ;)

    Bitte geben Sie uns eine möglichst genaue Antwort.

    Freundliche Grüsse
     
  2. Cyrus (LeGong)
    Cyrus (LeGong) Erfahrener Benutzer
    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    @schweiz
    Normalerweise gewünschte Erweiterungen in Artikeldetailseite können als Overloads in der Datei "ProductinfoContentView.inc.php" ausgeführt werden.
    Die Frage ist ob die gewünschte Erweiterungen in der Datenbank gespeichert und von da aus abgerufen werden?
    Wenn ja, dann wo gibt ihr diese Erweiterungen ein?
    Ein Beispiel ist die "Zusatz Felder". Die werden über "new_product.php" eingegeben und über "standard.html" im Frontend angezeigt.
    extras1.png
    Ohne genau Angaben, ist es nicht möglich weiter zu helfen.
     
  3. schweiz
    schweiz Neues Mitglied
    Registriert seit:
    30. Juli 2011
    Beiträge:
    4
    Danke erhalten:
    0
    Hallo Cyrus

    Was meinst du mit 'Overloads'?
    Wie kann ich weitere variablen einfügen, damit ich sie in der view 'standard.html' mit z.B. {TEST} aufrufen kann?

    Es geht im eine Berechnung, welche mit mit dem Standardpreis machen muss. Diese gewünschte Variabel kommt also nicht aus der DB sondern muss lediglich dem View hinzugefügt werden können

    Viele Grüsse
    Christian
     
  4. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das ist eigentlich so schon richtig...

    Fügt doch mal am Anfang des Templates {debug} ein, dann erscheinen in einem PopUp Informationen über alle im Template verfügbaren Variablen.
     
  5. schweiz
    schweiz Neues Mitglied
    Registriert seit:
    30. Juli 2011
    Beiträge:
    4
    Danke erhalten:
    0
    Hallo nochmals

    Also, was ich gemacht habe ist in der Datei ProductinfoContentView.inc.php direkt unterhalb von $this->set_content_data('PRODUCTS_MODEL', $t_products_model); diese Zeile hier eingefügt: $this->set_content_data('HELLO', 'heloooo');

    Danach wenn ich versucht diese Variabel in der view aus zu geben, kann ich aber nicht mit {$HELLO} darauf zugreiffen. Es kommt an der Stelle gar nichts.
    Es ist aber 100 prozentig die richtige view Datei bearbeitet, da, wenn ich etwas statisches rein schreibe, dies beim aktualisieren auf der Website ersichtlich ist.

    Viele Grüsse
    Christian
     
  6. schweiz
    schweiz Neues Mitglied
    Registriert seit:
    30. Juli 2011
    Beiträge:
    4
    Danke erhalten:
    0
    Hallo Avenger

    Danke für den Tipp mit dem debug.
    Bei den 'assigned template variables' ist die Variabel HELLO nicht aufgelistet.
     
  7. Cyrus (LeGong)
    Cyrus (LeGong) Erfahrener Benutzer
    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Hallo schweiz,
    Ein Overload ist Einfügung von Extra Befehle oder Codes in eine Datei, ohne die original Datei zu ändern. Um Extra Infos in Artikeldetailseite anzeigen zu lassen, muss man wie du es selbst ausgefunden hast, die gewünschte Infos mit einem Overload über die Datei "ProductInfoContentView.inc.php" erst verfügbar machen. Diese Overload wird deinem Fall, dann in dem Ordner
    user_classes/overloads/ProductInfoContentView/mein_toller_overload_ProductInfoContentView.inc.php gespeichert. Ein Beispiel wäre:
    PHP:
    class extrafield_ProductInfoContentView extends extrafield_ProductInfoContentView_parent
     
    {
        function 
    get_html($p_coo_product$p_current_category_id 0)
        {
            
    // BOF products_extrafield
            
    $this->set_content_data('PRODUCTS_CONTENT'$p_coo_product->data['products_content']);
            
    $this->set_content_data('PRODUCTS_WEG_1'$p_coo_product->data['products_weg_1']);
            
    $this->set_content_data('PRODUCTS_ORIGIN'$p_coo_product->data['products_origin']);
            
    $this->set_content_data('PRODUCTS_PACKAGE'$p_coo_product->data['products_package']);
            
    $this->set_content_data('PRODUCTS_FABRICATION'$p_coo_product->data['products_fabrication']);
            
    $this->set_content_data('PRODUCTS_TASTE'$p_coo_product->data['products_taste']);
            
    $this->set_content_data('PRODUCTS_VARIETY'$p_coo_product->data['products_variety']);
            
    $this->set_content_data('PRODUCTS_TYPE'$p_coo_product->data['products_type']);
            
    $this->set_content_data('PRODUCTS_TREATMENT'$p_coo_product->data['products_treatment']);
            
    $this->set_content_data('PRODUCTS_LACTOSE'$p_coo_product->data['products_lactose']);
            
    $this->set_content_data('PRODUCTS_FAT'$p_coo_product->data['products_fat']);
            
    $this->set_content_data('PRODUCTS_MATURITY'$p_coo_product->data['products_maturity']);
            
    $this->set_content_data('PRODUCTS_CALORIE'$p_coo_product->data['products_calorie']);
            
    $this->set_content_data('PRODUCTS_PROTEIN'$p_coo_product->data['products_protein']);
            
    $this->set_content_data('PRODUCTS_CARBOHYDRATE'$p_coo_product->data['products_carbohydrate']);
            
    $this->set_content_data('PRODUCTS_CALCIUM'$p_coo_product->data['products_calcium']);
            
    $this->set_content_data('PRODUCTS_SALT'$p_coo_product->data['products_salt']);
            
    $this->set_content_data('PRODUCTS_GLUTEN'$p_coo_product->data['products_gluten']);
            
    $this->set_content_data('PRODUCTS_GLUTAMATE'$p_coo_product->data['products_glutamate']);
            
    $this->set_content_data('PRODUCTS_FEATURE'$p_coo_product->data['products_feature']);
            
    $this->set_content_data('PRODUCTS_ADDITIVES'$p_coo_product->data['products_additives']);
            
    // EOF products_extrafield
            
    return parent::get_html($p_coo_product$p_current_category_id);
        }
     }
    ?>
    Dann muss man die Datei standard.html kopieren und umbenennen als "standard-USERMOD.html" und in der USERMOD-Datei an gewünschte Stelle, die Gewünschte Extra-Info einfügen. Wie z. B. :
    HTML:
    ...
    ...
    {/if}
                        {if $PRODUCTS_QUANTITY || $SHOW_PRODUCTS_QUANTITY}
                            <dt>{$txt.text_stock}</dt>
                            <dd class="products_quantity"><span class="products_quantity_value">{$PRODUCTS_QUANTITY}</span> {if $PRODUCTS_QUANTITY_UNIT}{$PRODUCTS_QUANTITY_UNIT}{else}{$txt.text_pieces}{/if}</dd>
                        {/if}
                        
                        <!-- BOF products_extrafield  DIE GEWÜNSCHTE INFO-->
                        {if $PRODUCTS_WEG_1 || $SHOW_PRODUCTS_WEG_1}
                               <dt>{$txt.text_products_weg_1}</dt>
                               <dd class="products_content">{$PRODUCTS_WEG_1}</dd>
                        {/if}
                        
                        {if $PRODUCTS_CONTENT || $SHOW_PRODUCTS_CONTENT}
                               <dt>{$txt.text_products_content}</dt>
                               <dd class="products_content">{$PRODUCTS_CONTENT}</dd>
                        {/if}
    ....
    ....
    ....
    
    
    
    Das Ergebnis wäre dann wie das Bild von Oben