Zum Inhalt springen

Layout.html für Plugin Content Element Layout wählen

Erstellt am 28. April 2015 · 2 Antworten · letzte Antwort am 28. April 2015

Tags: Fluid, FlexForms, Frage

dkjsnnr1 ·

Hallo Zusammen,

ich möchte mein Layout ändern, indem ich den Schalter bei Appearance > Content Element layout > Layout in den Plugincontainer Einstellungen anpasse.

Mit TCEFORM.tt_content.layout.addItems.4 = Layout2 (gesetzt in der PageTS einer Inhaltsseite) war es mir möglich ein zusätzliches Dropdownfeld mit der Bezeichnung: "Layout2" erzeugen. (Zusätzlich zu Default).

Wie kann ich nun darauf zugreifen?

a) Im Idealfall möchte ich, dass eine neue Layoutdatei "Layout2.html", welche zusammen mit Default.html im Ornder "/meineextension/Resources/Private/Layouts" liegt angesprochen wird. Da habe ich die <f:render section="main" /> auf <f:render section="layout2" /> angepasst.

Hier habe ich, davon abgesehen dass es nicht angesprochen wird noch das Problem, dass ich nicht weiß, wie ich in der List.html ein zweites Layout anlegen kann, da ich eine Fehlermeldung erhalte, dass das Layout schon gesetzt wurde, wenn ich versuche die alternative einzutragen.

<f:layout name="Default" />

This Template is responsible for creating a table of domain objects.

If you modify this template, do not forget to change the overwrite settings
in /Configuration/ExtensionBuilder/settings.yaml:
  Resources:
    Private:
      Templates:
        List.html: keep

Otherwise your changes will be overwritten the next time you save the extension in the extension builder

<f:section name="main">
...
</f:section>

<f:layout name="Layout2" />
<f:section name="layout2">
...
</f:section>

b) Alternativ wäre es für mich auch eine Lösung, den Status des Schalters über den Controller an das List.html-Template weiterzugeben und zu verarbeiten.

Mein Ziel ist es nun nicht, dass komplette Seitenlayout zu ändern bzw. die wraps anzupassen, wie man es so oft im Internet zu lesen bekommt, sondern ein eine andere Layout- oder Templatedatei meiner extbase extension zu laden und alles andere unverändert zu lassen.

Vielleicht habt ihr ja darüber hinaus eine andere Idee.

Ich nutze Typo3 6.2.9.
Geht um eine Extbase Extension

Vielen Dank für eure Unterstützung.

toifel ·

tt_content.layout hat erst einmal gar nichts mit deiner Extension zu tun - daher ja "tt_content.layout". Die Einstellungen dort haben keine Auswirkung auf <f:layout> - zumindest nicht out-of-the-box.

Sinnvoller wäre es, mit einer FlexForm für die Extension zu arbeiten, denn darüber kannst du "switchableControllerActions" definieren. In der Extension würde man dann für jedes Layout eine Action anlegen. Die Funktion listAction sucht dann automatisch nach einem List.html Template.

Wenn du nur das layout-Feld in deinem Controller abfragen willst, dann hilft dir $this->configurationManager->getContentObject()->data. Darüber kannst du alle Attribute des tt_content Elements auslesen, in welchem dein Plugin liegt.. also auch das layout Feld.

dkjsnnr1 ·

Vielen Dank für die schnelle und gute Hilfe.

Zum einem hat die Klärung meines Verständnisproblems mir weitere Stunden Grübeln und Recherche in die Falsche Richtung erspart zum anderen kann ich damit meine Lösung b) umsetzen, was für mich komplett ausreicht.

Über:

var_dump($this->configurationManager->getContentObject()->data);

Im Controller konnte ich schon testen und habe festgestellt, dass je nach Seite: ["layout"]=> string(1) "0" oder ["layout"]=> string(1) "4" ist.

Darüber kann ich mein Problem lösen indem ich den Wert über

$layout = $this->configurationManager->getContentObject()->data;
echo $layout['layout']; //ausgabe zu Testzwechen

$this->view->assign('layout', $layout);

zurückgebe und im Template über viewhelper auswerte.