Skip to content

Instantly share code, notes, and snippets.

@a-am
Forked from boboldehampsink/SlugifyPlugin.php
Created April 23, 2014 15:05
Show Gist options
  • Save a-am/11218979 to your computer and use it in GitHub Desktop.
Save a-am/11218979 to your computer and use it in GitHub Desktop.
<?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();
}
}
<?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;
}
}
@a-am
Copy link
Author

a-am commented Apr 23, 2014

Use: {{ user.fullName | slugify }}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment