[Frage] Aktuelle Page ID im Fluid-Template auslesen für eine Condition

  • lukesn lukesn
    Padawan
    0 x
    58 Beiträge
    0 Hilfreiche Beiträge
    24. 07. 2014, 08:39

    Guten Morgen,

    ich habe eine kleine Extension inklusive Frontend-Plugin mit dem Extension Builder erstellt. Die Datensätze beinhalten einen Text sowie eine Seiten-ID auf der ich im Fluid-Template verlinke.

    Folgendermaßen sieht das aus:

    1. <f:for each="{apartmentLinks}" as="apartmentLink">
    2. <f:link.page pageUid="{apartmentLink.linkedpage}">
    3. {apartmentLink.squaremeter}<span>m<sup>2</sup></span>
    4. </f:link.page>
    5. </f:for>

    Ich habe folgenden Ansatz gefunden:

    1. <f:if condition="{0:data.uid} == {0:'791'}">
    2. <f:then>
    3. Ausgabe auf der Seite
    4. </f:then>
    5. <f:else>
    6. Ausgabe, wenn nicht auf der Seite
    7. </f:else>
    8. </f:if>

    und darauf hin dies getestet:

    1. <f:if condition="{0:data.uid} == {0:'{apartmentLink.linkedpage}'}">

    1. <f:if condition="{0:data.uid} == {0:{apartmentLink.linkedpage}}">

    1. <f:if condition="{data.uid} == {'{apartmentLink.linkedpage}'}">

    1. <f:if condition="{data.uid} == {apartmentLink.linkedpage}">

    Leider ohne Erfolg.

    Es scheint so, als hätte {data.uid} keinen Wert. Es erscheint auch nichts, wenn ich mir den Wert ausgeben lasse.
    Hat jemand eine Idee, wie ich die Page ID auslesen kann?

    Vielen Dank und Gruß,
    Lukas


  • 1
  • serverTimeout serverTim...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    21. 09. 2014, 15:09

    Hi Lukas,

    meiner Erfahrung nach wird das [b]data[/b] Object/Array nicht bis in das Fluid Template deiner Extension durchgeschleust.

    Wenn du deine Abfrage in das [b]FLUIDTEMPLATE[/b] file verschieben kannst, dann kannst du auf [i]{data.uid}[/i] zugreifen. Jedoch auch nicht in Partials.

    D.h. du musst die Config oder id über den Controller an das view übergeben

    1. public function listAction() {
    2. $cObjectData = $this->configurationManager->getContentObject()->data;
    3. $this->view->assign('codata', $cObjectData);
    4.  
    5. //wahlweise kannst/solltest du auch nur die gewünschte Eigenschaft an das View übertragen
    6. //$pid = $this->configurationManager->getContentObject()->data['pid']
    7. //$this->view->assign('pid', $pid);
    8.  
    9. /* ... */
    10.  
    11. }

    Damit kannst du dann im FLUID auch innerhalb deiner Extension auf die Settings zugreifen. Jedoch ist das Beispiel oben von mir bezogen auf das ContentElement. Jedoch beinhaltet auch das Content Object die parent id (pid) , welche in diesem Fall der page uid gleichzusetzen ist.

    Noch ein Hinweis data.uid oder auch wie in meinem Beispiel codata.pid sind Integer , d.h. richtig wäre hier

    1. <f:if condition="{data.uid} == {apartmentLink.linkedpage}">

    bzw.
    1. <f:if condition="{codata.pid} == {apartmentLink.linkedpage}">

    über

    1. <f:debug>{codata}</f:debug>

    siehst du genau was dir getContentObject im data Array zurückliefert.

    P.S. es gibt auch die eigentlich richtige Config über getConfiguration, aber mir ist gerade nicht klar was dort der notwendige Parameter ist. Müsste ich erst nachschauen.

    Ich hoffe das hilft.

    Thomas

  • serverTimeout serverTim...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    21. 09. 2014, 15:31

    Über Typoscript cObject gehts natürlch auch.

    Hier das Beispiel:

    Typoscript

    1. lib.pageid = TEXT
    2. lib.pageid.data = page:uid

    Fluid

    1. <f:cObject typoscriptObjectPath="lib.pageid" />
    2.  
    3. <f:debug>{f:cObject(typoscriptObjectPath: 'lib.pageid')}</f:debug>
    4.  
    5. <f:if condition="{f:cObject(typoscriptObjectPath: 'lib.pageid')} == {apartmentLink.linkedpage}">

    Beste Grüße,
    Thomas

  • bpm117 bpm117
    TYPO3-Anwärter
    0 x
    4 Beiträge
    0 Hilfreiche Beiträge
    17. 04. 2015, 10:50

    Eine weitere Möglichkeit die pid auszulesen ist über den v.page.info-Viewhelper:

    1. {v:page.info(field: 'uid')}

    (Das Forum macht einen Smiley aus meinem Code)

  • 0 x
    26 Beiträge
    0 Hilfreiche Beiträge
    22. 11. 2016, 09:54

    Hallo Thomas,

    weißt du wie ich das {data} Objekt in meine eigene Extension bekomme?

    Ich würde {data.is_siteroot} in Fluid benötigen.

    Beste Grüße

  • 1