Controller Template laden - Wie richtig ?

Moin,

wenn man einen Controller erstellt wie hier:

https://docs.shopware.com/en/shopware-platform-dev-en/internals/plugins/plugin-quick-start?category=shopware-platform-dev-en/internals/plugins#creating-a-controller

wie lade ich am besten das zugehörige Template, welches vom Shop Template erbt? Also z.b die content Seite um etwas darzustellen …

Mit freundlichen Grüßen 

marc

Hi Marc, schau mal hier: https://docs.shopware.com/en/shopware-platform-dev-en/how-to/extending-storefront-block?category=shopware-platform-dev-en/how-to

Danke, aber das meinte ich nicht …

mehr oder weniger welchen Return muss man angeben, bzw. Wie rendert man das Template…

Okay, verstehe. Du meinst also wie du einen kompletten custom view für das Frontend rendert? Das ist eine gute Frage.

In Symfony geht es ja generell mit:

/**
 * @Route("/default/hello", name="default_hello")
 */
....
return $this->render('default/hello.html.twig', [
    'who' => 'World',
]);

Gibt es dazu schon Infos [@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl „Patrick Stahl“)‍ [@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski „Moritz Naczenski“)‍ wie man ein custom twig Template aus einem Plugin heraus an die Storefront übergibt? Das würde mich auch interessieren, oder geht das aktuell noch nicht?

genau… das habe ich auch schon herrausgerunfen… in der keynote in einer Präsentation gibt es ein Code-snippet, aber das hilft nicht wiklich. Leider konnte ich bislang das template nur bedingt laden… leider wird die NAVIGATIOn etc nicht mitgelden. Hier meine route: http://shopware:8000/paulfirstplugin/show/raitings

 

 

 

Guten Morgen @kanuma‍!

$this->render zu nutzen ist garnicht so verkehrt. Dann aber bitte lieber $this->renderStorefront, macht im Prinzip das Gleiche, wirft aber noch ein Event dazu.  :slight_smile:

Bezüglich der Navigation:
Extende bitte einmal von der Datei @Storefront/base.html.twig.

Generell gilt es hier aber dazu zu sagen, dass das im Standard häufig noch ein bisschen anders gelöst wird.
Wenn dein Controller selbst auch in mehrere Bereiche aufgeteilt ist (Eine Übersicht, eine Detailansicht, …), extenden wir meistens nicht direkt von der o.g. Datei, sondern erst von einer Art “Fundament” Datei, die von allen Templates des Controllers genutzt wird.
Diese “Fundament” Datei stellt quasi die grobe Struktur der Controller Templates dar.
Hier mal am Beispiel des Account Controllers. In der ersten Zeile wird von einer _page.html.twig extended. Und das passiert bei allen Account Templates.
Und eben jenes _page Template extended dann erst von der base.html.twig.
Das Naming zieht sich so konsequent durch. Wenn du nun aber einen Controller hast, der eh nur einen Bereich kennt und rendert (bspw. Detailseite), ist das natürlich überflüssig.

Hilft das irgendwie weiter?  Foot-in-Mouth

Gruß,
Patrick  Shopware

Moin Paktrik!

Danke für deine ausführliche Antwort. Leider erschließt sich mir nicht, weshalb ich von @Storefront/base.html.twig extenden soll, denn das Template kennt doch gar nicht das “Gerüst” für eine Content/CMS Seite oder ? Also ich hab das mal eingefügt, dann bleibt aber die Seite leer. Die Navigation etc wird auch nicht geladen.

Evtl. kannst du das nochmal prüfen :slight_smile:

Moin @kanuma‍,

entschuldige, ich hatte übersehen, dass du bereits von page/content/index.html.twig extendest, und die Information, dass du eine CMS Seite bauen möchtest. Hatte irgendwie im Kopf, dass da dein eigenes Template steht.

Einfach mal die Dau-Frage: Die Navigation ist sonst überall da und du hast auch durchaus ein paar Kategorien?
Wenn Ja, wüsste ich gerade spontan auch nicht, warum die Navigation bei dir nicht angezeigt wird, da müsste ich auch erstmal schauen und das Szenario nachbauen, sorry!  Foot-in-Mouth
Ggf. hat der [@Stephan Pohl](http://forum.shopware.com/profile/2/Stephan Pohl “Stephan Pohl”)‍ da aber einen Rat. :slight_smile:

Gruß,
Patrick  Shopware
 

Moin Patrik,

genau ich möchte eine Content-Seite bauen, also ausprobieren… Der Inhalt ist ja erstmal egal. Die Seite soll unter einer beliebigen Route erreichbar sein z.B. /Kundenbewertungen.

Ja: Die Navigation ist sonst überall da :slight_smile:

[@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl „Patrick Stahl“)‍

Moin,

ich hoffe du hast das Problem mittlerweile selbst hinbekommen. Da ich aber auch gerade starte und das selbe Problem habe, poste ich hier einmal den Grund.

 

Die Navigation wird nicht angezeigt, weil diese über die “page” variable gesetzt wird.

Also muss man den GenericPageLoader injecten und den Controller als Service regstrieren.

 

Controller:

genericPageLoader = $genericPageLoader;
    }

    /** @Route("/plugin", name="frontend.plugin.index", options={"seo"="false"}, methods={"GET"}) */
    public function index(Request $request, SalesChannelContext $context) {
        $page = $this->genericPageLoader->load($request, $context);
        return $this->renderStorefront("components/plugin/index.html.twig", [
            'page' => $page
        ]);
    }
}

Plugin

load('controller.xml');
    }
}

DependencyInjection/controller.xml

views/components/plugin/index.html.twig

{% sw_extends '@Storefront/storefront/base.html.twig' %}

{% block base_content %}
	{{ parent() }}
	hello world
{% endblock %}

 

4 „Gefällt mir“

hi mkhsky 

can you please post here complete plugin ?

trying to do something similar but not sure where i have error.

thanks