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. 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.
@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.)
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.
@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.
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?
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.)
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.
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); }
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
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
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.
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); }