Template Extends

Hallo, 

ich habe ein Plugin welches die index/header,tpl um meta tags erweitert was mit dem Bare Theme auch wunderbar funktioniert.

Aber leider nur mit dem Bare theme. mit einem anderen theme tut es nicht, es wird einfach nichts angezeigt.

Nur wenn ich in dem „anderen“ theme in der original header.tpl datei folgendes ergänze in der  ersten zeile:

{extends file=‚parent:frontend/index/header.tpl‘}
 

dann tut es aufeinmal. 

Kann mir das jemand erklären? Im original Bare template gibt es ja diese Zeile auch nicht…

Danke, die

ratlose Lisa

Hallo,

 

das liegt daran, weil sich Dein anderes Theme XYZ nicht vom Bare Theme ableitet und damit ist man auch nicht an die Block Namen, die das Bare Theme vorgibt, gebunden. Sprich: In dem Theme XYZ heißen die Smarty Blocks anders. Dementsprechend wirkt sich auch Deine Überschreibung des Blocks im Plugin nicht aus, weil es den Block gar nicht im Theme XYZ gibt.

 

 

MFG

 

derwunner

dachte ich zuerst auch, doch das andere theme ist von bare abgeleitet, enthält die gleichen tpl datein und der block den ich “appenden” will existiert auch! für mich sieht es so aus also ob mein plugin das bare theme verwendet obwohl dieses gar nicht aktiv ist?!

 

wie muss man hier richtig vorgehen? wenn das andere theme die gleiche tpl datei hat wie Bare, und auch die gleichen blocks sollte ich die doch überschreiben können…

Hast Du auch dein Template Directory eingebunden im StartDispatch Event oder in einem anderen frühen Event?

Hast Du auch die vom Bare Theme vorgegebene Verzeichnisstruktur eingehalten? Denn das klingt ganz für mich danach, als würde er Dein Smarty Template nicht finden. Wenn er das vom Plugin nicht findet, dann wird das vom Theme her genommen. Achte also wirklich genau darauf, dass Du dein Template, dass das Theme Template ersetzt, sich auch im selben Unterverzeichnis in Deinem Plugin befindet.

Also angenommen, dein Plugin heißt CompanyPlugin und die willst die Artikel Detailseite durch Dein eigenes Template ersetzen, bzw. überschreiben. Das Original vom Bare Theme liegt also unter frontend/detail/index.tpl. Dein Template müsste dann, unter der Annahme, dass Du vorher den Ordner /custom/plugins/CompanyPlugin/Resources/Theme als zusätzliches Template Directory hinzugefügt hast, dann müsste der Pfad zu deiner Artikel Detail Template Seite wie folgt lauten:

custom/plugins/CompanyPlugin/Resources/Theme/frontend/detail/index.tpl

Hallo,

wenn in dem Custom Theme der " extends" Befehl fehlt, dann greift die Datei auch nicht auf das Vererbungssystem zu. Die Datei überschreibt komplett die Datei aus allen vorherigen Ebenen. Alles was also davor erweitert wurde geht verloren. Ich vermute, dass das Theme nach den Plugins geladen wird und damit die Änderungen des Plugins überschreibt. Du kannst das prüfen, in dem Du mal in die Theme.php schaust und die Variable $injectBeforePlugins überprüfst.

Weitere Infos findest Du hier:
Getting started with Smarty

Sonnige Grüße,
Phil

Hallo Phil,

 

vielen dank für deine Antwort. Das würde es komplett erklären… Kann ich dann also sagen das, dass problem beim Template liegt und nicht bei meinem Plugin?

 

danke und liebe grüße

Lisa

Die Methode Enlight_Template_Manager::addTemplateDir hat als letzten Parameter die Reihenfolge. Wenn ich richtig liege, dann könnte man das Plugin Theme also am Ende des Arrays anfügen und somit würde in der Vererbungsreihenfolge das Plugin wieder ganz oben stehen, oder?

@derwunner schrieb:

Die Methode Enlight_Template_Manager::addTemplateDir hat als letzten Parameter die Reihenfolge. Wenn ich richtig liege, dann könnte man das Plugin Theme also am Ende des Arrays anfügen und somit würde in der Vererbungsreihenfolge das Plugin wieder ganz oben stehen, oder?

Hallo,

nein, das verstehst du komplett falsch. Du könntest so maximal die Ladereihenfolge der Plugins beeinflussen - ob das Plugin oder das Theme an letzter Stelle steht, kann man nur mit injectBeforePlugins beeinflussen, wie von Philipp erwähnt.

Beste Grüße

Sebastian