Hallo, Ich habe mal eine Frage zum Thema Hooks und Viewport: Ich habe die Artikeldarstellung über eine eigene Hookfunktion erweitert. Bei der Programmierung hat sich ergeben das ich weitere, eigene definierte Variablen aus dem Hook gerne dem aktuellen Artikelview zufügen möchte. Die Ausgabe die es betrifft (also wo ich diese Variablen benötige) befindet sich in der description.tpl. Diese Variablen möchte ich vor der eigentlichen Artikelbeschreibung (also die die man im Backend beim Artikel eingeben kann) ausgeben - zB. {meinArray.ersterWert} Wie kann ich in meiner Hookfunktion denn neue, eigene Variablen dem bestehenden Template übergeben ? Danke für Eure Hilfe Grüße Louie
Wäre hier nicht einfacher mit einem Event zu arbeiten und das $sArticle Array erweitern? Dann kann man ja beliebig viele Variablen übergeben. Übrigens: die Events sind immer Hooks vorzuziehen.
Hallo Waldicom, uff jetzt hast Du mich aber ^^ (mit einem Event arbeiten ? ) Also das Problem ist, das ich ein eigenes Array erstelle welches sich aus Daten einer eigenen tabelle sowie Daten aus dem Artikel array (Berechnungen) bildet. Kurz gesagt es geht um einen Nahrungsverbrauchstabelle für Hunde und Katzen im Descriptionteil die sich jedesmal ändert wenn eine andere Variante des Artikels (Gramm) angewählt wird. Sicherlich wäre das auch machbar das aktuelle Artikel Array einfach um ein weiteres Array zu erweitern, prinzipielle interessiert mich aber auch aus dem “Shopwareverstehen” raus wie man bestehende Views um weitere Variablen ergänzen kann. Danke und Grüße
Hast Du schon folgendes versucht: static function hookname(Enlight\_Hook\_HookArgs $args) { ... $view = $args-\>getSubject()-\>View(); $variable = getArrayAusEingenerTabelle(...); $view-\>meinArray = $variable; .... }
Oder habe ich die Frage komplett falsch verstanden?
Ich glaube das ist genau das was ich suchte Probiere es heute Abend mal aus undw erde mich nochmal melden.Danke! Grüße
So, ich hab das mal probiert und bekomme /nat.) folgende Meldung: [color=green][PHP] Fatal error: Call to undefined method Shopware_Proxies_myArticlesProxy::View() in…[/color] okay ist klar “View” ist natürlich nicht definiert. Zum besseren Veständnis hier mal ein Auszug (angelehnt an die Hilfestellung aus den Labs bezüglich einen Artikel per Hook zu moifizieren) hier die Initialsierung des Hooks: class Shopware\_Plugins\_Frontend\_verbrauchCalc\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $hook = $this-\>createHook( 'sArticles', 'sGetArticleById', 'onArticle', Enlight\_Hook\_HookHandler::TypeAfter, 0 ); $this-\>subscribeHook($hook); return true; }
nun die eigentlich Funktion (Auszug): static function onArticle(Enlight\_Hook\_HookArgs $args){ (wenn ich hier den Test mache kommt oben erwähnte Fehlermeldung) $view = $args-\>getSubject()-\>View(); var\_dump($view); $article = $args-\>getReturn(); //Ermitteln um welchen Tiertyp es sich handelt $avar = explode("-", $article['ordernumber']); $pettyp = $avar[0]; //Kalkulationsdaten laden $petBedarf = Enlight\_Class::Instance(\_\_CLASS\_\_)-\>loadCalcDataFromDatabase($pettyp); //Mainartikel formatieren $produkt = $article['weight'] \* 1000; $preis = str\_replace(",",".",$article['price']); $verbrauch = $article['attr4']; $article['verbrauch'] = sprintf("%01.2f", (($verbrauch / $produkt) \* $preis)); foreach ($article["sVariants"] as $type =\> $properties) { }....und so weiter.....
Mir ist klar das View natürlich nicht existiert, aber wie wäre denn die richtige Initialsierung ind der install Function ? Danke Louie
Da der Hook auf core Klasse gemacht wird, gibt es da keinen View. Was ich noch nicht verstehen kann: Du gibst doch den geänderten Artikel zurück, oder? Kannst Du in dieses Array nicht alles einfügen, was Du brauchst? Etwa so: $article = $args-\>getReturn(); ... $article['myvar'] = getMyData(...); ... $args-\>setReturn($article);
Verstehe ich was falsch?
nein, nein - prinzipiell verstehst Du alles richtig. Wahrscheinlich hatte ich mich ein bisschen zu sehr an der Vorstellung der eigenen Variable und der Übergabe festgebissen Aber das hängt mit meinem Drang zusammen die Dinge zu kapieren Klar, ich kann natürlich auch alles berechnen und das alles an das ArtikelArray anhängen. Das ArtikelArray ist ja auch verfügbar überall innerhalb der Artikel Seite. Trotzdem Danke für Deine Hilfe. Grüße
Ansonsten ein Hook auf Controller oder ein Event, da kann man auf View zugreifen. Und der “Drang … die Dinge zu kapieren” - ganz wichtige Sache