Ausgeben von Freitextfeldern für Shopseiten

Hallo,

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?

Vielen Dank!

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

2 „Gefällt mir“

Super, vielen Dank, werde ich mal ausprobieren.

Ich hoffe der Pull Request wird auch schnell in den Core übernommen :slight_smile:

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 :wink:
Einfach eine Bootstrap.php unter /engine/Shopware/Plugins/Local/Frontend/MNAttributesForShoppages ablegen mit dem Inhalt von oben.

4 „Gefällt mir“

Vielen Dank an Shyim für die Erweiterung. Funzt super. Thumb-Up

Ich hoffe, es wird bald ins Release aufgenommen.

Auch von mir vielen Dank an Shyim.

Hat auf Anhieb geklappt.

Viele Grüße
Achim

Hallo,

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:

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('sSupport')['id'];
         $data = $service->load('$s_cms_support_attributes', $customid);
         $view->assign('cms_attributes', $data);
     }

 

1 „Gefällt mir“

@Pina schrieb:

Hallo,

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:

  1. Du müsstest alle Events abonnieren, die ein Formular beinhalten, um alle Smarty Views um das Freitextfeld anzureichern, oder

  2. 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

  3. 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.

1 „Gefällt mir“

Hallo derwunner,

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.

@derwunner schrieb:

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()
    {

    }
}

Eine freie Lösung fürs Forum ;) 

1 „Gefällt mir“

Und hier auch eben im neuen Plugin-System.

Eine Datei unter /custom/plugins/MNAttributesForForms/MNAttributesForForms.php anlegen mit folgendem Inhalt:

 'onFrontendPostDispatchForms'
        ];
    }
    public function onFrontendPostDispatchForms(\Enlight_Controller_ActionEventArgs $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_atttributes', $data);
    }
}

Anschließend über den Plugin-Manager installieren. Man kann dann mit $form_attributes auf das Array zugreifen.

1 „Gefällt mir“

Hallo Moritz Naczenski,

erst einmal vielen vielen Dank für das Plugin!

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?

1 „Gefällt mir“

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 :slight_smile:

Bei der anderen Version komm ich an den Inhalt.

@Pina schrieb:

Hallo Moritz Naczenski,

erst einmal vielen vielen Dank für das Plugin!

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);
    }
}

 

1 „Gefällt mir“

@Moritz Naczenski schrieb:

@Pina schrieb:

Hallo Moritz Naczenski,

erst einmal vielen vielen Dank für das Plugin!

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 :frowning:

@Pina schrieb:

@Moritz Naczenski schrieb:

@Pina schrieb:

Hallo Moritz Naczenski,

erst einmal vielen vielen Dank für das Plugin!

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.

1 „Gefällt mir“

@Moritz Naczenski schrieb:

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?

Es tut mir leid, genau das war es! Vielen herzlichen Dank!

1 „Gefällt mir“