Smarty CMS Action Plugin

Hallo liebe Shopware Programmierer, Hier mal ein Exote, wir brauchen “dynamische” Daten in einer Shopseite, also beispielsweise eine dynamische Generierung von Eckdaten in den ABGs, abhängig vom Datenbestand des Shops. Dies würde aktuell allein schon daran scheitern, dass man nur statisches HTML benutzen kann. Ein möglicher (und mMn eleganter) Workaround dazu wäre: 1. Die Shopseiten Smarty-Fähig zu machen 2. Das “Action Plugin” von Shopware benutzen, und sich die Daten aus einem Widget laden Punkt 1. lässt sich effektiv mit einer einzigen Zeile Quelltext bewerkstelligen (abgesehen von dem Modul drumherum): //... $smartified = $subject-\>View()-\>fetch('string:' . $staticPage['html']); $subject-\>View()-\>sContent = $smartified; //... …als Ersatz für Shopware_Controllers_Frontend_Custom::indexAction Dieser Fix funktioniert auch ganz gut, mann auf die Smartyplugins von Shopware wunderbar zugreifen, Custom Templates einbinden usw. usf. ABER: Beim Versuch via. {action module=widgets…} zu benutzen, wird die Seite einfach weiß, ohne Fehler. Eine etwas tiefere Tour mit Debugger hat mich dann auf eine mögliche Fehler Quelle geführt in Dispatcher/Default.php um Zeile 540 if (empty($disableOb)) { $content = ob\_get\_clean(); $response-\>appendBody($content); } Ich gehe davon aus, dass View()->fetch(‘string:…’) da mit in den Buffer greift, dieser jedoch vorher schon geleert wird. Eine (eher dumme) Idee war es bisher, den Buffer kurzzeitig vor dem View()->fetch() zwischen zu speichern und wieder via ob_start() und echo $bufferContent wieder zu setzen, die Seite blieb aber hemmungslos weiß wie vorher… Jemand Ideen wie man hier vorran kommt? lg japanwelt

Ohne mich wirklich mit dem Thema beschäftigt zu haben: Vielleicht ist dieser PR und die dazugehörige Diskussion interessant für dich: https://github.com/shopware/shopware/pull/226

Hallo, vielen Dank für den Hinweis. Ein Kollege dort hat den entscheidenen Hinweis gegeben. Die Lösung ist: kein Modul verwenden, sondern die „frontend/custom/index.tpl“ (je nach gewähltem Template natürlich umbauen, und zwar wie folgt: aus {\* Article content \*} {block name='frontend\_custom\_article\_content'} {$sContent} {/block} muss {\* Article content \*} {block name='frontend\_custom\_article\_content'} {include file="string:{$sContent}"} {/block} gemacht werden. Damit werden Shopseiten „smartyfähig“, und man kann auch das Action Plugin verwenden Hoffe das hilft ggf. jemanden weiter. LG japanwelt

1 „Gefällt mir“

Bin heute auch auf das Problem gestossen und habe (mehr oder weniger intuitiv) eine ähnliche Lösung verwendet, hätte das aber lieber im Controller/Plugin gehandhabt, da so noch zusätzlich - und eigentlich unnötigerweise - ein Frontend-Template überschrieben werden muss (= mögliche Fehlerquelle bei Updates und komplexeren Plugin-Szenarien). 

Insofern: gibt es für die aktuelle Version (5.1.6 oder sogar 5.2) noch einen anderen Ansatz, um Action-Controller in View()->fetch(…) zu verwenden?