以下是我的HTML代码:
<div class="post-content">
<p>
{{post.content}}
</p>
</div>
我是否有任何过滤器可用于使用TWIG链接帖子内容中任何带有哈希标记的单词?或者我必须使用JavaScript来完成这项工作?
答案 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() }}
使用可以使用全文,根据您在方法中实现的内容。
享受!!