У меня есть некоторые вопросы, касающиеся маршрутизации с помощью Codeigniter. Теперь я делаю следующее:
$route['articles/(:num)'] = 'articles/view/$1'; // $1 will contain an ID
Это означает, что example.com/articles/123 отлично работает и загружает статью с идентификатором 123. Но я также хочу иметь возможность добавить заголовок статьи в URL (для SEO). Пример: example.com/articles/123/article-title
То, что я хочу, почти то же самое, что и Stack Overflow: stackoverflow.com/questions/123/the-title
Как я могу это сделать?
Мне также интересно, как работает Stack Overflow. Если я перейду к stackoverflow / questions / 111, заголовок будет автоматически добавлен в url. Это делается с помощью php redirect ()?
Я сделал что-то подобное в прошлом; Я не могу это узнать, но IIRC (это было несколько месяцев назад). Вы можете использовать маршрут, как и вы, а также добавить более конкретный, например
$route['articles/(:num)/(:any)'] = 'articles/view/$1/$2'; $route['articles/(:num)'] = 'articles/view/$1';
Как вы можете видеть, обе карты относятся к одному и тому же методу, который является своего рода «перегруженным»; вы можете восполнить недостающий параметр, используя значение по умолчанию:
function articles($id,$slug = FALSE) { }
и просто игнорируйте второй параметр в поиске статьи.
Что касается добавления названия, вы можете:
url_title($title,'dash',TRUE)
(в помощнике url), которая берет $title
, использует dash
как разделитель и делает ее строчной; Что касается того, как показать слизню даже при использовании URL без нее, вы можете сделать, как вы догадались, перенаправление, но поскольку оба маршрута указывают на один и тот же метод, это ничего не изменит для вас.
О, э-э, будьте осторожны с циклами при вызове перенаправления, проверьте внимательно;)
Я предлагаю вам создать поле пули в вашей таблице и заполнить его URL-адресом, который вы хотите использовать как id. Позволь мне объяснить.
У вас есть эта таблица
id title slug
когда вы сохраняете статью в своем db, вы можете динамически создавать пул, например:
id: 1 title: My first post slug: 1-my-first-post
то вы можете использовать идентификатор объявления (в данном случае 1-мой-первый-пост) для страницы, вы можете назвать это:
www.example.com/articles/1-my-first-post
obviusly вам нужно справиться с этим в своем db slect
Как мы обсуждали в комментариях.
Вы можете создать маршрут несколько раз и с разными параметрами, например:
$route['articles/(:num)/(:any)'] $route['articles/(:num)']
Я бы создал функцию с перенаправлением, добавив или не назвав ее.
Надеюсь, поможет.