Wie funktioniert gxmodules Overload mit Theme?

Thema wurde von Anonymous, 3. Dezember 2021 erstellt.

  1. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    #1 Anonymous, 3. Dezember 2021
    Zuletzt bearbeitet: 3. Dezember 2021
    Hallo,

    ich hatte in der Gambio Version mit Template etwas geändert.
    Ich benutze die Artikelfilter um diese als Technischen Daten unter der Produktbeschreibung auszugeben.
    Dafür hatte ich in der GXModules die datei description_ProductInfoContentView.php verändert und überladen.
    Im templates/Honeygrid/module/product_info/standard.html wurde es dann aufgerufen und angezeigt.
    tdaten-01.jpg tdaten-02.jpg

    Jetzt möchte ich zum aktuellen Shopsystem wechseln mit dem Theme.
    Wie wird dort überladen? Ich weiss nicht wo ich jetzt das Gegenstück der standard.html Datei finde und wo ich es in gxmodules speichern muss.
    Ich habe es in der Suche leider nicht gefunden.
     
  2. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.667
    Danke erhalten:
    1.262
    Danke vergeben:
    300
    @kidcars Also Overloads könenn im GXModules in einem Ordner /GXModules/MeineFirma/MeinModul/Shop/Overloads/ liegen, da ist es genauso ein Ordner für die Klasse die überladen werden soll und der Dateiname mit inc.php das ist noch gleich geblieben.

    Bei HTML Anpassungen gibt es nun mehere Möglichkeiten, entweder nur die Blöcke zu ersetzen oder zu ergänzen die man ändert oder ganze Dateien tauschen. Ganze Dateien tauschen ist in vielen Fällen gar nicht mehr nötig, da mit den Blöcken schon recht viel erledigt werden kann, ohne die gesamte Datei zu kopieren. Was auch ermöglicht viele Änderungen zu machen ohne das bei einem Update immer wieder alle Dateien überarbeitet werden müssen. Wenn z.B. der Block immer noch in der neuen Version vorhadnen ist, funktionieren die Anpassungen auch dort weiterhin.

    Also in deinem Fall musst du eine HTML Datei im Ordner /GXModules/MeineFirma/MeinModul/Shop/Html/Themes/All/ mit den Namen /product_info_template_standard.html anlegen und dort nur die Blöcke einfügen die du verändern willst.

    Weitere Infos gibt es unter folgendenden URLs:
    (Link nur für registrierte Nutzer sichtbar.)
    (Link nur für registrierte Nutzer sichtbar.)

    Für aufwendige Anpassungen die nur HTML betreffen und keine PHP Overlaods, wäre auch die Möglichkeit ein eigenes Theme zu bauen, das z.B. von Honeygrid oder Malibu erbt.

    (Link nur für registrierte Nutzer sichtbar.)
     
  3. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Da wirst du auch die product Info theme contentview (ich weiß, wird anders geschrieben :))
    Überladen müssen.
    Ich glaube das findest du in gxmain....
    Ich kann das gerade nicht genau sagen,bin unterwegs und kann nicht nachsehen.
     
  4. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    @barbara meinst du diese Datei?
    /GXMainComponents/View/ThemeContentViews/products/ProductInfoThemeContentView.inc.php

    Muss ich diese Datetei überladen wenn ich in der Produktbeschreibung etwas einfügen möchte?
    Aber in der /GXModules/MeineFirma/MeinModul/Shop/Overloads/Themes/All/ProductInfoThemeContentView.inc.php ??

    Gibt es die description_ProductInfoContentView.php nicht mehr im Theme?
    GXUserComponents ist wahrscheinlich auch veraltet.
     
  5. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    Wenn ich ein Hallo Welt in einem neuen Beschreibungstab anzeigen möchte, muss ich das in der ProductInfoThemeContentView.inc.php

    bei
    Zeile 1416
    protected function _assignDescription()
    {


    einfügen?
     
  6. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Nein, eher etwas wie /GXModules/MeineFirma/MeinModul/Shop/Overloads/ProductInfoThemeContentView/MeinProductInfoThemeContentView.inc.php

    Die Terminologie ist zugegebenermaßen verwirrend, weil sowohl die Smarty-Engine als auch wir den Begriff „Overload“ verwenden. Smarty-Overloads haben ihren Platz in /GXModules/MeineFirma/MeinModul/Shop/Themes, aber PHP-Overloads gehören nach /GXModules/MeineFirma/MeinModul/Shop/Overloads bzw. /GXModules/MeineFirma/MeinModul/Admin/Overloads.

    (Um dem Fass die Krone ins Gesicht zu schlagen, hat das alles mit dem klassischen Overloading, wie man es aus C++ und Java kennt, genau nichts zu tun.)
     
  7. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Nein, wird nicht mehr genutzt - bzw, ist das schon eine eigen angelegte gewesen und ja, ist veraltet :)

    Man kann die Datei description_ProductInfoThemeContentView.inc.php aber genauso erstellen wie die
    description_ProductInfoContentView.php. Man muss nur auf die geänderten Bezeichnungen achten.
     
  8. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    Hier rufe ich den Block auf hinter der Artikelbeschreibung
    /GXModules/Kidcars/TDaten/Shop/Html/Themes/Allproduct_info_template_standard.html

    Code:
    {block name="product_info_template_standard_description"}
                                <div class="product-info-description col-md-8" data-gambio-widget="tabs">
                                    {include file="get_usermod:{$tpl_path}product_info_product_description.html"
                                             reviews=$MODULE_products_reviews}
                                            
                                             <!-- BOF Technische Daten-->
                                    {if $PRODUCTS_TEC_DESCRIPTION || $SHOW_PRODUCTS_TEC_DESCRIPTION}
                                            <span class="tec">
                                                {$PRODUCTS_TEC_DESCRIPTION}
                                            </span>
                                    {/if}
                                    <!-- EOF Technische Daten-->
                                            
                                            
                                </div>
                            {/block}
    Hier wird der Inhalt erstellt
    /GXModules/Kidcars/TDaten/Shop/Overloads/ProductInfoThemeContentView/ProductInfoThemeContentView.inc.php
    Nach protected function _assignDescription() in Zeile 1445 eingefügt

    Code:
    public function _assignTec()
        {
           
            function Tec($pid)
            {
    blablablablabla code um technische daten aus den filtern zu erstellen
    }
            $product_id = $this->product->data['products_id'];
            $tec = Tec($product_id);
            $tec = utf8_encode($tec);
           
            $this->set_content_data('PRODUCTS_TEC_DESCRIPTION', $tec);
           
           
           
        }
     
  9. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    Warum kann ich nicht einfach in die /GXModules/Kidcars/TDaten/Shop/Overloads/ProductInfoThemeContentView/ProductInfoThemeContentView.inc.php

    Code:
    protected function _Gruss()
    {
    $tec = "Hallo Welt";
    $this->set_content_data('PRODUCTS_TEC_DESCRIPTION', $tec);
    }
    schreiben?

    und so aufrufen in der /GXModules/Kidcars/TDaten/Shop/Html/Themes/Allproduct_info_template_standard.html

    Code:
    {if $PRODUCTS_TEC_DESCRIPTION || $SHOW_PRODUCTS_TEC_DESCRIPTION}
                                          
                                     {$PRODUCTS_TEC_DESCRIPTION}
                                           
    {/if}
    Ich bekomme nichts angezeigt. Was mache ich falsch?
    Ich bin kein Experte, aber im Templatesystem funktionierte das
     
  10. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Der Pfad für die html-datei ist falsch.
    GXModules/kidkars/Tdaten/Shop/Themes/All/
    Und dann die Datei
     
  11. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    @barbara
    so hat man mir aber geschrieben
     
  12. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    schreibe ich
    $tec = "Hallo Welt";
    $this->set_content_data('PRODUCTS_TEC_DESCRIPTION', $tec);
    in die
    protected function _assignDescription()
    {

    funktioniert es. Ich kann es mit dem Block
    {$PRODUCTS_TEC_DESCRIPTION} anzeigen.

    wenn ich es in einer eigenen funktion will wird nichts angezeigt
     
  13. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Du musst auch dafür sorgen, dass deine eigene Funktion aufgerufen wird. Z. B. so:

    PHP:
    public function prepare_data()
    {
      
    parent::prepare_data();
      
    $this->_Gruss();
    }
    Falls das der Ursprung des Missverständnisses ist: Das Shopsystem ruft nicht einfach magisch sämtliche Funktionen eines ThemeContentViews auf, deren Namen mit einem Underscore (_) beginnen; der Underscore ist nur eine inzwischen veraltete Konvention zur Kennzeichnung von nichtöffentlichen Methoden.
     
  14. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    Genau das hatte ich vergessen.
    Jetzt funktioniert alles. Ich kann mich auf das Update vorbereiten.
    Noch besser wird es, wenn ich komplett auf SQL verzichten kann und mit der Rest Schnittstelle arbeite, damit es Updatesicher bleibt.

    Eine Frage habe ich noch. Wie bekomme ich meine Ausgabe in ein eigenes Tab rein? In der Suche hab ich nur ein Ergebnis gefunden mit dem TabTokenizer. Der Thread war aber von 2012.

    Hier sehe ich, das es benutzt wird, habe es aber nicht verstanden
    Code:
        protected function _assignDescription()
        {
           
            $description = $this->selling_unit->productInfo()->description()->value();
           
            /* @var GMTabTokenizer $tabTokenizer */
            $tabTokenizer = MainFactory::create_object('GMTabTokenizer', [stripslashes($description)]);
            $description  = $tabTokenizer->get_prepared_output();
           
            $this->set_content_data('PRODUCTS_DESCRIPTION', $description);
            $this->set_content_data('description', $tabTokenizer->head_content);
           
           
               
            $tabs = [];
            foreach ($tabTokenizer->tab_content as $key => $value) {
                $tabs[] = ['title' => strip_tags($value), 'content' => $tabTokenizer->panel_content[$key]];
            }
           
            $mediaContent = $this->_getMediaContentHtml();
            if (trim($mediaContent) !== '') {
                $languageTextManager = MainFactory::create_object('LanguageTextManager',
                                                                  ['products_media', $this->languageId]);
                $tabs[]              = [
                    'title'   => $languageTextManager->get_text('text_media_content_tab'),
                    'content' => $mediaContent
                ];
            }
           
            $this->set_content_data('tabs', $tabs);
           
        }
     
  15. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    3. März 2018
    Beiträge:
    300
    Danke erhalten:
    17
    Danke vergeben:
    205
    Momentan landet der Inhalt außerhalb der Tabs unter der Beschreibung
    tdaten-03.jpg