2012-05-26 23 views
8

Symfony1 hatte eine Hilfsfunktion namens auto_link_text(), die einen Textblock analysierte und alle Text-URLs in <a>-Tags umwandelte und automatisch das href-Attribut ausfüllte.Enthält Twig einen Filter zum automatischen Verknüpfen von Text?

Enthält Twig eine Funktion wie diese? Ich habe auf Google gesucht und den Code durchgesehen, kann aber keinen finden. Ich kann natürlich selbst eins programmieren, möchte aber nicht etwas replizieren, wenn es schon da ist.

Wenn ich selbst eins code, sollte es eine Funktion oder ein Filter sein?

Antwort

14

die Funktion im Zweig nicht existiert, aber Sie können sogar Ihre eigenen Erweiterungen Zweig hinzu:

class AutoLinkTwigExtension extends \Twig_Extension 
{ 

    public function getFilters() 
    { 
     return array('auto_link_text' => new \Twig_Filter_Method($this, 'auto_link_text', array('is_safe' => array('html'))), 
     ); 
    } 

    public function getName() 
    { 
     return "auto_link_twig_extension"; 
    } 

    static public function auto_link_text($string) 
    { 

     $regexp = "/(<a.*?>)?(https?)?(:\/\/)?(\w+\.)?(\w+)\.(\w+)(<\/a.*?>)?/i"; 
     $anchorMarkup = "<a href=\"%s://%s\" target=\"_blank\" >%s</a>"; 

     preg_match_all($regexp, $string, $matches, \PREG_SET_ORDER); 

     foreach ($matches as $match) { 
      if (empty($match[1]) && empty($match[7])) { 
       $http = $match[2]?$match[2]:'http'; 
       $replace = sprintf($anchorMarkup, $http, $match[0], $match[0]); 
       $string = str_replace($match[0], $replace, $string); 
      } 
     } 

     return $string; 
    } 
} 
+0

Diese Lösung scheint für mich falsch zu funktionieren, wenn die URL bereits ein Präfix "http: //" hat. In diesem Fall wird der resultierende href etwa so aussehen: http: // http: // google.com. Was es für mich repariert hat, war, das dritte Argument '$ match [0]' zu ersetzen, um sprintf mit '$ match [4] zu ersetzen. $ Übereinstimmung [5]. "." . $ match [6] '. –

10

Wenn Sie Zweig innerhalb von Symfony2 verwenden, gibt es ein Bündel dafür: https://github.com/liip/LiipUrlAutoConverterBundle

Wenn Sie es außerhalb von Symfony2 verwenden, können Sie einen PR senden, um das Bundle und die Zweig-Erweiterung zu entkoppeln!

+0

Thx, das ist ein wirklich cooles Bundle –

Verwandte Themen