Gibt es irgendwo eine Anleitung oder Beispiel Scripte, wo man sehen kann wie im Frontend mit Inhaltstypen/Content-Types gearbeitet wird?
Ich habe gesehen, dass im Theme Ordner ein neuer Ordner “content_type” angelegt wird, wenn man Inhaltstypen im Backend anlegt.
Aber diese Darstellung der Felder alles hintereinander sogar ohne die Möglichkeit die Reihenfolge einzustellen oder Felder auszublenden in der Detailansicht kann es ja nicht gewesen sein.
Kann mir vielleicht jemand sagen, wie ich die Felder der Inhaltstypen einzeln ausgeben kann (content-type/detail.tpl)?
Ein var_dump der Variablen bringt mir nur die Struktur, nicht die Inhalte der Felder?
in einer foreach Schleife. Klar kann ich das mit {if} eingrenzen auf das Feld, aber ich würde diese includes gerne einzeln pro Feld ausgeben.
$sItem[‚meinFeld‘] funktioniert nur bei content.
Eine weitere Frage:
Wie könnte man für verschiedene Inhaltstypen unterschiedliche Templates realisieren?
Erstmal solltest du nichts unter frontend/content_type/* ändern
Es wird erst versucht ein eigenes Template zu laden. Wenn dein Content Type z.B SwagFoo heißt, versucht er frontend/swag_foo/index.tpl oder frontend/swag_foo/detail.tpl zu laden.
Jedes Feld bringt sein eigenes Template mit. Ich würde dir jedoch empfehlen einfach ein detail.tpl für dein Inhalttyp anzulegen und es wie gewollt ausgeben
Hey ho,
Anhand der Doku und diesem Forumbeitrag gehe ich davon aus, dass ich keinen „Controller“ anlegen muss um eigene Inhaltstypen mit der Übersicht / Detailansicht ausgeben zu können korrekt?
Es scheint auszureichen, dass ich ein Inhaltstyp erstelle, davon ein neues Element erstelle und im Theme Folder die Datei „frontend/anwendung/index.tpl“ etc. anlegen welche ich aus dem „content_type“ holen kann. Korrekt?
Ich erhalte nämlich den folgenden Fehler beim aufruf der Übersichtsseite:
: Uncaught Enlight_Controller_Exception: Controller "anwendung" not found for request url http://foobar.memo/anwendung in /Users/srutishauser/Sites/foobar/engine/Library/Enlight/Controller/Dispatcher/Default.php:428
Stack trace:
#0 /Users/srutishauser/Sites/foobar/engine/Library/Enlight/Controller/Front.php(228): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#1 /Users/srutishauser/Sites/foobar/engine/Shopware/Kernel.php(185): Enlight_Controller_Front->dispatch()
#2 /Users/srutishauser/Sites/foobar/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php(102): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#3 /Users/srutishauser/Sites/foobar/vendor/symfony/http-kernel/HttpCache/HttpCache.php(448): Symfony\Component\HttpKernel\HttpCache\SubRequestHandler::handle(Object(Shopware\Kernel), Object(Symfony\Component\HttpFoundation\Request), 1, true)
#4 /Users/srutishause in
Wenn ich ein Inhaltelement “Anwendung” mache mit einer Übersicht aller Teammitglieder und einer jeweiligen Detailansicht, wird der technische Name “CustomAnwendung” heissen. Somit heisst der Controller ebenfalls “CustomAnwendung”. Im Frontend wird als Fallback (wenn nichts anderes definiert) das Template Verzeichniss “…Bare/frontend/content_type” genutzt, welches man auf keinen Fall überschreiben soll.
Erstellt man nun ein eigenes Theme, kann man zwar das Template Verzeichniss “…MyTheme/frontend/content_type” updatesicher überschreiben, davon wird jedoch ebenfalls abgeraten. Wenn nun mehrere Inhaltstypen erstellt werden, teilen sich diese den gleichen Fallback, welcher dann ja umgeschrieben wurde.
Lösung:
Neuer Ordner im eigenen Theme mit dem Namen “…MyTheme/frontend/ custom_anwendung” anlegen und darin alle Templates editieren, welche für den spezifischen Inhaltstyp “Anwendung” wichtig sind.
Der Hacken bei mir war, dass das Template aufgrund falscher Benennung nie funktioniert hat. -> Controller heisst zwar “CustomAnwendung” doch der Ordner muss “custom_anwendung” heissen. Selbstverständlich kann “Anwendung” durch den eigenen jeweiligen Inhaltstyp ersetzt werden.
Der technische Name wird einem beim erstellen des Inhalttyps angezeigt.
Die Templates anzupassen für verschiedene Inhaltstypen funktioniert nun super bei mir.
Jetzt würde mich noch Interessieren, wie man am besten Listenansichten der Inhaltstypen auf anderen Seiten (z.B. Homepage) inkludieren kann?
Welche Möglichkeiten gibt es da und welche ist am einfachsten?
Inkludieren mit Parameter über Smarty (gibt es so eine Funktion schon für Inhaltstypen?)
API Abfrage mit PHP (Plugin nötig) oder Javascript?
Generell habe ich gerade das Problem, das ich nicht weiß, wo ich loslegen soll ;(
Fatal error: Uncaught Enlight_Controller_Exception: Action "Frontend_Index_detailAction" not found failure for request url http://meineurl.de/index/detail/id/2 ...
Also in Smarty kann ich {myContentType.ebene2.articleName} ausgeben, in der fetchContent Funktion kann ich diese aber nicht zum filtern nutzen. Attribute in der ersten Ebene funktionieren problemlos.
Hintergrund: Mein Inhaltstyp hat ein Produktauswahl Feld, über das ich die Einträge gerne auf der Produkt-Detailseite filtern würde.
Ich bekomme es leider nicht hin, das Theme content_type aus dem Bare Theme zu überschreiben.
Habe ein Template erstellt unter meintheme/frontend/custom_team/listing/item.tpl
In diesem verwende ich {extends file='parent:frontend/content_type/listing/item.tpl'}
Link zum Frontend: shopware.php?sViewport=CustomTeam
Dort erweitere ich das Template. Die Änderungen dort greifen allerdings nicht. Cache wurde natürlich geleert. Habe die Änderungen einmal im Bare Theme vorgenommen um sicher zu gehen. Dort greifen die Änderungen.