2012-03-28 4 views
0

Я создал своего рода CMS с помощью CodeIgniter. Он загружает содержимое страницы из базы данных в зависимости от текста slug, переданного в параметре URL, например, например. о, услуги, контакты.Как загрузить страницу с помощью контроллера Codeigniter?

В коде контроллера, я переназначил метод индекса, чтобы взять slug как параметр к нему, поскольку методы индекса по умолчанию не позволяют параметры. Проверьте код моего page контроллера на ссылку ниже:

http://pastebin.com/MwsVzRwQ

Как это работает, я поставил page контроллер для загрузки по умолчанию. Таким образом, каждый раз, когда я открываю свой сайт, как этот

http://www.mysite.com

он загружает контроллер, как этот

http://www.mysite.com/page

Если мы переходим слизняка к нему, он загружает содержимое страницы этого слизняка из базы данных, как этот

http://www.mysite.com/page/about http://www.mysite.com/page/portfolio

Если мы не пропустим слизню, он загрузит домашнюю страницу.

Теперь, что я хочу сделать, я не хочу, чтобы этот текст «страницы» отображался в URL-адресе. Поэтому страницы должны открываться как этот

http://www.mysite.com/about

http://www.mysite.com/portfolio

Я предполагаю, что это будет возможно через URL переписывания. Я уже переписал URL-адрес для удаления index.php из URL-адреса, который обычно выполняется для всех веб-сайтов Codeigniter. Ниже приведен код моего файла .htaccess

RewriteEngine on 

RewriteCond $1 !^(index\.php|uploads|fckeditor|assets|robots\.txt) 

RewriteRule ^(.*)$ /jobsite/index.php/$1 [L] 

Теперь вопрос, как я могу сделать URL работать следующим

http://www.mysite.com/about

http://www.mysite.com/portfolio

Заранее спасибо.

ответ

3

Просто добавьте это в ваш конфигурационный/routes.php файла:

$route[':any'] = 'your_controller'; 

Тогда в * your_controller *, вы можете получить доступ к сегменту URI с:

$this->uri->segment(1); 

После того, как у вас есть сегмент URI , вы можете запросить БД для него и отправить данные в свое представление. Если сегмент URI пуст, загрузите домашнюю страницу.

+0

gr8, это сработал. как я могу добавить исключение для некоторых контроллеров, таких как/admin_panel,/order_manager и т. д. – aslamdoctor

+0

@aslamdoctor из документации CI: «Маршруты будут выполняться в том порядке, в котором они определены. Более высокие маршруты всегда будут иметь приоритет над более низкими». Если это сработало, вы хотите принять его как правильный ответ? :) – yrosen

+0

, конечно, принимаем. но если вы можете помочь мне с этой вещью admin_panel, это будет оценено :) – aslamdoctor

0

ОК, так что я буду делать то, что предлагает yRosen, с немного различий и, как упоминалось в правильном порядке:

Первый контроллер админ потом все остальное:

$route['admin_panel/user_manager/(:any)'] = "admin_panel/user_manager/$1"; 
$route['admin_panel/pages_manager/(:any)'] = "admin_panel/pages_manager/$1"; 
$route['admin_panel'] = "admin_panel"; 

$route['(:any)'] = "pages/$1"; 

Еще одна вещь, которую я обычно рассматриваю при создании сложного сайта или слишком много играл с URL-адресами, - это добавить администратора на отдельный хост. Вы резервируете «www.myhost.com» для публичной стороны и используете «admin.myhost.com» для части администратора. Конечно, тогда ему нужны 2 установки CI и небольшое дублирование моделей, но это может сэкономить время и повысить безопасность.

Смежные вопросы