Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 将菜单链接url放入属性中_Typo3_Typoscript - Fatal编程技术网

Typo3 将菜单链接url放入属性中

Typo3 将菜单链接url放入属性中,typo3,typoscript,Typo3,Typoscript,我需要做一个菜单没有任何链接,但与属性中的url。 url应该在data href=|中,但现在只有标题会打印在属性中。 有没有办法只返回url而不返回链接。代替 或者有人知道不同的解决方案吗 lib.mainMenu = HMENU lib.mainMenu { entryLevel = 1 wrap = <ul id="dropDownMenu">|</ul> 1 = TMENU 1 { noBlur = 1

我需要做一个菜单没有任何链接,但与属性中的url。 url应该在data href=|中,但现在只有标题会打印在属性中。 有没有办法只返回url而不返回链接。代替

或者有人知道不同的解决方案吗

lib.mainMenu = HMENU
lib.mainMenu {
    entryLevel = 1
    wrap = <ul id="dropDownMenu">|</ul>

    1 = TMENU
    1 {
        noBlur = 1
        expAll = 1

        NO = 1
        NO {
            wrapItemAndSub = <li class="nochildren">|</li>
            stdWrap2.wrap = <span>|</span>
        }

        ACT < .NO
        ACT.wrapItemAndSub = <li class="active nochildren">|</li>

        # if has children
        IFSUB < .NO
        IFSUB.wrapItemAndSub = <li class="haschildren">|</li>
        IFSUB.allWrap = |

        # if has children and is active
        ACTIFSUB < .IFSUB
        ACTIFSUB.wrapItemAndSub = <li class="active haschildren">|</li>
        ACTIFSUB.allWrap = |
    }

    2 < .1    
    2 {
        wrap = <ul id="subMenu">|</ul>
        NO.ATagParams = rel="nofollow"
        NO.stdWrap2.insertData = 1
        NO.stdWrap2.wrap = <span data-href="|" class="link">{field:title}</span>
        NO.doNotLinkIt = 1

        IFSUB < .NO
        ACTIFSUB < .IFSUB
    }

    3 < .2
}

请尝试以下未经测试的代码:

lib.mainMenu = HMENU
lib.mainMenu {
    entryLevel = 1
    wrap = <ul id="dropDownMenu">|</ul>

    1 = TMENU
    1 {
        noBlur = 1
        expAll = 1

        NO = 1
        NO {
            wrapItemAndSub = <li class="nochildren">|</li>
            stdWrap2.wrap = <span>|</span>
        }

        ACT < .NO
        ACT.wrapItemAndSub = <li class="active nochildren">|</li>

        # if has children
        IFSUB < .NO
        IFSUB.wrapItemAndSub = <li class="haschildren">|</li>
        IFSUB.allWrap = |

        # if has children and is active
        ACTIFSUB < .IFSUB
        ACTIFSUB.wrapItemAndSub = <li class="active haschildren">|</li>
        ACTIFSUB.allWrap = |
    }

    2 < .1    
    2 {
        wrap = <ul id="subMenu">|</ul>
        NO {
            doNotShowLink = 1
            stdWrap2 {
                wrap >
                cObject = TEXT
                cObject {
                    typolink {
                        parameter.field = uid
                        returnLast = url
                    }
                    insertData = 1
                    wrap = <span data-href="|" class="link">{field:nav_title//field:title}</span>
                }
            }
        }

        IFSUB < .NO
        ACTIFSUB < .IFSUB
    }

    3 < .2
}

请尝试以下未经测试的代码:

lib.mainMenu = HMENU
lib.mainMenu {
    entryLevel = 1
    wrap = <ul id="dropDownMenu">|</ul>

    1 = TMENU
    1 {
        noBlur = 1
        expAll = 1

        NO = 1
        NO {
            wrapItemAndSub = <li class="nochildren">|</li>
            stdWrap2.wrap = <span>|</span>
        }

        ACT < .NO
        ACT.wrapItemAndSub = <li class="active nochildren">|</li>

        # if has children
        IFSUB < .NO
        IFSUB.wrapItemAndSub = <li class="haschildren">|</li>
        IFSUB.allWrap = |

        # if has children and is active
        ACTIFSUB < .IFSUB
        ACTIFSUB.wrapItemAndSub = <li class="active haschildren">|</li>
        ACTIFSUB.allWrap = |
    }

    2 < .1    
    2 {
        wrap = <ul id="subMenu">|</ul>
        NO {
            doNotShowLink = 1
            stdWrap2 {
                wrap >
                cObject = TEXT
                cObject {
                    typolink {
                        parameter.field = uid
                        returnLast = url
                    }
                    insertData = 1
                    wrap = <span data-href="|" class="link">{field:nav_title//field:title}</span>
                }
            }
        }

        IFSUB < .NO
        ACTIFSUB < .IFSUB
    }

    3 < .2
}

以上答案只在没有挂载点的情况下有效。一旦页面树中有装入点,这些链接将无法正确生成

要强制Humenu在使用挂载点时输出没有周围a标记和页面标题的普通URL,您需要定义Humenu的IProcFunc属性

我已经编写了一个小方法,可以通过IProcFunc调用它,它将删除a标记并用链接的URL替换页面标题

<?php

class UserFuncUtils {

    /**
     * Modifies sitemap links. Whith this modification, a menu will only generate a plain url instead of an <a>-Tag
     *
     * This is an IProcFunc for a HMENU. The only parameter supplied by this method call is $this->I from the
     * Menu ContentObject. The function call expects a modified $I array to be returned.
     */
    function IProcFunc_plainURL($I) {
        // Show what $I has to offer
        // print \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($I, NULL, 8, FALSE, FALSE, FALSE, array(), array());

        // Remove opening and closing tags and replace title with href attribute. This results in a plain URL being rendered by the menu
        $I['parts']['ATag_begin'] = '';
        $I['parts']['ATag_end'] = '';
        $I['parts']['title'] = $I['linkHREF']['HREF'];

        return $I;
    }
}

?>
然后将HMENU的IProcFunc属性设置为指向此用户函数

lib.mainMenu = HMENU
lib.mainMenu.IProcFunc = UserFuncUtils->IProcFunc_plainURL

这应该可以解决问题。

以上答案只在没有挂载点的情况下有效。一旦页面树中有装入点,这些链接将无法正确生成

要强制Humenu在使用挂载点时输出没有周围a标记和页面标题的普通URL,您需要定义Humenu的IProcFunc属性

我已经编写了一个小方法,可以通过IProcFunc调用它,它将删除a标记并用链接的URL替换页面标题

<?php

class UserFuncUtils {

    /**
     * Modifies sitemap links. Whith this modification, a menu will only generate a plain url instead of an <a>-Tag
     *
     * This is an IProcFunc for a HMENU. The only parameter supplied by this method call is $this->I from the
     * Menu ContentObject. The function call expects a modified $I array to be returned.
     */
    function IProcFunc_plainURL($I) {
        // Show what $I has to offer
        // print \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($I, NULL, 8, FALSE, FALSE, FALSE, array(), array());

        // Remove opening and closing tags and replace title with href attribute. This results in a plain URL being rendered by the menu
        $I['parts']['ATag_begin'] = '';
        $I['parts']['ATag_end'] = '';
        $I['parts']['title'] = $I['linkHREF']['HREF'];

        return $I;
    }
}

?>
然后将HMENU的IProcFunc属性设置为指向此用户函数

lib.mainMenu = HMENU
lib.mainMenu.IProcFunc = UserFuncUtils->IProcFunc_plainURL

这应该可以做到。

链接应该只从第二级和第三级菜单级删除,还是也从第一级菜单级删除?@cascaval只从第二级和第三级菜单级删除,还是也从第一级菜单级删除?@cascaval只从第二级和第三级菜单级删除,这样做很有效。我只需要将nav_title//title更改为just title并添加NO.doNotShowLink=1。谢谢嗯,我把nav_title//title放在这里是因为如果为给定页面设置了导航标题,您可能确实希望该项目使用导航标题。我根据您的评论更改了答案。是的,这是正确的,但如果nav_title为空,它不应该返回到标题吗?我的是空的,但没有输出标题。没错!这就是它的工作原理。也许我把语法搞错了。你能试试{field:nav_title//field:title}吗?很好,它能用。我只需要将nav_title//title更改为just title并添加NO.doNotShowLink=1。谢谢嗯,我把nav_title//title放在这里是因为如果为给定页面设置了导航标题,您可能确实希望该项目使用导航标题。我根据您的评论更改了答案。是的,这是正确的,但如果nav_title为空,它不应该返回到标题吗?我的是空的,但没有输出标题。没错!这就是它的工作原理。也许我把语法搞错了。你能试试{field:nav_title//field:title}吗?