aj1215
11/7/2013 - 1:17 PM

Slugify Twig Extension - Use like this: {{ user.fullName | slugify }}. Uses Craft's core slug technology.

Slugify Twig Extension - Use like this: {{ user.fullName | slugify }}. Uses Craft's core slug technology.

<?php
namespace Craft;

class SlugifyTwigExtension extends \Twig_Extension
{
    protected $env;
    
    public function getName()
    {
        return 'Slugify Twig Extension';
    }
    
    public function getFilters()
    {
        return array('slugify' => new \Twig_Filter_Method($this, 'slugify'));
    }
    
    public function getFunctions()
    {
        return array('slugify' => new \Twig_Function_Method($this, 'slugify'));
    }
    
    public function initRuntime(\Twig_Environment $env)
    {
        $this->env = $env;
    }
    
    public function slugify($slug)
    {
        // Remove HTML tags
        $slug = preg_replace('/<(.*?)>/u', '', $slug);
        
        // Remove inner-word punctuation.
        $slug = preg_replace('/[\'"‘’“”]/u', '', $slug);
        
        // Make it lowercase
        $slug = mb_strtolower($slug, 'UTF-8');
        
        // Get the "words".  Split on anything that is not a unicode letter or number.
        // Periods are OK too.
        preg_match_all('/[\p{L}\p{N}\.]+/u', $slug, $words);
        $words = ArrayHelper::filterEmptyStringsFromArray($words[0]);
        $slug = implode('-', $words);
        
        return $slug;
    }
}
<?php
namespace Craft;

class SlugifyPlugin extends BasePlugin
{
    public function getName()
    {
        return Craft::t('Slugify Twig Extension');
    }
    
    public function getVersion()
    {
        return '1.0';
    }
    
    public function getDeveloper()
    {
        return 'Bob Olde Hampsink';
    }
    
    public function getDeveloperUrl()
    {
        return 'http://www.itmundi.nl';
    }
    
    public function hookAddTwigExtension()
    {
        Craft::import('plugins.slugify.twigextensions.SlugifyTwigExtension');
        
        return new SlugifyTwigExtension();
    }
}