Zum Inhalt springen

sr_language_menu mit eigenem Fluid-Template

Erstellt am 11. Juli 2013 · 6 Antworten · letzte Antwort am 15. Juli 2013

Tags: Frage

emeh ·

Hallo,

Version 6 der Extension sr_language_menu wurde mit Extbase/Fluid komplett neu programmiert. Daher gibt es keine HTML-Templates mehr, sondern halt Fluid-Templates. Früher konnte man mit dem Parameter file.templateFile eine eigene Template-Datei einbinden. Dieser Parameter wird nicht mehr unterstützt.

Die verschiedenen Layouts werden nunmehr als Partials bereitgestellt. Wie kann ich wohl jetzt ein eigenes Layout für die Ausgabe anlegen und dieses nutzen? Ich stehe ein wenig auf dem Schlauch. Ich möchte jedenfalls ungern an den Original-Dateien Änderungen vornehmen, damit bei einem Update der Extension diese nicht verloren gehen.

Danke
Martin

karlchen · · Beste Antwort

Bei allen Extbase/Fluid basierten Extensions gibt es jetzt eine fest definierte Variable view wo die Pfade zu den Templates hinterlegt sind.
Steht meist auch immer in der setup.txt Datei drin, immer unterhalb von Configuration/TypoScript/... zu finden

In diesem Fall steht da folgendes:

plugin.tx_srlanguagemenu {
	...
	view {
		templateRootPath = {$plugin.tx_srlanguagemenu.view.templateRootPath}
		partialRootPath = {$plugin.tx_srlanguagemenu.view.partialRootPath}
		layoutRootPath = {$plugin.tx_srlanguagemenu.view.layoutRootPath}
		

               widget.SJBR\SrLanguageMenu\ViewHelpers\Widget\MenuViewHelper.templateRootPath = {$plugin.tx_srlanguagemenu.view.templateRootPath}
	}
}

Das {$plugin.tx_srlanguagemenu.view.xxx} weißt darauf hin das du das hier auch im Konstanten Editor überschreiben kannst.

Statt wie früher also einen Pfad zu einer HTML-Datei anzugeben musst du nun den ganzen Ordner kopieren und den Pfad zu diesen setzen, die Namen der Dateien musst du auch beibehalten.

emeh ·

Super Tipp! Vielen Dank.

Hätte ich eigentlich auch selbst drauf kommen können, bin ich aber nicht ;-)

gyle ·

Hi,

hast du es zum Laufen bekommen? Ich möchte die extension in einem fluid-template verwenden, allerdings will es irgendwie nicht.

Ich bin der offiziellen Dokumentation gefolgt, allerdings wird das widget nicht ausgegeben:

1. Oben im template: {namespace languageMenu=SJBR\SrLanguageMenu\ViewHelpers}

2. Widget einfügen: <languageMenu:widget.menu languages="0,1,2,3" layout="Select" languageTitle=”1” />

Kannst du deine Schritte im einzelnen noch mal hier darstellen? Insbesondere auch, wie du es im TS Template eingefügt hast...

emeh ·

Ich binde das Menü über ein lib-Objekt ein:

lib.langMenu = USER
lib.langMenu {
	userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
	pluginName = LanguageMenu
	extensionName = SrLanguageMenu
	controller = Menu
	action = index
	settings = < tx_srlanguagemenu.settings
}

Das Objekt gebe ich dann in meinem Fluid-FE-Template entsprechend aus. Die Konfiguration habe ich wie karlchen schrieb in den CONSTANTS angepasst.

Funktioniert super.

gyle ·

@emeh

Korrigiere mich, wenn ich falsch liege, aber die Konfiguration muss man doch nur anpacken, wenn man die Ausgabe anpassen möchte, oder?

Ansonsten müsste alles passen und ich hinterlege eben ein lib-Objekt, wie du beschrieben hast.

Die Frage ist nun, wie gebe ich das Objekt in einem Partial aus wie diesem hier:

{namespace v=Tx_Vhs_ViewHelpers}
{namespace languageMenu=SJBR\SrLanguageMenu\ViewHelpers}

<f:layout name="Page"/>
<div xmlns="http://www.w3.org/1999/xhtml" lang="en"
   xmlns:v="http://fedext.net/ns/vhs/ViewHelpers"
   xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">

<f:section name="TopHeader">

  <div class="navbar">

    <languageMenu:widget.menu languages="0,1,2,3,4" layout="Flags" languageTitle=”1” />

  </div>

</f:section>
</div>

Stehe etwas auf dem Schlauch...

Edit: Hab den Code verkleinert, damit man das wesentliche sieht.

emeh ·

Richtig, wenn du die Konfiguration nicht änderst, musst du da natürlich nicht dran. Ich musste es, da ich die mitgelieferten Fluid-Templates anpassen wollte.

In deinem Beispielcode benutzt du den sr_language_menu-Viewhelper. Müsste ja eigentlich auch gehen, damit habe ich aber noch nicht gearbeitet. Ich gebe in meinem eigenen Seiten-Template mein lib-Objekt mit dem Fluid-Viewhelper "cObject" folgendermaßen aus:

{f:cObject(typoscriptObjectPath:'lib.langMenu')}