-
-
Save a-am/11218979 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Use: {{ user.fullName | slugify }}