如何使用来自掩码字段(文本)的图标创建 HMENU/TMENU?
How to create a HMENU/TMENU with Icons that came from a Mask field (text)?
使用扩展名 "Mask" 我在页面模板中添加了一些字段以将图标分配给页面。您也可以使用复选框来激活菜单中选定的图标。菜单意味着这种情况:我还制作了一个带掩码的内容元素,您只需输入一个 UID,该 UID 的所有子页面将被创建为 <li>
列表。
我在页面模板中设置了以下字段:
- page_01_icon(字符串):将包含类似 "icon-home" 的内容
- page_02_color(字符串):这将是图标的颜色或列表元素的 background-color;取决于 `page_color_background`,有效值是任何 css 十六进制颜色,如“#a5011c”
- page_02_color_text (String): 如果设置,文本颜色会变成这个
- page_03_menu(复选框):勾选 == `page_icon` 将显示;否则只有页面的标题
- page_04_icon_only_menu(复选框):选中 == 仅显示图标,不显示标题(我的问题不需要,我只在主菜单中使用它)
- page_05_color_background(复选框):如果选中 `page_color` 将用作此列表元素的背景色,否则图标将获得用“page_color”着色;如果根本没有设置“page_color”,图标或背景都不会获得颜色
我是 Typo3 的新手,但实际上我在页面上使用正常的 header 菜单使上面的代码工作。这是一条艰难的道路,但那部分是有效的。对于 header 菜单,我可以在 FLUID 中完成,但现在这是一个库,我需要在这里做同样的事情,但使用 TypoScript - 无论我尝试什么,我都无法做到正确。大多数示例和 how-tos 依赖于 "if uid = 1..25" 做其他事情。但是我需要多个if elses。我认为我在 FLUID 中所做的是正确的方式,现在尝试将相同的逻辑用于 TypoScript... 并在此处结束。
Page Template Fields in Mask
这就是我在 Mask
中添加字段的方式
Content-Fields
页面 -> 编辑 -> Content-Fields(共 Mask-Fields)
Main Menu Bar
这就是我对 FLUID(主菜单栏)所做的。 Icon-only + 图标和标题 + 仅标题。
用简单的 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 中尝试的方法:)
我"have":
具有以下内容的掩码 template-file:
<f:cObject typoscriptObjectPath="lib.linkListAuto" data="{data}" />
库linkListAuto-file:
这是默认版本,没有上面的 php 逻辑。在这里我需要 "translate" php 逻辑到..我什至不能 post 写脚本的一半因为我尝试过的一切都以错误的方式结束了:/
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 说 "render this way every link (sub-page) that comes",
但如果设置了颜色列表并选中了 use_color_as_background 的复选框:更改此条目的渲染并给 <li>
一个 background-color
如果已设置,还会更改文本颜色
最后在 page-title 前面添加图标
?
请帮助提供未提出 "if uid equals X" 示例的想法。有足够的它们,它们可以工作,是的,但我无法将它们更改为我正在尝试做的事情。
您需要了解 TypoScript 的概念。
所以这个名字可能会产生误导。 TypoScript 不是一种脚本语言,而是一种配置语言。所以你不能使用顺序计算的概念。
您可以通过这种方式配置渲染。
无论如何,您可以以 .stdWrap.if
函数的形式向渲染添加一些逻辑,它可以控制是否在输出中打印值。
另一个重要的功能是字符串连接:在 TypoScript 中,您可以使用 COA
s(内容对象数组)构建一个字符串,您可以在其中决定每个数组元素的显示方式。
为了构建字符串 <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> |
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>
}
使用扩展名 "Mask" 我在页面模板中添加了一些字段以将图标分配给页面。您也可以使用复选框来激活菜单中选定的图标。菜单意味着这种情况:我还制作了一个带掩码的内容元素,您只需输入一个 UID,该 UID 的所有子页面将被创建为 <li>
列表。
我在页面模板中设置了以下字段:
- page_01_icon(字符串):将包含类似 "icon-home" 的内容
- page_02_color(字符串):这将是图标的颜色或列表元素的 background-color;取决于 `page_color_background`,有效值是任何 css 十六进制颜色,如“#a5011c”
- page_02_color_text (String): 如果设置,文本颜色会变成这个
- page_03_menu(复选框):勾选 == `page_icon` 将显示;否则只有页面的标题
- page_04_icon_only_menu(复选框):选中 == 仅显示图标,不显示标题(我的问题不需要,我只在主菜单中使用它)
- page_05_color_background(复选框):如果选中 `page_color` 将用作此列表元素的背景色,否则图标将获得用“page_color”着色;如果根本没有设置“page_color”,图标或背景都不会获得颜色
我是 Typo3 的新手,但实际上我在页面上使用正常的 header 菜单使上面的代码工作。这是一条艰难的道路,但那部分是有效的。对于 header 菜单,我可以在 FLUID 中完成,但现在这是一个库,我需要在这里做同样的事情,但使用 TypoScript - 无论我尝试什么,我都无法做到正确。大多数示例和 how-tos 依赖于 "if uid = 1..25" 做其他事情。但是我需要多个if elses。我认为我在 FLUID 中所做的是正确的方式,现在尝试将相同的逻辑用于 TypoScript... 并在此处结束。
Page Template Fields in Mask
这就是我在 Mask
Content-Fields
页面 -> 编辑 -> Content-Fields(共 Mask-Fields)
Main Menu Bar
这就是我对 FLUID(主菜单栏)所做的。 Icon-only + 图标和标题 + 仅标题。
用简单的 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 中尝试的方法:)
我"have":
具有以下内容的掩码 template-file:
<f:cObject typoscriptObjectPath="lib.linkListAuto" data="{data}" />
库linkListAuto-file:
这是默认版本,没有上面的 php 逻辑。在这里我需要 "translate" php 逻辑到..我什至不能 post 写脚本的一半因为我尝试过的一切都以错误的方式结束了:/
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 说 "render this way every link (sub-page) that comes",
但如果设置了颜色列表并选中了 use_color_as_background 的复选框:更改此条目的渲染并给 <li>
一个 background-color
如果已设置,还会更改文本颜色
最后在 page-title 前面添加图标
?
请帮助提供未提出 "if uid equals X" 示例的想法。有足够的它们,它们可以工作,是的,但我无法将它们更改为我正在尝试做的事情。
您需要了解 TypoScript 的概念。
所以这个名字可能会产生误导。 TypoScript 不是一种脚本语言,而是一种配置语言。所以你不能使用顺序计算的概念。
您可以通过这种方式配置渲染。
无论如何,您可以以 .stdWrap.if
函数的形式向渲染添加一些逻辑,它可以控制是否在输出中打印值。
另一个重要的功能是字符串连接:在 TypoScript 中,您可以使用 COA
s(内容对象数组)构建一个字符串,您可以在其中决定每个数组元素的显示方式。
为了构建字符串 <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> |
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>
}