Автоформирование URL (ЧПУ) на основании названия
Добрый день!
Чуть запутался с вопросом, помогите распутаться.
Есть каталог товаров, у каждого товара своё название (поле name) на латинице, кириллице или всё вместе. И есть поле url, в котором хранить красивый ЧПУ URL. Есть три сценария:
1) Пользователь сам заполняет как name, так и url и мы не ломаем голову.
2) Пользователь заполнил name (как обязательное поле), но url оставил пустым. Тут нам необходимо, чтобы система сформировала url автоматически основываясь на названии (по принципам ЧПУ - транслит, обработка пробелов и спец. символов).
3) Пользователь редактирует поле url, при это есть вероятность того, что он оставит поле пустым.
По второму сценарию, как я понял, необходимо:
В модели через beforeInsert как-то поймать url и поняв что передана пустая строка, поймать name, пропустить через условную функцию generate_url() и положить новый url в базу. При это не забыв проверить уникальность сгенерированного url.
По третьем сценарию, как я понял, необходимо:
По сути ничего не делаем.
Благодаря настройке array("unique" => true) система сама проверит уникальность поля. Однако если передана пустая строка (пользователь стёр данные) - повторяем алгоритм из предыдущего сценария.
Главный вопрос — как это всё же грамотнее реализовать? Верно ли использовать функции beforeInsert и beforeUpdate и как правильнее будет "поймать" переданные name и url, а так же перезаписать их в случае необходимости?
Артём, добрый день, если я все правильно понял, речь идет о работе в админке. Там есть такие возможности
1. Атрибут translit_from для поля url очень удобный, он ставит иконку для генерации ЧПУ
http://mv-framework.ru/spetcialnye-strokovye-url-redirect-email-phone/
2. array("unique" => true) работает при валидации формы и действительно проверяет значение на уникальность, но если будет пустая строка, то она ее так пропустит. Это можно компенсировать тем, что сделать поле url обязательным для заполнения. Вместе с 1. должно быть эффективно.
3. Если применять beforeCreate/beforeUpdate, то там можно поймать значение url, если оно пустое то сгенерировать его при помощи функции I18n :: translitUrl($name), проверить на уникальность методом $this -> countRecords(array("url" => $value)) и потом вернуть значение для вставки в базу как описано тут http://mv-framework.ru/nastroika-modeli/
Спасибо за исчерпывающий ответ, изучу. Подскажите, планируется ли какое-то обновление продукта? Добавление нового функционала.
Да, в ближайшие месяцы планируется новая версия системы, основной упор там будет на обновление интерфейса админки, появление тем оформления. Документация постоянно пополняется, а основной упор всегда идет на полную обратную совместимость и стабильность.