繁体   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