Удалите специальные символы и преобразуйте гласные с метками ударения в гласные без меток акцента в слагах CakePHP - PullRequest
0 голосов
/ 05 ноября 2018

Мне нужно два улучшения для моих слизней:

  1. Удаление специальных символов.

  2. Преобразование гласных с метками ударения в гласные без меток.

Проблема в том, что мой веб-сайт генерирует 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:

метка: (массив | строка, необязательно) устанавливается на имя поля, которое содержит строка, из которой создается слаг, или набор имен полей для объединить для создания пули. ПО УМОЛЧАНИЮ: title

Можно ли рассматривать label как строку и применять к ней такие функции, как str_replace() и preg_replace()?

1 Ответ

0 голосов
/ 06 ноября 2018

Учитывая, что используемый вами плагин не обновлялся последние 10 лет, я бы сказал, что можно с уверенностью предположить, что поддерживать его самостоятельно - ваш лучший вариант - если вы не хотите создать поведение с нуля то есть, что не должно быть очень трудно сделать либо

Итак, просто раскошелиться и внесите необходимые изменения или создайте пользовательское поведение. Я бы также посоветовал взглянуть на то, как последние CakePHP справляются с этим, см. Источник для \Cake\Utility\Text::slug(). Если ваша установка PHP поддерживает это, то вы можете захотеть сделать бэкпорт, т.е. использовать функциональность транслитерации PHP * , предоставляемую расширением INTL.

...