1

我想为用户在 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 是否已经有查询字符串?谢谢!

4

3 回答 3

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变量

于 2016-07-26T12:14:06.013 回答
1

测试是否“?” 字符已在 URL 中并附加“?” 或“&”,然后附加您的键值对。TypoScript Reference 中有一个CASE 对象,您可以根据需要修改一个示例。

于 2016-07-16T19:41:54.967 回答
1

对于任何感兴趣的人,这里有一个使用replacementTyposcript 的功能对我有用的解决方案。希望这可以帮助。

lib.parseFunc_RTE.tags.link {

    # Start by "replacing" the whole URL by itself + our string
    # For example: http://domain.com/?id=100    becomes http://domain.com/?id=100?flavor=lemon
    # For example: http://domain.com/index.html becomes http://domain.com/index.html?flavor=lemon

    typolink.parameter.stdWrap.replacement.10 {

        #this matches the whole URL
        search = #^(.*)$#i

        # this replaces it with itself (${1}) + our string
        replace =${1}?flavor=lemon

        # in this case we want to use regular expressions
        useRegExp = 1
    }

    # After the first replacement is done, we simply replace
    # the first '?' by '?' and all others by '&'
    # the use of Option Split allow this
    typolink.parameter.stdWrap.replacement.20 {
        search = ?
        replace = ? || & || &
        useOptionSplitReplace = 1
    }

}
于 2016-07-29T17:04:02.750 回答