Typoscript:如何向 RTE 中的所有链接添加参数?
Typoscript: how do I add a parameter to all links in the RTE?
我想给用户在 RTE 中输入的 alllink 添加一个参数。
我最初的想法是这样做的:
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
这听起来不错——只要 link 没有 已经 有一个查询字符串!
在那种情况下,我显然在 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 是否已经有查询字符串来使用正确的语法添加我的参数?谢谢!
测试是否出现“?”字符已经在 URL 中并附加“?”或“和”,然后附加您的键值对。有一个 CASE object available in the TypoScript Reference,其中有一个示例,您可以根据自己的目的进行修改。
这就是解决方案:
lib.parseFunc_RTE.tags.link {
typolink.additionalParams = &flavor=lemon
}
请注意,它必须以 & 开头,错别字会生成有效的 link。 link 中的参数如果配置相应,也将使用 realURL 进行解析。
编辑:如文档 https://docs.typo3.org/typo3cms/TyposcriptReference/Functions/Typolink/Index.html
中所述,上述解决方案仅适用于内部 links
我看到的适用于所有 link 的唯一解决方案是使用 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
变量
对于任何感兴趣的人,这里有一个使用 Typoscript 的 replacement
功能对我有用的解决方案。希望这有帮助。
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 () + our string
replace =?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
}
}
我想给用户在 RTE 中输入的 alllink 添加一个参数。
我最初的想法是这样做的:
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
这听起来不错——只要 link 没有 已经 有一个查询字符串! 在那种情况下,我显然在 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 是否已经有查询字符串来使用正确的语法添加我的参数?谢谢!
测试是否出现“?”字符已经在 URL 中并附加“?”或“和”,然后附加您的键值对。有一个 CASE object available in the TypoScript Reference,其中有一个示例,您可以根据自己的目的进行修改。
这就是解决方案:
lib.parseFunc_RTE.tags.link {
typolink.additionalParams = &flavor=lemon
}
请注意,它必须以 & 开头,错别字会生成有效的 link。 link 中的参数如果配置相应,也将使用 realURL 进行解析。
编辑:如文档 https://docs.typo3.org/typo3cms/TyposcriptReference/Functions/Typolink/Index.html
中所述,上述解决方案仅适用于内部 links我看到的适用于所有 link 的唯一解决方案是使用 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
变量
对于任何感兴趣的人,这里有一个使用 Typoscript 的 replacement
功能对我有用的解决方案。希望这有帮助。
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 () + our string
replace =?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
}
}