Мне нужно два улучшения для моих слизней:
Удаление специальных символов.
Преобразование гласных с метками ударения в гласные без меток.
Проблема в том, что мой сайт генерирует URL-адреса с такими ссылками, как:
https://example.net/Toronto/product/férula-dental-limpieza-con-ul
https://cuponclub.net/Toronto/product/lifting-de-pestañas
Эти специальные символы, такие как «é» и «ñ» в URL, как правило, проблематичны для меня по многим различным причинам, например, когда я интегрирую URL в API, которые я использую, или даже когда делюсь ссылками …
я использую CakePHP 1.2
, Вот как я реализую слагов в коде:
class Product extends AppModel{
..........
..........
..........
var $actsAs = array(
'Sluggable' => array(
'label' => array(
'short_name'
),
'length' => 30,
'overwrite' => false
)
);
..........
..........
..........
}
В базе данных 'short_name'
это поле, которое используется для генерации пули. Без CakePHP PHP уже предоставляет встроенные функции, такие как str_replace()
а также preg_replace()
и с помощью этих функций и регулярного выражения, такого как [^A-Za-z0-9\-]
Я мог удалить все специальные символы после замены всех пробелов дефисами. Но так как я использую CakePHP
Мне нужно использовать его синтаксис. я читал https://github.com/msadouni/cakephp-sluggable-plugin и я нашел эту информацию о label
:
метка: (массив | строка, необязательно) установить имя поля, которое содержит
строка, из которой создается слаг или набор имен полей для
объединить для генерации пули. ПО УМОЛЧАНИЮ: название
Можно лечить label
в виде строки и применять такие функции, как str_replace()
а также preg_replace()
к этому?
Учитывая, что используемый вами плагин не обновлялся последние 10 лет, я бы сказал, что можно с уверенностью предположить, что поддерживать его самостоятельно — ваш лучший вариант — если вы не хотите создать поведение с нуля то есть, что не должно быть очень трудно сделать либо
Итак, просто раскошелиться и внесите необходимые изменения или создайте собственное поведение. Я бы также посоветовал взглянуть на то, как последний CakePHP справляется с этим, см. Источник для \Cake\Utility\Text::slug()
. Если ваша установка PHP поддерживает это, то вы можете сделать бэкпорт, то есть использовать Функциональность транслитерации PHP обеспечивается расширением INTL.
Других решений пока нет …