簡體   English   中英

nofollow links 與 tca 的鏈接向導

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM