Fluid Typo3 - 如何从不同页面的uid获取通过flux定义的变量

3
我想我的问题很容易解决,但我已经思考了好几天,谷歌也没有帮助我。也许我只是不理解这个概念 :-)。
在我的扩展提供程序中,我定义了一个简单的主页面,并添加了一个配置选项。根据“fontawesomeicon”在页面上的表示,相应的Fonteawesome-Icon将被放置在菜单条目文本之前。 但是,当我用这种方法实现时,每个页面菜单条目都会获得来自当前页面的图标。我不知道如何告诉系统,该条目所属页面应该使用相应的{fontawesomeicon}。
感谢任何可以让它工作的提示。我正在使用Typo3 7.1
页面配置Fullpage.html:
<f:section name="Configuration">
    <flux:form id="fullpage" />
    <flux:grid>
        <flux:grid.row>
            <flux:grid.column colPos="0" name="main" />
        </flux:grid.row>
    </flux:grid>
    <flux:field.input name="fontawesomeicon" />
</f:section>

Partial config Elements.html:

<f:section name="MainMenu">
    <ul class="sf-menu">
        <v:page.menu pageUid="{settings.startpageUid}" entryLevel="2" levels="2" expandAll="TRUE" as="menu">
            <f:for each="{menu}" as="item">
                <li class="{item.class}">
                    <a href="{item.link}"><i class="fa fa-lg {fontawesomeicon}"></i>&nbsp;{item.linktext}</a>
                    <f:if condition="{item.hasSubPages}">
                        <ul>
                            <f:render section="SubMenu" arguments="{_all}" />
                        </ul>
                    </f:if>
                </li>
            </f:for>
        </v:page.menu>
    </ul>
</f:section>

<f:section name="SubMenu">
    <v:page.menu pageUid="{item.uid}" entryLevel="2" levels="1" as="submenu">
        <f:for each="{submenu}" as="subitem">
            <li class="{subitem.class}">
                <a href="{subitem.link}"><i class="fa {fontawesomeicon}"></i>&nbsp;{subitem.linktext}</a>
            </li>
        </f:for>
    </v:page.menu>
</f:section>

为了完成它...将它放在页面布局文件Page.html中:

<f:layout name="Page" />
<f:render section="MainMenu" partial="Elements" arguments="{_all}" />
<f:render section="Main" />
2个回答

2

终于明白了,原来问题出在这里......如果你没有掌握真正的关键点,如何提出正确的问题是一个老生常谈的难题。另一篇关于访问flexform的文章给了我最后的提示。耶!

<f:section name="MainMenu">
    <ul class="sf-menu">
        <v:page.menu pageUid="{settings.startpageUid}" entryLevel="2" levels="2" expandAll="TRUE" as="menu">
            <f:for each="{menu}" as="item">
                <li class="{item.class}">
 <!--new:-->        <flux:form.data table="pages" field="tx_fed_page_flexform" uid="{item.uid}" as="menuIcon">
                        <a href="{item.link}"><i class="fa fa-lg {menuIcon.fontawesomeicon}"></i>&nbsp;{item.linktext}</a>
 <!--new:-->        </flux:form.data>
                    <f:if condition="{item.hasSubPages}">
                        <ul>
                            <f:render section="SubMenu" arguments="{_all}" />
                        </ul>
                    </f:if>
                </li>
            </f:for>
        </v:page.menu>
    </ul>
</f:section>

<f:section name="SubMenu">
    <v:page.menu pageUid="{item.uid}" entryLevel="2" levels="1" as="submenu">
        <f:for each="{submenu}" as="subitem">
            <li class="{subitem.class}">
 <!--new:-->    <flux:form.data table="pages" field="tx_fed_page_flexform" uid="{subitem.uid}" as="subMenuIcon">
                    <a href="{subitem.link}"><i class="fa {subMenuIcon.fontawesomeicon}"></i>&nbsp;{subitem.linktext}</a>
 <!--new:-->    </flux:form.data>
            </li>
        </f:for>
    </v:page.menu>
</f:section>

0

通过直接使用变量“fontawesomeicon”,其值始终与呈现模板的控制器中设置的值相同,您需要指定一个新的上下文。

使用<f:debug>{varname}</f:debug>调试foreach循环中的变量,并检查字段“fontawesomeicon”是否存在。

<f:section name="SubMenu">
    <v:page.menu pageUid="{item.uid}" entryLevel="2" levels="1" as="submenu">
        <f:for each="{submenu}" as="subitem">
            <li class="{subitem.class}">
                <f:debug>{subitem}</f:debug>
                <a href="{subitem.link}"><i class="fa {fontawesomeicon}"></i>&nbsp;{subitem.linktext}</a>
            </li>
        </f:for>
    </v:page.menu>
</f:section>

我也建议使用 TypoScript (HMENU, TMENU) 来制作菜单,而不是使用 Fluid-Templates。

1
到目前为止,谢谢你的帮助。但这是我似乎缺乏知识和理解的真正关键点。我需要添加什么才能使变量像这样“foreach-ed”成为项目。是否有可能使用类似{item.uid.fontawesomeicon}的层次结构?或者有一种方法可以添加页面UID以从中获取信息?是的,该字段存在,并得到渲染。...为什么最好使用Typoscript?我刚刚从那里转过来,认为Fluid方式可能更容易(至少更易于阅读)。使用fluid有什么缺点吗? - DerPeer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接