使用TCE的信息构建HMENU

时间:2014-05-22 15:27:42

标签: typo3 typoscript

我已经为Page-Tree上的每个后端页面扩展了TCA。其中一个新选项是“页面类型”,例如“PressPage”。使用此扩展,我在表“pages”中有一个新的数据库字段。

现在我将在这个文件夹下面建立一个包含所有页面的HMENU / TMENU。

[...]
lib.MetaPressNavigation{
    special = directory
    special.value = ID_FROM_FOLDER_WITH_PAGETYPE_PRESSPAGE
    [...]

但是我不知道用typoscript来实现它们。 我希望有人能帮助我。

感谢。

修改

现在 - 我已经尝试使用扩展的TCA。任何用户都可以轻松地为此项目页面进行一些配置。用户可以在特殊选项卡中使用复选框设置值。

我试图从数据库中获取页面,使用这个特殊的配置 - 任何页面都在数据库的“tx_meta_pagetype”列中有值9.我需要从该页面开始构建META-Navigation的UID。将是完整的功能 - 当我给出一个硬编码的uid,但我需要这种动态。

这是我的尝试,从数据库中获取UID:

temp.MetaNavigationIds = CONTENT
temp.MetaNavigationIds{
    table = pages
    select.Where = tx_meta_pagetype = 9 #tx_meta_pagetype is set from the TCA
    renderObj = TEXT
    renderObj.field = uid
    renderObj.stdWrap = |
}

lib.MetaNavigation = HMENU
lib.MetaNavigation{
    special = directory
    special.value < temp.MetaNavigationIds #the UID of configured page, that i need for the menu

    1 = TMENU
    1 {
        wrap = <ul> | </ul>
        NO{
            wrapItemAndSub = <li> | </i>
            wrapItemAndSub.insertData = 1
            allStdWrap.insertData = 1
        }
    }
}

我用typoscript尝试了很多数据库问题,但没有任何效果。

2 个答案:

答案 0 :(得分:1)

注意,special.value不是内容对象,而只是属性。您正在复制内容对象(CONTENT)。这不起作用。

但它确实有stdWrap。因此像

special.value.stdWrap.cObject < temp.MetaNavigationIds

应该可以解决。

对于renderObj.stdWrap = |,请输入renderObj.wrap = |,。请记住尾随的逗号。这将确保您实际获得逗号分隔的uid列表。否则你的uid将会紧接着打印出来,从而形成一个大数字。

在将组件组合在一起之前,请单独测试每个部件。你应该确保每个pease返回正确的数据,否则你永远不会得到一个有效的解决方案。

当然select.Where必须是select.where。资本化确实很重要。

以下是CONTENT的一个工作示例:

page.10 = CONTENT
page.10 {
  table = pages
  select {
    where = doktype = 199
    recursive = 99
    # Needs to be your root page uid
    pidInList = 1
  }
  renderObj = TEXT
  renderObj.field = uid
  renderObj.wrap = |,
}

答案 1 :(得分:0)

如果您使用的是TYPO3 6.2,我建议您使用新的类别系统。您可以在TYPO3后端创建不同的类别,并将这些类别分配给您的页面。

有了这个,您可以创建如下所示的HMENU / TMENU:

20 = HMENU
20 {
    special = categories
    special.value = 1,2
    1 = TMENU
    1.NO {
            ...
    }
}

如果您不使用TYPO3 6.2或不想使用类别系统,则可以使用userfunction返回与“Page-Type”匹配的页面。

HMENU / TMENU TypoScript如下所示。

lib.leftmenu.20 = HMENU
lib.leftmenu.20.special = userfunction
lib.leftmenu.20.special.userFunc = user_myspecialmenu_pi1->getPressPages

上面的TypoScript只是一个例子,您需要编写自己的userfunction代码。

特殊属性userfunction的详细参考可用here,可以找到一个示例here