2012-05-26 13 views
8

Symfony1 tenía una función auxiliar llamada auto_link_text(), que analizaba un bloque de texto y ajustaba todas las URL de texto en las etiquetas <a>, completando automáticamente el atributo href.¿Twig incluye un filtro para el texto de enlace automático?

¿Twig incluye una función como esta? Miré en Google y revisé el código, pero no puedo encontrar uno. Obviamente puedo codificar uno yo mismo, pero no quiero replicar algo si ya está allí.

Si configuro uno, ¿debería ser una función o un filtro?

Respuesta

14

la función no existe en la ramita, pero se puede incluso añadir sus propias extensiones a la ramita:

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

Esta solución parece funcionar incorrectamente para mí si la URL ya tiene un prefijo 'http: //'. En ese caso, el href resultante será algo así como 'http: // http: // google.com'. Lo que lo solucionó fue reemplazar el tercer argumento '$ match [0]' por sprintf con '$ match [4]. $ match [5]. "." . $ match [6] '. –

10

Si está utilizando rama interior de Symfony2, hay un paquete para que: https://github.com/liip/LiipUrlAutoConverterBundle

Si lo está usando fuera de Symfony2, ¡puede enviarles una RP para desacoplar el paquete y la extensión twig!

+0

Thx, este es un paquete realmente genial –

Cuestiones relacionadas