部分未呈现

时间:2016-07-18 09:28:14

标签: typo3 fluid partials typo3-7.6.x

我尝试创建并渲染我的第一部分。首先,我创建了文件" TableRow.html"。

TableRow.html

然后我创建了一个别名地图用于测试目的。整个代码:

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

正如您所看到的,我只是尝试将前两个问题的页面传递给我的部分文件。然后我只是尝试在我的部分中呈现这些页面的信息文本:

TableRow.html

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

但我只得到输出&#34;测试&#34;没有别的。 为什么我的部分未呈现?

预期输出:

回答A1

回答B2

输出(以html为单位):

Result

更新

我刚刚调试了变量&#34; page&#34;但有4个调试框显示而不是像我预期的那样2个?!有人可以解释一下吗?

Debug

1 个答案:

答案 0 :(得分:1)

一切都按预期工作。你的部分被渲染。但是您正在创建一个非常复杂的数组,它不适合您的迭代方法。你的最后一个循环

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

将是迭代这个数组

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

因此第一个{page}将是Answer B1,第二个将是问题数组。这正是您获得的调试输出。但是没有属性infotext,因此{page.infotext}不会输出任何内容。尝试使用此块进行迭代,然后查看输出:

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

在你的部分:

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