[英]nofollow links with link wizard of tca
是否有可能將 rel="nofollow" 添加到使用后端 tca 的鏈接向導創建的外部鏈接? (EG所有內容元素中的標題鏈接、圖像鏈接、頁面樹中的外部鏈接)。
我發現的唯一方法是 ck_editor 中的鏈接處理程序。
謝謝!
我分叉了擴展noopener
並進行了一些調整以允許 TypoScript 配置。 截至目前,TypoScript 尚未包括在內,但我在這里發布了選項:
config.tx_noopener {
useDefaultRelAttribute = false
relAttribute = nofollow
}
useDefaultRelAttribute
是 boolean (只有 false 或 0 觸發某些東西)。
relAttribute
可以是任何字符串,也可以是空格。
使用此 TypoScript 選項,可以針對特定頁面對其進行不同的配置。
該擴展程序可在此處獲得: https://github.com/DavidBruchmann/noopener 。
添加 TypoScript 后,我將對原始擴展發出拉取請求。
編輯:
如果您有權配置單個鏈接(如標題),您現在可以添加一個或多個帶有前綴rel-
的 css 類。 如果您啟用noopener
處理,這些類將用於創建rel
-Attribute。
此外,您可以配置是否應從類屬性中刪除類。
例子:
我在內容元素中添加了一個title
,並在下面的相應字段中添加了一個鏈接。 對於鏈接,我添加了這些類rel-nofollow rel-something col-right kunterbunt
。
這是 TypoScriptSetup:
config.tx_noopener {
useDefaultRelAttribute = false
# relAttribute = nofollow
useCssClass = 1
keepCssRelClass = 0
}
選項useCssClass
dis- or 完全啟用 css-class 處理。
keepCssRelClass
確定在用於 rel 屬性時是否應從類屬性中刪除該值。
另外,只有在根據此列表的 a 元素的允許值列表中,才接受 class-attribute 中的值:
https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types
我知道這個過濾器在某些情況下可能是不受歡迎的,比如使用其他關鍵字的燈箱,但不使用過濾器對我來說看起來有點可怕和不安全,因為它會使編輯器輸入所有內容。 但請記住,擴展noopener
僅用於外部鏈接,內部鏈接的使用通常是可能的,但會改變擴展的基本思想。
上面配置的鏈接的結果是這樣的:
<a rel="nofollow" href="..." class="rel-something col-right kunterbunt">...</a>
如您所見,css-class rel-nofollow
被轉移到rel
-attribute, rel-something
保持不變,因為它不在允許值列表中,並且其他 css-classes 無論如何都沒有rel
-prefix。
編輯
拉取請求可以在這里找到: https://github.com/georgringer/noopener/pull/6
首先解決您的問題而無需擴展我想到了 TypoScript lib.parseFunc
。
流體模板只是在沒有 function 的情況下解析,您必須調整模板。 查看 ViewHelper TypoLinkViewHelper
可以看到允許的 arguments 列表:
public function initializeArguments()
{
$this->registerArgument('parameter', 'string', 'stdWrap.typolink style parameter string', true);
$this->registerArgument('target', 'string', '', false, '');
$this->registerArgument('class', 'string', '', false, '');
$this->registerArgument('title', 'string', '', false, '');
$this->registerArgument('additionalParams', 'string', '', false, '');
$this->registerArgument('additionalAttributes', 'array', '', false, []);
$this->registerArgument('useCacheHash', 'bool', '', false, false);
$this->registerArgument('addQueryString', 'bool', '', false, false);
$this->registerArgument('addQueryStringMethod', 'string', '', false, 'GET');
$this->registerArgument('addQueryStringExclude', 'string', '', false, '');
$this->registerArgument('absolute', 'bool', 'Ensure the resulting URL is an absolute URL', false, false);
}
VH 中不存在external
一詞,因此我假設您必須對其進行擴展並使用您自己的 VH。 我從未詳細驗證用於這些目的的擴展程序在做什么,可能他們使用了一些鈎子或服務,因為他們可能永遠不需要更改模板。
我嘗試更改標題的部分模板並且它有效,只是缺少內部和外部鏈接之間的分隔,無需進一步更改。
模板文件位於typo3/sysext/fluid_styled_content/Resources/Private
中,您可以將它們復制到自己的擴展中並相應地更改默認位置。
<f:if condition="{header}">
<f:switch expression="{layout}">
<f:case value="1">
<h1 class="{positionClass}">
<f:link.typolink parameter="{link}">{header}</f:link.typolink>
</h1>
</f:case>
<f:case value="2">
<h2 class="{positionClass}">
<f:link.typolink parameter="{link}" additionalAttributes="{rel:'nofollow'}">{header}</f:link.typolink>
</h2>
</f:case>
...
因此,@Julian Hofmann 提出的擴展noopener的使用可能是最好和最聰明的解決方案。 如果您從不需要一些但一般的更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.