如何在HMENU网站地图中包含指向翻译的链接?

时间:2018-11-15 22:37:48

标签: typo3 typoscript typo3-8.x

我想通过TypoScript创建一个站点地图,该站点地图还包括所有可用翻译的链接。 不幸的是, special = language 功能仅适用于当前页面,不适用于多个页面。 将常规HMENU与项目中的 special = language 菜单结合使用将是完美的选择。

我的方法:

lib.menu = HMENU
lib.menu {
    entryLevel = 0
    1 = TMENU
    1{
        expAll = 1
        NO{
            doNotShowLink = 1
            allWrap{
                postCObject = COA
                postCObject{
                    stdWrap.wrap = <url>|</url>
                    1 = TEXT
                    1{
                        typolink.parameter.field=uid
                        typolink.returnLast = url
                        wrap = <loc>|</loc>
                    }

                    2 < .1
                    2.typolink.additionalParams = &L=1
                    2.wrap = <xhtml:link rel="alternate" hreflang="en" href="|" />
                }
            }
        }
    }
    2 < .1
    3 < .1
}

这几乎可行,但不幸的是,还会为不可用的翻译生成链接。

2 个答案:

答案 0 :(得分:1)

您已经说过:您为不存在翻译的页面生成链接。
但是您可以选择使用条件。

添加stdWrap.if并检查该页面翻译是否存在:

postCObject {

    : as above

    2.if.isTrue.cObject = CONTENT
    2.if.isTrue.cObject {
        table = pages_languages_overlay
        select {
           # get records in current page
           pidInList.field = uid
           # ignore current language
           languageField = 0
           # build individual selection on language 1
           where = sys_language = 1
           selectFields = uid
        }
        renderObj = TEXT
        renderObj.field = uid
    }
}

答案 1 :(得分:1)

您可以使用键入选择查询来检查翻译的页面是否存在:

2.if.isTrue.numRows {
    table = pages_language_overlay
    select {
        languageField = 0
        where = sys_language_uid = 1
        pidInList.field = uid
    }
}

注意:languageField用于选择语言字段,我们需要禁用以便在where子句中设置sys_language_uid字段。要禁用languageField,我们需要设置languageField = 0。查看更多信息here