wir haben zusätzliche Freitextfelder für die Shopseiten / CMS-Seiten eingerichtet.
Diese werden allerdings standardmäßig nicht in Smarty als Variable mit übergeben. Shopware selbst schreibt ja dazu, dass man ggf. Freitextfelder über ein Plugin ausgeben muss.
Hat jemand von Euch hier schon Erfahrungen oder einen Tipp, wie das genau funktioniert?
Ich habe mir die Mühe gemacht und sofort ein Pull Request auf Github erstellt, welches das Problem löst. Du könntest dir dort die Änderung anschauen und dies als Plugin übernehmen als Zwischenschritt bis es im Release ist
Ich bin jetzt auch nicht der Mega-Programmierer, aber ein Plugin könnte so aussehen:
subscribeEvent(
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Custom',
'onFrontendPostDispatchCustom'
);
$this -> createConfig();
return true;
}
public function onFrontendPostDispatchCustom(Enlight_Event_EventArgs $args)
{
/** @var \Enlight_Controller_Action $controller */
$controller = $args->get('subject');
$view = $controller->View();
/** @var Shopware\Bundle\AttributeBundle\Service\DataLoader $service */
/** get id and assign attributes to view */
$service = $this->get('shopware_attribute.data_loader');
$customid = $view->getAssign('sCustomPage')['id'];
$data = $service->load('s_cms_static_attributes', $customid);
$view->assign('cms_atttributes', $data);
}
private function createConfig()
{
}
}
?>
Auf die Attribute kann man dann per $cms_atttributes zugreifen.
War auch nur ein schneller test, da ich das letztens eh ausprobiert habe. Vielleicht geht es auch eleganter
Einfach eine Bootstrap.php unter /engine/Shopware/Plugins/Local/Frontend/MNAttributesForShoppages ablegen mit dem Inhalt von oben.
wäre es möglich, das Plugin so anzupassen das es die Freitextfelder für Formulare zur Verfügung stellt?
Ich habe versucht die function umzuschreiben, aber ohne Erfolg:
Oh, das ist nicht so ohne weiteres möglich.
Dennoch gibt es dafür mehrere Möglichkeiten:
Du müsstest alle Events abonnieren, die ein Formular beinhalten, um alle Smarty Views um das Freitextfeld anzureichern, oder
Es gibt nur wenige Controller in Shopware, die Formulare beinhalten, meistens haben die irgendwas mit „form“ im Namen. Das kann man also leicht in einem allgemeinen Controller pre- oder postDispatch Event abfragen, ob im Request URL, also ob im Controller Name „form“ enthalten ist. Ist das der Fall, dann lade die Freitextfelder nach, oder alternativ dazu
wäre denke ich auch ein after Hook auf die Form Basis Klasse möglich, damit kann man alle auf einmal effizient erwischen, ohne dabei eventuell andere wichtige Funktionalitäten zu überschreiben.
Elegantere Lösungswege dafür gibt es laut meinen Wissens nicht. Aber vielleicht weiß dazu die Community mehr?
PS: @Moritz Naczenski wenn man nicht der „Mega Programmierer“ ist, sollte man doch die hauseigenen Dokumentation vor dem Posten lesen. Eine Empfehlung nach dem alten Plugin-System ist nicht ratsam, da gerade neue Plugins nach der 5.2 Plugin Struktur entwickelt werden sollten.
erst einmal vielen Dank für deine Antwort. Ich glaube ich habe mich falsch ausgedrückt (oder deine Antwort falsch verstanden):
Ich möchte in einem Formular (also nicht einer Shopseite, Einkaufswelt oder Blog) ein vorher für Formulare angelegtes und in diesem Formular befülltes Freitextfeld ausgeben. Ich hatte gehofft dieses wie im Artikel einfach über das Template ausgeben zu können, aber das scheint nicht der Fall zu sein, daher habe ich mich an dieser Lösung hier versucht, allerdings auch ohne Erfolg.
PS: @Moritz Naczenski wenn man nicht der „Mega Programmierer“ ist, sollte man doch die hauseigenen Dokumentation vor dem Posten lesen. Eine Empfehlung nach dem alten Plugin-System ist nicht ratsam, da gerade neue Plugins nach der 5.2 Plugin Struktur entwickelt werden sollten.
Sorry, aber das ist totaler Quatsch. Das war eine schnelle Hilfestellung und es funktioniert. Auch das Umschreiben ist 2 Minuten Arbeit. Selbst der Umzug auf das neue Plugin-System maximal 5. Das „alte“ Plugin System ist das bewährte und wird uns auch noch einige Zeit begleiten - somit ist das völlig valide das System weiterhin zu nutzen.
@Pina Hier die Lösung für die Formulare:
subscribeEvent(
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Forms',
'onFrontendPostDispatchForms'
);
$this->createConfig();
return true;
}
public function onFrontendPostDispatchForms(Enlight_Event_EventArgs $args)
{
/** @var \Enlight_Controller_Action $controller */
$controller = $args->get('subject');
$view = $controller->View();
/** @var Shopware\Bundle\AttributeBundle\Service\DataLoader $service */
/** get id and assign attributes to view */
$service = $this->get('shopware_attribute.data_loader');
$customid = $view->getAssign('sSupport')['id'];
$data = $service->load('s_cms_support_attributes', $customid);
$view->assign('form_atttributes', $data);
}
private function createConfig()
{
}
}
Ich kann das Array mit den Werten im Debug-Fenster sehen, kann sie aber nicht ausgeben. Versuche ich im Template mit {$form_attributes|@print_r} eine Ausgabe erhalte ich immer nur 1. Erhalte ich die Werte evtl. zu spät?
Schau da im Laufe des Tages mal drauf, soweit ich das sehe, ist das nur bei der Version für das neue Plugin-System so. Hatte mich hier auf die Ausgabe im Debugger verlassen
Ich kann das Array mit den Werten im Debug-Fenster sehen, kann sie aber nicht ausgeben. Versuche ich im Template mit {$form_attributes|@print_r} eine Ausgabe erhalte ich immer nur 1. Erhalte ich die Werte evtl. zu spät?
Ok, hab es doch schon gefunden.
Teste mal das hier:
'onFrontendPostDispatchForms'
];
}
public function onFrontendPostDispatchForms(\Enlight_Event_EventArgs $args)
{
/** @var \Enlight_Controller_Action $controller */
$controller = $args->get('subject');
$view = $controller->View();
/** get id and assign attributes to view */
$service = $this->container->get('shopware_attribute.data_loader');
$customid = $view->getAssign('sSupport')['id'];
$data = $service->load('s_cms_support_attributes', $customid);
$view->assign('form_attributes', $data);
}
}
Ich kann das Array mit den Werten im Debug-Fenster sehen, kann sie aber nicht ausgeben. Versuche ich im Template mit {$form_attributes|@print_r} eine Ausgabe erhalte ich immer nur 1. Erhalte ich die Werte evtl. zu spät?
Ich kann das Array mit den Werten im Debug-Fenster sehen, kann sie aber nicht ausgeben. Versuche ich im Template mit {$form_attributes|@print_r} eine Ausgabe erhalte ich immer nur 1. Erhalte ich die Werte evtl. zu spät?
Ok, hab es doch schon gefunden.
Teste mal das hier:
Funktioniert leider auch nicht
Ich glaub da ist einfach nur ein Schreibfehler. Die Variable ist mit 3-t geschrieben: {$form_atttributes}
Ist mir nicht aufgefallen, weil ich die einfach aus dem Code kopiert habe ins Template. Vielleicht liegts daran?
Sonst funktioniert das bei mir!
Eine Ausgabe ist nur möglich, wenn ein Attribut vorhanden ist und auch was für die Form drinsteht.