league/commonmark-ext-external-link

此软件包已被放弃,不再维护。作者建议使用 league/commonmark 软件包。

league/commonmark 扩展,为外部链接添加额外的类和 HTML 属性

资助软件包维护!
colinodell
Patreon

安装量: 8,426

依赖项: 0

推荐者: 0

安全: 0

星标: 4

关注者: 3

分支: 2

开放问题: 0

类型:commonmark-extension

v1.1.0 2020-04-04 14:20 UTC

This package is auto-updated.

Last update: 2020-04-04 14:22:14 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

已弃用

此扩展已被弃用。现在所有功能都包含在 league/commonmark 1.3+ 的 League\CommonMark\Extension\ExternalLink 命名空间中,因此您应升级到该版本并使用该捆绑扩展而不是此扩展。

概述

此扩展为 league/commonmark PHP Markdown 解析器 而设计,可以检测指向外部站点的链接并根据需要进行标记调整

  • 添加 rel="noopener noreferrer" 属性
  • 可选地添加任何自定义 HTML 类

安装

通过 Composer

$ composer require league/commonmark-ext-external-link

用法

按常规配置您的 环境,然后简单添加此软件包提供的 ExternalLinkExtension

use League\CommonMark\CommonMarkConverter;
use League\CommonMark\Environment;
use League\CommonMark\Ext\ExternalLink\ExternalLinkExtension;

// Obtain a pre-configured Environment with all the CommonMark parsers/renderers ready-to-go
$environment = Environment::createCommonMarkEnvironment();

// Add this extension
$environment->addExtension(new ExternalLinkExtension());

// Set your configuration
$config = [
    'external_link' => [
        'internal_hosts' => 'www.example.com',
        'open_in_new_window' => true,
        'html_class' => 'external-link',
    ],
];

// Instantiate the converter engine and start converting some Markdown!
$converter = new CommonMarkConverter($config, $environment);
echo $converter->convertToHtml('I successfully installed the https://github.com/thephpleague/commonmark-ext-external-link extension!');

配置

此扩展在 external_link 配置下支持三个配置选项

internal_hosts

此选项定义了白名单中的主机,这些主机被视为非外部,不应接受外部链接处理。

这可以是一个单个主机名,如 'example.com',必须完全匹配。

如果您需要匹配子域名,请使用正则表达式,如 '/(^|\.)example\.com$/'。注意,您必须使用 / 字符分隔您的正则表达式。

此配置选项还接受多个字符串和/或正则表达式的数组

$config = [
    'external_link' => [
        'internal_hosts' => ['foo.example.com', 'bar.example.com', '/(^|\.)google\.com$/],
    ],
];

默认情况下,如果没有提供此选项,则所有链接都将被视为外部链接。

open_in_new_window

此选项(默认为 false)确定是否应在新标签页/窗口中打开任何外部链接。

html_class

此选项允许您提供一个包含一个或多个要添加到外部链接 <a> 标签的 HTML 类的 string:默认情况下不添加任何类。

高级渲染

当检测到外部链接时,ExternalLinkProcessor 将将 external 数据选项设置在 Link 节点中为 truefalse。因此,您可以创建一个 自定义链接渲染器,该渲染器检查此值并相应地处理

class MyCustomLinkRenderer implements InlineRendererInterface
{

    /**
     * @param Link                     $inline
     * @param ElementRendererInterface $htmlRenderer
     *
     * @return HtmlElement
     */
    public function render(AbstractInline $inline, ElementRendererInterface $htmlRenderer)
    {
        if (!($inline instanceof Link)) {
            throw new \InvalidArgumentException('Incompatible inline type: ' . \get_class($inline));
        }

        if ($inline->getData('external')) {
            // This is an external link - render it accordingly
        } else {
            // This is an internal link
        }
        
        // ...
    }
}

变更日志

有关最近更改的更多信息,请参阅 变更日志

测试

$ composer test

安全

如果您发现任何与安全相关的问题,请通过电子邮件 colinodell@gmail.com 而不是使用问题跟踪器来报告。

鸣谢

许可

此库采用 BSD-3 许可协议。有关更多信息,请参阅 许可文件