Frontend-Widgets?

Hallo,

Ich habe ein Plugin geschrieben inkl. Controller, der ein Formular bereitstellt, über das eine externe REST API angesprochen wird. Eine Produktsuche.

Dieses Suchfeld/formular soll nun auf praktisch allen Seiten des Frontends angezeigt werden. Wie genau importiere ich die Logik meiner Plugin-Views in meine Theme-Templates? Steht das in der Doku - falls ja, gerne verlinken.

Paddelboot

Das Suchformular hat ein Dropdown-Feld, das mit Werten aus der Datenbank gefüllt wird. Daher kann ich nicht einfach ein simples Formular in sämtlichen Themevorlagen einbinden, sondern benötige eben die Plugin-Logik “eingebettet” in das Theme. Oder muss ich sämtliche Templates, in denen das Suchformular vorkommt, als Plugin-View konzipieren? Ich blicke noch nicht ganz, wie sich Shopware das vorstellt.

Du kannst nicht mal ebenso eine komplett neue Suche einbinden, welche dann auch entsprechende Produkte anzeigt. Das ist schon etwas mehr Aufwand. 

Du kannst dir evtl. aber mal dieses Plugin anschauen: https://github.com/shyim/FroshAlgolia

Hier wird die Algolia Suche genutzt welche ebenfalls über die API angetingelt wird und die entsprechende Suchergebnisse werde dann im Listing ausgegeben.

@Shopwareianer schrieb:

Du kannst nicht mal ebenso eine komplett neue Suche einbinden, welche dann auch entsprechende Produkte anzeigt. Das ist schon etwas mehr Aufwand. 

Du kannst dir evtl. aber mal dieses Plugin anschauen: https://github.com/shyim/FroshAlgolia

Hier wird die Algolia Suche genutzt welche ebenfalls über die API angetingelt wird und die entsprechende Suchergebnisse werde dann im Listing ausgegeben.

Die Suche über die Remote API ist schon komplett umgesetzt in einem eigenen Plugin und funktioniert auf einer eigenen Unterseite mit eigenem Controller, sagen wir mal /ersatzteilsuche. Der Designer und der Kunde wollen nun das Suchformular in fast jeder Frontend-Seite unterhalb der Navigation dargestellt haben. Die Frage ist nun, ob das mit SW ohne weiteres geht (offenbar nicht), oder ob ich nur einen Link-Button zu der Suchseite /ersatzteilsuche anzeigen kann, anstelle des Suchformulares. 

Wie funktioniert denn die Suche? Wird in einem Suchfeld gesucht, wo dann die Suchergebnisse kommen welche man anklicken kann um dann zum besagten Artikel kommt?

Sprich: Das Listing ist hiervorn nicht direkt betroffen?

Dann kannst du die natürlich prinzipiell im Theme einbinden wo du eben möchtest. Wo liegt denn das Problem?

Ich würde dir mal das kostenlose Shopware Developer Training empfehlen: https://www.udemy.com/developer-training-basic/ oder https://www.udemy.com/shopware-developer-training-advanced/

Dort wird auch gezeigt, wie du einen View über ein Plugin im Frontend erstellst bzw. extended usw. 

Danke, einen kompletten Kurs zu durchsuchen für die Lösung des Problems ist natürlich auch eine Möglichkeit.

Die Suche durchforstet eben die entfernte Datenbank eines Ersatzteilvertriebes via REST API und importiert bei Fündigkeit den Artikel in die SW-Datenbank. Dann wird direkt im Anschluss die Detailansicht gezeigt.

Im Grunde genommen geht es um die indexAction() des Plugin-Controllers - diese befüllt das Dropdownfeld des Suchformulares und liefert es an die View:

    public function indexAction() {

        //@TODO PRG RedirectResponse

        $sort = $this->Request()->getParam( 'sort', [[ 'property' => 'name'] ] );

        $query = Shopware()->Models()->getRepository( 'Shopware\Models\Article\Article' )->getSupplierListQuery( NULL, $sort );

        $suppliers = $query->getArrayResult();

        $data = [];

        foreach ( $suppliers as $supplier ) :

            $attributes = $this->get( 'shopware_attribute.data_loader' )->load( 's_articles_supplier_attributes', $supplier['id'] );

            $data[] = [
                'name' => $supplier['name'],
                'attributes' => $attributes
            ];

        endforeach;

        $this->View()->assign( 'data', $data );

    }

