2016-07-18 17 views
0

Ich versuche zu erstellen und rendern meine erste Teil. Zuerst habe ich die Datei "TableRow.html" erstellt.Teilweise wird nicht gerendert

TableRow.html

Dann habe ich einen Alias ​​Karte für Testzwecke. Ganzer Code:

<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"> 


    <table class="tx_troubleshooterv3" > 
     <tr><td>Test</td></tr> 
     <f:alias 
      map="{ 
       masterpagez: 
       { 
        0: { 
         infotext: 'This is the main page.', 
         questions: 
         { 
          0: { 
           question: 'Main Question A1', 
           pages: 
           { 
            infotext: 'Answer A1', 
            questions: 
            { 
             0: { 
              question: 'Question B1' 
              pages: { 
               infotext: 'Answer B1', 
               questions: 
               { 
                0: { 
                 question: 'Question C1', 
                 pages: { 
                  infotext: 'Answer C1', 
                  questions: NULL 
                 } 
                } 
               } 
              } 
             } 
             1: { 
              question: 'Question B2' 
              pages: { 
               infotext: 'Answer B2', 
               questions: NULL 
              } 
             } 
            } 
           } 
          }, 
          1: { 
           question: 'Main Question A2', 
           pages: 
           { 
            infotext: 'Answer A2', 
            questions: 
            { 
             0: { 
              question: 'Question B2', 
              pages: { 
               infotext: 'Answer B2', 
               questions: NULL 
              } 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
      }" 
     > 


      <f:for each="{masterpagez}" as="masterpage"> 
       <f:for each='{masterpage.questions}' as="qquestion"> 
        <f:for each='{qquestion.pages}' as='page'> 

         <f:render partial="TableRow" arguments="{page: page}"/> 
        </f:for> 
       </f:for> 
      </f:for> 
     </f:alias> 

Wie Sie sehen können, versuche ich einfach, die Seite von den ersten beiden Fragen an meine Teildatei zu übergeben. Dann versuche ich nur den Hilfetext dieser Seiten in meinem Teil zu machen:

TableRow.html

<tr><td><strong>{page.infotext}</strong></td></tr> 

Aber ich nur die Ausgabe „test“ und nichts anderes bekommen. Warum wird mein Teil nicht gerendert?

Erwartete Ausgabe:

Antwort A1

Antwort B2

Ausgang (als HTML):

Result


Update:

Ich habe gerade die Variable "Seite" debugged, aber es gibt 4 Debug-Boxen anstelle von 2 wie ich erwartet ?! Kann jemand das erklären?

Debug

Antwort

1

Alles funktioniert wie erwartet. Dein Teil wird gerendert. Sie erstellen jedoch ein ziemlich komplexes Array, das nicht zu Ihren Iterationsansätzen passt. Ihre letzte Schleife

<f:for each='{qquestion.pages}' as='page'> 

wird z.B. iterieren diesem Array

pages: { 
    infotext: 'Answer B1', 
    questions: 
    { 
     0: { 
      question: 'Question C1', 
      pages: { 
       infotext: 'Answer C1', 
       questions: NULL 
      } 
     } 
    } 
} 

So wird die erste {page} sein Answer B1 und die zweite wird die Fragen Array sein. Dies ist genau die Debug-Ausgabe, die Sie bekommen haben. Aber weder hat eine Eigenschaft infotext, also {page.infotext} wird nichts ausgeben. Versuchen Sie diesen Block für Ihre Iteration statt und sehen Sie die Ausgabe:

<f:for each="{masterpagez}" as="masterpage"> 
    <f:for each="{masterpage.questions}" as="qquestion"> 
     <f:render partial="TableRow" arguments="{infotext: qquestion.pages.infotext}" /> 
    </f:for> 
</f:for> 

Und in Ihrem Teil:

<tr><td><strong>{infotext}</strong></td></tr>