2013-12-26 6 views
2

Вот что мой HTML код выглядит следующим образом:Как связать помеченное помехой слово в тексте (например, это #RandomWord) с использованием TWIG?

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

я там любой фильтр можно использовать для linkify любой хеш-меченого слово в содержание поста, используя Twig? Или я должен использовать JavaScript для этой работы?

ответ

4

Вы можете использовать тот же метод на основе регулярного выражения, который использует этот плагин jQuery linkify, только что реализованный в PHP вместо JavaScript.

Вам может понадобиться настроить это немного, но это должно выглядеть примерно так (шаблонный для TWIG плагин на основе http://symfony.com/doc/current/cookbook/templating/twig_extension.html):

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

Вы можете использовать расширение прут с методом, который будет linkify ваш хэш-меченого слово

первым создать расширение:

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() }} 

использование может использовать полный текст, в соответствии с тем, что вы будете реализовывать в методе.

наслаждаться !!

 Смежные вопросы

  • Нет связанных вопросов^_^