Die Plugin-View resources/frotnend/views/ersatzteilsuche/index.tpl:

                        Bitte Hersteller wählen

                        {foreach key=key item=supplier from=$data }
                            {$supplier.name}
                        {/foreach}

                    

                

                
                    
                

                

                {$sShopURL}
                {$Shop}

 

Dies funktioniert derzeit mit genau 1 View, 1 Url, 1 Template, nämlich dem unter /ersatzteilsuche , für das ja auch der obige Controller zuständig ist. Ich bzw. der Kunde möchte nun die Suchmaske ebenfalls auf der Homepage / , Detailseite der Artikel ersatzteile/x/tolles-ersatzteil , usw. direkt unter der Hauptnavigation darstellen. Ich hoffe, das ist nun verständlich. Geht das jetzt ganz einfach, oder nicht?

Ich vermute, dass es nicht geht? Ein modernes One-Page-Layout wäre dann mit SW etwas schwierig.

Also muss ich wohl die 1000+ Hersteller in dem Dropdown als statisches HTML einfügen, und kann sie nicht jeweils aus der DB auslesen.

Hallo,

ich seh bei dir aber jetzt gar kein Widget Controller, sondern nur einen normalen Controller? Der action - Widget - Controller würde ja wie hier aufgerufen werden: https://github.com/shopware/shopware/blob/5.5/themes/Frontend/Bare/frontend/index/topbar-navigation.tpl#L20 und dann auf die entsprechende Widget - Templatedatei verweisen: https://github.com/shopware/shopware/blob/5.5/themes/Frontend/Bare/widgets/compare/index.tpl .

In der Widget - Templatedatei kommt dann der gewünschte Template - Inhalt rein, im Beispiel wird beispielsweise eine andere Templatedatei included, man kann da aber jeglichen Inhalt einfügen, in deinem Fall das Auswahlfeld, mit den $data - Werten. Über den action - Widget - Controller - Aufruf kann man es ja dann überall integrieren, ohne doppelten Code etc. Dürfte also, wie grad erklärt, problemlos möglich sein.

Grüße

Sebastian

@sschreier schrieb:

Hallo,

ich seh bei dir aber jetzt gar kein Widget Controller

Ich hatte bisher auch noch keinen Widget-Controller gesehen bzw. hatte ich keinen Hinweis darauf bekommen, dass ich hier so etwas verwenden könnte. Danke schonmal für die Links usw., ich schaue mir das an, es schaut ganz gut aus.

Hallo,

ich war davon ausgegangen, das wenn das Thema “Frontend Widgets” heißt und du einen Controller geschrieben hast, du auch einen Frontend Widget Controller damit meinst (den ich ja erläutert habe). Sonst wäre es ja ein “stinknormaler” Controller, der nichts mit Widgets zu tun hat.

Grüße

Sebastian

@sschreier schrieb:

Hallo,

ich war davon ausgegangen, das wenn das Thema „Frontend Widgets“ heißt und du einen Controller geschrieben hast, du auch einen Frontend Widget Controller damit meinst (den ich ja erläutert habe). Sonst wäre es ja ein „stinknormaler“ Controller, der nichts mit Widgets zu tun hat.

Grüße

Sebastian

Wo in der Dokumentation wird denn auf Widget-Controller näher eingegangen? 

Hallo, 

es gibt nicht zu jedem Teil von Shopware auch immer gleich ein dokumentiertes Beispiel, zumindestens ist mir für diesen Bereich keines bekannt. Die Funktionalität wird hier erklärt: https://developers.shopware.com/designers-guide/smarty-plugins/#action-plugin .

Den Widget - Controller zum Beispiel oben findet man hier: https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Controllers/Widgets/Compare.php . Wer sucht, der findet auch. Im Prinzip kann man mit den 3 genannten Links von mir sich das schon problemlos erschließen.

Grüße 

Sebastian