Как сделать URL-слаг, как Quora делает с помощью Yii Framework? - PullRequest
1 голос
/ 04 октября 2010

Использование Quora заставило меня задуматься, как они справляются со своей задачей, например: quora.com/topics-slugs, quora.com/questions-slug или quora.com/usernames-slug.

На самом деле я занимаюсь разработкой приложения с использованием инфраструктуры yii и хочу иметь слагов, как это делает quora?

Спасибо, ребята

Ответы [ 3 ]

2 голосов
/ 04 октября 2010

Вы также можете сделать это с помощью правил перезаписи.Подобное правило в вашем конфигурационном файле:

'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.Работает как шарм.Удачи!

ОБНОВЛЕНИЕ Чтобы избавиться от префикса контроллера в дополнение к использованию слагов, вам, вероятно, понадобится одна большая таблица для отслеживания всех слагов URL (для предотвращения дублирования).Если у вас это есть, то вы можете сделать несколько разных вещей:

1 Переопределить onBeginRequest , чтобы выполнить поиск в главной таблице слагов, чтобы выяснить, какой контроллер вызывать.2. Используйте мастер-перезапись для единственного ActionIndex в SiteController, и в этом действии найдите слаг в главной таблице, чтобы выяснить, в какой контроллер / действие отправить пользователя.Правило переписывания будет выглядеть примерно так:

'<slug:[\w\-]+>'=>'site/index',
1 голос
/ 23 февраля 2011

Это может вам помочь: dburlmanager

Предоставляет динамические правила URL на основе базы данных. Динамические правила URL, основанные на базе данных (довольно постоянные ссылки или дружественные URL)

Эти динамические правила похожи на «красивые постоянные ссылки» Wordpress или «дружественные URL». Вам не нужно указывать имя контроллера (или идентификатор) в URL: это расширение может обрабатывать URI запроса и направлять его на правильный контроллер.

1 голос
/ 04 октября 2010
  1. Обрабатывайте любые специальные символы, которые вы хотите использовать (например, умлауты)
  2. Удалите все оставшиеся не буквенно-цифровые символы
  3. обрабатывать пробелы

Примерно так:

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'))));
}
...