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



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

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

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

我对 Typo3 很陌生,但我实际上让我的页面上的普通标题菜单使用上面的代码。这是一条艰难的道路,但这部分有效。对于标题菜单,我可以在 FLUID 中做到这一点,但现在这是一个库,我需要在这里做同样的事情,但使用 TypoScript - 无论我尝试什么我都无法正确处理。大多数示例和操作方法都依赖于"if uid = 1..25"执行其他操作。但是我需要多个,如果其他的话。我认为我在 FLUID 中的表现是正确的方式,现在试图将相同的逻辑用于 TypoScript......最后来到了这里。

掩码中的页面模板字段 这就是我在掩码
中添加字段的方式

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

主菜单栏
这就是我对 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-file:
这是没有上面 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 中说"以这种方式呈现每个链接(子页面)",
但是,如果设置了颜色 ist 并选中了 use_color_as_background ist 的复选框:更改此条目的渲染并为<li>提供背景色
如果已设置,还可以更改文本颜色
最后在页面标题前面添加图标

请帮助解决没有提出"如果 uid 等于 X"示例的想法。受够了,它们有效,是的,但我无法将它们更改为我想要做的事情。

你需要了解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>
}

最新更新