9
votes

3 Réponses :


17
votes

La fonction n'existe pas dans la branche, mais vous pouvez même ajouter vos propres extensions à la branche:

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;
    }
}


1 commentaires

Cette solution semble fonctionner de manière incorrecte pour moi si l'URL dispose déjà d'un http: // préfixe. Dans ce cas, le HREF résultant sera quelque chose comme http: // http: //google.com . Ce qui est réparé pour moi, remplaçait la troisième argument $ match [0] à Sprintf avec $ match [4]. $ match [5]. "." . $ match [6] .



10
votes

Si vous utilisez Twig à l'intérieur de Symfony2, il y a un paquet pour cela: https://github.com/liip / Liipurlautoconverterbundle

Si vous l'utilisez en dehors de Symfony2, vous pouvez soumettre un PR à eux afin de découpler le paquet et la rallonge de la branche!


0 commentaires

3
votes

L'autre "réponse" énumérée est un peu obsolète et a des problèmes. Celui-ci fonctionnera dans les dernières versions de Symfony et comporte moins de problèmes xxx


0 commentaires