Typoscript:如何在RTE中的所有链接中添加参数?

时间:2016-07-15 14:54:38

标签: typo3 typoscript typolink

我想为用户在RTE中输入的所有链接添加参数。

我最初的想法是这样做:

lib.parseFunc_RTE.tags.link {
    typolink.parameter.append = TEXT
    typolink.parameter.append.value = ?flavor=lemon
}

例如:

http://domain.com/mypage.php

变为

http://domain.com/mypage.php?flavor=lemon

这听起来很棒 - 只要链接不已经有查询字符串! 在这种情况下,我显然在URL中有两个问号

例如:

http://domain.com/prefs.php?id=1234&unit=moon&qty=300

变为

http://domain.com/prefs.php?id=1234&unit=moon&qty=300?flavor=lemon

有没有办法用正确的语法添加我的参数,具体取决于URL是否已经有查询字符串?谢谢!

3 个答案:

答案 0 :(得分:2)

那将是解决方案:

lib.parseFunc_RTE.tags.link {
    typolink.additionalParams = &flavor=lemon
}

请注意,它必须以&,typo3开头,然后生成有效链接。如果相应配置,链接中的参数也将使用realURL进行解析。

编辑:以上解决方案仅适用于文档https://docs.typo3.org/typo3cms/TyposcriptReference/Functions/Typolink/Index.html

中所述的内部链接

我看到的唯一适用于所有链接的解决方案是使用userFunc

lib.parseFunc_RTE.tags.link {
    typolink.userFunc = user_addAdditionalParams
}

然后你需要创建一个php脚本并在你的TS中加入:

includeLibs.rteScript = path/to/yourScript.php

请记住,includeLibs已经过时,所以如果你使用TYPO3 8.x(可能是7.3+),你需要创建一个只包含几个文件的自定义扩展

<?php

function user_addAdditionalParams($finalTagParts) {
    // modify the url in $finalTagParts['url']
    // $finalTagParts['TYPE'] is an indication of link-kind: mailto, url, file, page, you can use it to check if you need to append the new params
    switch ($finalTagParts['TYPE']) {
        case 'url':
        case 'file':
            $parts = explode('#', $finalTagParts['url']);
            $finalTagParts['url'] = $parts[0] 
                . (strpos($parts[0], '?') === false ? '?' : '&') 
                . 'newParam=test&newParam=test2'
                . ($parts[1] ? '#' . $parts[1] : '');
        break;
    }
    return '<a href="' . $finalTagParts['url'] . '"' .
           $finalTagParts['targetParams'] .
           $finalTagParts['aTagParams'] . '>'
}

PS:我还没有测试过实际的php代码,所以它可能会有一些错误。如果您遇到麻烦,请尝试调试$finalTagParts变量

答案 1 :(得分:1)

测试是否“?”字符已经在URL中并附加“?”或“&amp;”,然后附加你的键值对。有一个CASE object available in the TypoScript Reference,你可以根据自己的目的修改一个例子。

答案 2 :(得分:1)

对于任何有兴趣的人,这里有一个使用Typoscript的app.js功能为我工作的解决方案。希望这会有所帮助。

replacement