#codeigniter #friendly-url
#codeigniter #удобный url
Вопрос:
Я вроде как новичок в CodeIgniter.
Мне нужно разработать простой веб-сайт, на котором я извлекаю информацию из базы данных. Информация из базы данных касается рекламы. У меня есть информация о стране, зоне страны, местоположении зоны и виде рекламы.
Моя цель — иметь URI, подобный:
http://www.someurl.com/index.php/country/country_zone/zone_location/ad_type/title_of_ad
Есть какая-то информация о том, как это сделать с помощью CodeIgniter?
С наилучшими пожеланиями,
Комментарии:
1. CI Reactor поддерживает строки запросов — возможно, вам лучше обратить на это внимание, поскольку подобный URI может довольно быстро запутать, тогда как
?country=ukamp;zone=swamp;ad_type=fullamp;title=foo
, по крайней мере, имеет некоторое семантическое значение (возможно, также с точки зрения SEO, а также пользователя)2. Я думаю, для вас будет разумно показать, как на самом деле выглядит ваш текущий URL. Существует около миллиона способов сделать то, что вы просите, это будет зависеть от того, с чем вы работаете. Я бы также опубликовал ваш контроллер.
Ответ №1:
Я думаю, что самый простой способ — создать пользовательский маршрут в вашем application/config/routes.php
. Что-то вроде этого:
$route['^(:any)/(:any)/(:any)/(:any)/(:any)'] = "your_controller/get_ads/$1/$2/$3/$4/$5";
тогда ваша функция контроллера будет выглядеть примерно так:
function get_ads($country, $country_code, $zone_location, $ad_type, $title_of_ad) {
// your code
}
.. вы можете заменить (:any)
более конкретным регулярным выражением, если в аргументах есть какой-то шаблон.
Ответ №2:
первые 2 аргумента в вашей ссылке — это имя вашего контроллера и метод этого контроллера, который вы хотите вызвать.
итак
http://www.someurl.com/index.php/country/country_zone/zone_location/ad_type/title_of_ad
это означало бы, что вы вызываете country_zone
метод вашего country
контроллера и передаете zone_location, add_type и title_of_ad этому методу.
то, что вы хотите, это
http://www.someurl.com/index.php/TheControler/themethod/country/country_zone/zone_location/ad_type/title_of_ad
реализовано вот так:
class TheControler extends Controler{
function themethod($country,$country_zone,$zone_location,$ad_type,$title_of_ad){
//your code
}
}