typo3,typoscript,TMENU / HMEN:当前项目后项目的特殊格式

时间:2011-10-25 10:36:00

标签: typo3 typoscript

有任何方法可以在当前项目之后立即对菜单项应用特殊格式, 这是CUR + 1.类似的东西:

lib.menu = HMENU
lib.menu {
    1 = TMENU {
        NO = 1
        NO = {
            ...
        }
        ...
        # The currently selected item
        CUR = 1
        CUR {
            allWrap = ...
        }

        # The next item
        CUR + 1 = 1
        CUR + 1 {
            allWrap = ...
        }
    }
}

我很感激您的任何反馈。另外的选择:可以编写PHP类/函数,而不是在typoscript中编写它。

2 个答案:

答案 0 :(得分:0)

不幸的是,只有TypoScript才能实现这一点。我真的没有看到PHP的好解决方案。但是你可以使用PHP来完成它,但你需要加载相同的菜单项,就像在PHP中的菜单本身一样。这使得效率非常低,而且根本不灵活。

我想说为链接添加一个特殊的类属性,或者用JavaScript包装和执行你的格式化。修改活动项目之后的项目。

答案 1 :(得分:0)

所以我设法自己解决这个问题。答案是使用所谓的寄存器来标记我们是否已经通过了当前对象。例如:

lib.menu = HMENU
lib.menu {
    1 = TMENU {
        NO = 1
        NO = {
            # Render using Common Object Array (COA)
            stdWrap.cObject = COA
            stdWrap.cObject {
                # Normal Case (However the an item should normally be rendered
                10 = TEXT
                10 {
                   if {
                       isTrue.data = register:cid
                       value = NORMAL RENDERING
                   }
                }
                20 = TEXT
                20 {
                   if {
                       isTrue.data = register:data
                       value = RENDERING (IMMEDIATELY) AFTER THE CURRENT ITEM
                   }
                }
                # Unset the register (after we've done with our special formatting)
                30 = LOAD_REGISTER
                30.cid= 0
            }
        }
        ...
        # The currently selected item
        CUR = 1
        CUR {
            # Render using Common Object Array (COA)
            stdWrap.cObject = COA
            stdWrap.cObject {
              # However the Current item should normally be rendered
              10 = TEXT
              10.field = title
              # Mark that we've reached the current item
              20 = LOAD_REGISTER
              20.cid= 1
            }    
        }     
    }
}

使用LOAD_REGISTER设置的寄存器基本上是一种运行时变量,可以在迭代菜单项(或其他)的过程中设置和重置。因此,它可用于记录我们在菜单项中的进度,特别是注意我们是否已通过当前菜单项(CUR)。

咆哮开始考虑到typoscript是特定于域的语言,它几乎是一个优雅的解决方案,主要用于菜单这样的标准化内容。 / rant end