Как сделать url slug, как Quora, используя схему Yii?
Использование Quora заставило меня задуматься, как они делают свой slug как thes: quora.com/topics-slugs, quora.com/questions-slug или quora.com/usernames-slug.
На самом деле я разрабатываю приложение с фреймворком yii, и я хочу, чтобы у него были такие пули, как quora?
Спасибо, ребята,
- Обращайтесь к любым специальным символам, которые вы хотите использовать (например, Umlauts)
Удалите оставшиеся символы без альфа-цифры
обрабатывать белые пробелы
Что-то вроде этого:
function _getSlugFromName($name){
return preg_replace('#[\s]+#','-',preg_replace('#[^\d\w -]*#','',str_replace(array('ä','ü','ö','ß'),array('ae','ue','oe','ss'),html_entity_decode(mb_strtolower(trim($name),'UTF-8'),ENT_COMPAT,'UTF-8'))));
}
Вы также можете сделать это с помощью правил перезаписи. Правило, подобное этому в вашем файле конфигурации:
'controller/<slug:[\w\-]+>'=>'controller/view',
примет такой URL-адрес:
controller/my-slug
и он будет перенаправлен на actionView() в вашем контроллере и передаст slug ( "my-slug" ) в виде переменной $_GET. С этим правилом перезаписи вы теперь вызываете $_GET ['slug'], и он вернет "my-slug" из URL-адреса.
У меня есть строка "slug" в качестве первичного ключа, поэтому я просто запрашиваю DB для $_GET ['slug'] в моем actionView(), и я получаю правильную запись на основе URL. Работает как шарм. Удачи!
UPDATE
Чтобы избавиться от префикса контроллера в дополнение к использованию slug, вам, вероятно, понадобится одна большая таблица для отслеживания всех URL-адресов (для предотвращения дублирования). Если у вас есть это, вы можете сделать несколько разных вещей:
1 Переопределите onBeginRequest, чтобы выполнить поиск в таблице мастер-slug, чтобы выяснить, какой контроллер вызывать.
2. Используйте мастер-переписывание для одного ActionIndex в SiteController и в этом действии найдите пул в главной таблице, чтобы выяснить, какой контроллер/действие нужно отправить пользователю. Правило rewrite будет выглядеть примерно так:
'<slug:[\w\-]+>'=>'site/index',
Это может вам помочь: dburlmanager
Предоставляет динамические правила URL на основе баз данных. Динамические правила URL на основе базы данных (довольно постоянные ссылки или дружественные URL-адреса)
Эти динамические правила похожи на Wordpress "красивые постоянные ссылки" или "дружественные URL-адреса". Вам не нужно иметь имя контроллера (или ID) в URL-адресе: это расширение может обрабатывать URI-запрос и перенаправлять его на правильный контроллер.