Wie kann ein Controller die View beeinflussen ?

Hallo Forum, Ich möche in einem Controller cookie-abhängig mal einen Overlay einblenden, mal nicht. Wie kann ich der tpl Datei beibringen, dass sie sich dynamisch verhalten soll ? Gruss, Tobias

Du kannst ein Plugin mit php erstellen oder einfach ein kleines JavaScript bzw. jQuery. Setzt du die Cookies oder sind sie bereits vorhanden? Es gibt übrigens fertige cookie-Bibliotheken, z.B. jquery.cookie.js. Sind nur Andeutungen, wenn du sagst, wie du es machen willst, kann man noch mehr schreiben.

… bin schon dabei, dies mit einem Plugin zu realisieren. Mir sind jedoch noch diese Punkte unklar: - wenn ich einen eigenen Frontendcontroller registriere, wie kann ich diesem onClick Parameter übergeben und auslesen ? Ich hab mich schon durch die Doku geochst aber werde nicht recht schlau draus, wie ich das konkret anstellt - wenn - der Controller soll das Cookie setzen - das Cookie gesetzt ist, soll die View ein Overlay, welches die Wahl für den jew. Subshop (den sich der Cookie merken soll) ausgeblendet werden. Wie kann ich der View das mittteilen ? Gruss, Tobias

Naja je nachdem auf welche Seite der Besucher zuerst geht setzt du einen Cookie. Oder welchen Shop er auswählt. Danach liest du die Cookies aus und sagst wenn cookie1 gesetzt ist leite weiter auf shop1. Ist kein Cookie gesetzt öffne das overlay. Hier gibts übrigens auch ein JS File von SW5, da brauchste keine neue Cookie Bibliothek. Und hier auch die Class Und hier bspw. auch ein Beispiel aus einem Default Router Plugin. Das sollte für dich daher auch recht hilfreich sein das Plugin.

1 Like

… jetzt wird das reine Cookie-Handling klarer, danke. Aber dennoch: wie kann ich Controller-Parameter übergeben und auslesen ? Wenn ich beispielsweise einen Controller www.myshopware.de/my_controller habe, mit dieser Action: www.myshopware.de/my_controller/my_controller_action wie übergebe ich dann den Parameter für die action ? sowas wie das Shopware-Pendant zu function myActionFunction(my_url){ //validate if cookie „my_url_is_set“ //if cookie is set, compare my_url with current url //if current url <> my_url --> redirect to my_url //if current url == my_url --> hide overlay } Wie wird ein ganz simpler Button implementiert, der onClick den Controller (die Controller Action) aufruft, aber die URL des Subshops als Parameter übergibt: zum Beispiel „www.meinsubshop01.de“ ? Ich habe mich an {url module=frontend controller=Name action=index} orientiert, eine action gibt es da ja, aber wie transportiere ich Parameter ? Und zur View immer noch die Frage: wie kann ich per Controller steuern, ob ein Teil der View geladen wird oder nicht ? Der Overlay mit der Shopauswahl ist ja Teil der View.

hat keiner einen Ansatz für dieses Thema ?

Ich habe so etwas mal mit einem versteckten (hidden) Formular realisiert. Dann werden die gewünschten Parameter in die versteckten Felder geschrieben (per JavaScript) und dann per POST oder GET an den Controller übergeben. Der Button ist dann einfach das Submit. Funktioniert gut.

klingt machbar - bin jedoch ein wenig bekümmert, dass ich schon so simple dinge wie „Übergabe Parameter an Controller“ scheitere und auch an der View nichts dynamisch ändern kann. Ich will doch Shopware-konform entwickeln ! Evtl. ist dies in einem anderen Beitrag schon gelöst und jemand aus dem Forum kann sich erinnern wo ?

Das ist eigentlich eine probate Methode und ich denke auch shopware-konform. Wenn nicht, wäre es schön, wenn sich jemand von shopware dazu äußert.

Also für das Demoshop-Plugin hab ich dieses jQuery-Plugin geschrieben: ;(function ($) { 'use strict'; $.plugin('demoOverlay', { defaults: { }, init: function () { var me = this; me.applyDataAttributes(); me.storage = StorageManager.getStorage('session'); me.show = me.storage.getItem('demoOverlay-hide'); me.$selectors = me.$el.find('\*[data-demo-overlay-close="true"]'); // Will be automatically removed when destroy() is called. me.\_on(me.$selectors, 'click', $.proxy(me.onClose, me)); if(me.storage.getItem('demoOverlay-hide')) { me.$el.css('display', 'none'); } }, onClose: function () { var me = this; me.storage.setItem('demoOverlay-hide', true); me.$el.css('display', 'none'); } }); $('\*[data-demo-overlay="true"]').demoOverlay(); })(jQuery); eine Controller-Anpassung braucht man dafür nicht. Zumal es dann auch nicht direkt HttpCache-Konform wäre. Heiner

Hi, bin (denke ich) an einem gleichen Thema. Es wird ein Fenster für ein Backend-Plugin geöffnet. Darin kann der Button “Neu erstellen” geklickt werden. Es öffnet sich ein weiteres Fenster mit einem Form. Soweit so gut. Wie feuert man den nun dieses Formular, damit der korrekte view/controller/ angespreochen werden kann und auch in der php-controller - Datei der entsprechende handler die Daten übernimmt und wie vorgesehen sepeichert. Über die app.js ist letztlich der controller oder die controller definiert. In der datei /Views/plugin/model/main.js sind die actions hinterlegt. Nur passt das irgendwie nicht. Verwende ich ein oder andere Beispiele / Tutorials, läuft das Teil ebenfalls nicht. Im übrigen ergibt sich aktuell die Frage, ob überhaupt jemand für SW5 - Programmierung aktiv ist. Die Mods halten sich (mein Empfinden) auch schwer zurück.

Nein, du redest jetzt von der Backend-Programmierung. Dort gibt es von ExtJS eigene Models, Views und Controlllers, die nichts mit den Frontend-MVC von Shopware zu tun haben. Mit Shopware 5 hat sich der Aufbau des Backends nicht geändert. Alle Wiki-Artikel, die du hier finden kannst, gelten weiterhin: http://community.shopware.com/Backend_cat_871.html Gruß Heiner