如何使用TWIG链接文本中的哈希标记词(例如,这是#RandomWord)?

时间:2013-12-26 01:38:51

标签: php html symfony twig hashtag

以下是我的HTML代码:

<div class="post-content">
    <p>
       {{post.content}}
    </p>
</div>

我是否有任何过滤器可用于使用TWIG链接帖子内容中任何带有哈希标记的单词?或者我必须使用JavaScript来完成这项工作?

2 个答案:

答案 0 :(得分:4)

您可以使用此jQuery linkify插件使用的基于正则表达式的方法,仅使用PHP而不是JavaScript实现。

您可能需要稍微调整一下,但它看起来应该是这样的(基于http://symfony.com/doc/current/cookbook/templating/twig_extension.html的TWIG插件的样板):

class LinkifyExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            'linkify' => new \Twig_Filter_Method($this, 'linkifyFilter', array('pre_escape' => 'html', 'is_safe' => array('html'))),
        );
    }

    public function linkifyFilter($text)
    {
        $pattern = "/\B#(\w+)/";
        $replacement = "<a href=\"HASHTAG_BASE_URL/$1\">#$1</a>";
        return preg_replace($pattern, $replacement, $text);
    }

    public function getName()
    {
        return 'linkify_extension';
    }
}

注册扩展程序后,您可以像这样使用它:

{{post.content | linkify}}

答案 1 :(得分:1)

您可以使用一个twig扩展名,该方法可以链接您的哈希标记词

首先创建一个扩展名:

class PostExtension extends \Twig_Extension {

    protected $loader;
    protected $controller;

    public function __construct(FilesystemLoader $loader)
    {
        $this->loader = $loader;
    }

    public function setController($controller)
    {
        $this->controller = $controller;
    }

    /**
     * {@inheritdoc}
     */
    public function getFunctions()
    {
        return array(
            'hashTag' => new \Twig_Function_Method($this, 'hashtag', array('is_safe' => array('html'))),);
    }

    public function($word) {
        return // linkify word here
    }
}

第二:

将您的扩展程序添加为服务

  <service id="twig.extension.blogExtension" class="link\to\BlogExtension" public="false">
        <tag name="twig.extension" />
        <argument type="service" id="twig.loader" />
    </service>

最后:

将其用作过滤器:

{{ word|hasgtag() }}

使用可以使用全文,根据您在方法中实现的内容。

享受!!