Fluid Typo3 - 如何获取通过来自不同页面 uid 的通量定义的变量
Posted
技术标签:
【中文标题】Fluid Typo3 - 如何获取通过来自不同页面 uid 的通量定义的变量【英文标题】:Fluid Typo3 - How to get variables definded via flux from different page uids 【发布时间】:2015-10-11 21:44:56 【问题描述】:我想我的问题很容易解决,但我想了好几天,谷歌搜索并没有帮助我。也许我只是不明白这个概念:-)。
在我的提供程序扩展中,我定义了一个带有一个配置选项的简单主页。根据“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>
部分配置 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> 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> 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" />
【问题讨论】:
【参考方案1】:终于明白了。这是老问题......如果你没有真正解决问题,你如何提出正确的问题。另一篇文章(关于访问 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> 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> subitem.linktext</a>
<!--new:--> </flux:form.data>
</li>
</f:for>
</v:page.menu>
</f:section>
【讨论】:
【参考方案2】:通过直接使用变量“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> subitem.linktext</a>
</li>
</f:for>
</v:page.menu>
</f:section>
我还建议对菜单使用 TypoScript (HMENU, TMENU
) 而不是 Fluid-Templates
【讨论】:
谢谢你。但这是真正的一点,我似乎缺乏知识和理解力。我需要添加什么变量像这个项目一样得到“foreach-ed”。是否有可能像 item.uid.fontawesomeicon 这样使用的层次结构。或者添加pageUid的方法从哪里获取信息?是的,该字段存在,被渲染。 ... 为什么更好地使用 Typoscript?我刚刚从那个切换过来,认为流体方式可能更容易(至少阅读要好得多)。使用液体有什么缺点吗?以上是关于Fluid Typo3 - 如何获取通过来自不同页面 uid 的通量定义的变量的主要内容,如果未能解决你的问题,请参考以下文章
Typo3 Fluid - 如何检查两个或多个 colPos 是不是有内容然后打印 HTML