如何使用来自Mask字段(文本)的图标创建HMENU / TMENU?

问题描述 投票:0回答:1

使用扩展名“Mask”,我在页面模板中添加了一些字段,以便为页面分配图标。您还可以使用复选框激活菜单中的所选图标。菜单意味着这种情况:我还制作了一个带有Mask的内容元素,您只需输入UID,该UID的所有子页面都将创建为<li>列表。

我在页面模板中设置了以下字段:

  • page_01_icon(String):将包含类似“icon-home”的内容
  • page_02_color(String):这将是图标的颜色或列表元素的背景颜色;取决于`page_color_background`,有效值是任何css十六进制颜色,如“#a5011c”
  • page_02_color_text(String):如果设置,文本颜色将更改为此
  • page_03_menu(复选框):选中==`page_icon`将被显示;否则只有页面的标题
  • page_04_icon_only_menu(复选框):选中==只显示图标,标题不显示(我的问题不需要,我只在主菜单中使用)
  • page_05_color_background(Checkbox):如果选中`page_color`用作此列表元素的背景颜色,如果不是,则图标将使用`page_color`获得颜色;如果`page_color`没有设置任何图标或背景将获得颜色

我是Typo3的新手,但实际上我的页面上的常规页眉菜单上面的代码工作正常。这是一个艰难的方式,但那部分有效。对于标题菜单,我可以在FLUID中进行,但现在这是一个lib,我需要在这里使用TypoScript做同样的事情 - 无论我尝试什么,我都不能做到正确。大多数示例和how-tos依赖于“if uid = 1..25”做其他事情。但是我需要多个if if elses。我想我在FLUID中所做的是正确的方法,现在试图为TypoScript提供相同的逻辑......并最终在这里结束。

Page Template Fields in Mask 这就是我在Mask中添加字段的方法

Content-Fields 页面 - >编辑 - >内容字段(掩码字段)

Main Menu Bar 这就是我用FLUID(主菜单栏)所做的。仅图标+图标和标题+标题。

用简单的PHP逻辑语言我会做以下(只是为了解释我在TypoScript中尝试的主要思路/方式):

    // dont need to check if page_01_icon is set: field is required
    // dont need to check if page_03_menu is checked: icons in this typo3 lib will always be displayed
    // just assume that $title holds the title and $url the url to that page

    foreach(....) {
      // save html/css code in var for text color if a color is set
      if(isset($page_02_color_text)) {
        $textColorHTML = ' style="color' . $page_02_color_text . '"';
      } else {
        $textColorHTML = '';
      }

      // save html/css code in background of <li> if background-checkbox is checked and a color is set
      if ($page_05_color_background == 1 && isset(page_02_color)) {
        $liBackgroundHTML = ' style="background-color:' . $page_05_color_background . '"';
      } else {
        $liBackgroundHTML = '';
      }

      echo '<li' . $liBackgroundHTML . '><a href="' . $url . '" ' . $textColorHTML . '><i class="' . $page_01_icon . '"></i> ' . $title . </a></li>';
    }

基本上这就是我试图在TypoScript中尝试的:)

是)我有的”: 掩码模板文件,包含以下内容:

<f:cObject typoscriptObjectPath="lib.linkListAuto" data="{data}" />

lib.linkListAuto文件: 这是没有上面的php逻辑的默认版本。在这里,我需要将php逻辑“翻译”成..我甚至无法发布一个中途蠕动的脚本因为我尝试以错误的方式结束的一切:/

lib.linkListAuto = COA
lib.linkListAuto {
    1 = HMENU
    1 {
        special = directory
        special.value.field = tx_mask_link_root_id

        wrap = <ul class="list-group">|</ul>
        stdWrap.if.isTrue.data = register:count_menuItems

        1 = TMENU
        1 {
            NO = 1
            NO {
                allWrap = <li class="list-group-item">|</li>
                stdWrap.htmlSpecialChars = 1
                ATagTitle.field = description // subtitle // title
            }
        }
    }
}

我怎么能用TypoScript“以这种方式呈现每个链接(子页面)”, 但如果设置了颜色并且选中了use_color_as_background的复选框:更改此条目的渲染并为<li>指定背景颜色 如果设置了文本颜色也会更改 最后在页面标题前面添加图标 ?

请帮助提出“如果uid等于X”这样的想法 - 示例。有足够的,他们工作,是的,但我不能改变他们我想做的事情。

mask typoscript typo3-9.x
1个回答
0
投票

您需要了解TypoScript的概念。 所以这个名字可能会产生误导。 TypoScript不是脚本语言,而是配置语言。所以你不能使用顺序计算的概念。

通过这种方式,您可以配置渲染。

无论如何,您可以以.stdWrap.if函数的形式向渲染添加一些逻辑,该函数可以控制是否在输出中打印值。

另一个重要的功能是字符串连接:在TypoScript中,您可以使用COAs(内容对象数组)来构建一个字符串,您可以在其中决定每个数组元素的显示方式。

要构建字符串<li' . $liBackgroundHTML . '><a href="' . $url . '" ' . $textColorHTML . '><i class="' . $page_01_icon . '"></i> ' . $title . </a></li>,您可以使用以下内容:

temp.li_tag = COA
temp.li_tag {
    10 = TEXT
    10.value = <li

    // if ($page_05_color_background == 1 && isset(page_02_color)) {
    //   $liBackgroundHTML = ' style="background-color:' . $page_05_color_background . '"';
    // } else {
    //   $liBackgroundHTML = '';
    // }
    20 = TEXT
    20.field = page_05_color_background
    20.noTrimWrap = | style="background-color:|"|
    20.if.isTrue.field = page_02_color

    30 = TEXT
    30.value = ><a href="

    40 = TEXT
    40.field = title
    40.dataWrap = <i class="{field.page_01_icon}"></i>&nbsp;|
    40.stdWrap.typolink {
       parameter.field = uid

       // if(isset($page_02_color_text)) {
       //   $textColorHTML = ' style="color' . $page_02_color_text . '"';
       // } else {
       //   $textColorHTML = '';
       // }
       ATagParams.cObject = TEXT
       ATagParams.cObject {
         field = page_02_color_text
         wrap = style="color|"
         if.isTrue.field = page_02_color_text
       } 
    }

    50 = TEXT
    50.value = </li>
}
© www.soinside.com 2019 - 2024. All rights reserved.