Я перестраиваю сайт с PHP-кодом, который содержит в основном статические страницы, а некоторые динамические страницы перемежаются. Проблема в том, что страницы находятся на глубине 1-5 слоев внутри навигации (например, example.com/about/history/people/person/photos).PHP Codeigniter Многоуровневые коммутаторы уровня
Я не уверен, как реализовать это в контроллере. У меня в настоящее время есть сумасшедший набор операторов switch, вложенных в операторы switch. Вот простой пример:
class About extends MY_Controller
{
//**** INDEX page ****
public function index()
{
$this->setTitle('About');
$this->setDescription('About Stuff');
$this->loadView('about/index');
}
//-------------------------HISTORY section--------------------------------
public function history($sub1 = "", $sub2 = "", $sub3 = "", $sub4 = "")
{
$path = "";
switch($sub1){
//_____ PEOPLE section ____
case 'people':
switch($sub2){
//____ PERSON section ____
case 'person':
switch($sub3){
//**** PHOTOS page ****
case 'photos':
$this->setTitle('Photos');
$this->setDescription('Photo stuff');
$path = 'people/person/photos';
break;
//**** DOCUMENTS page ****
case 'documents':
//Load special scripts
$this->setTitle('Documents');
$this->setDescription('Document stuff');
$path = 'people/person/documents';
break;
//**** INDEX page ****
default:
$this->setTitle('Person');
$this->setDescription('Person stuff');
$path = 'people/person/index';
}
break;
//**** AnotherPerson page *****
case 'anotherPerson':
//Load database
$this->setTitle('AnotherPerson');
$this->setDescription('AnotherPerson stuff');
$path = 'people/anotherperson';
break;
//**** INDEX page ****
default:
$this->setTitle('People');
$this->setDescription('People stuff');
$path = 'people/index';
}
break;
//**** INDEX page ****
default:
$this->setTitle('History');
$this->setDescription('History stuff');
$path = 'index';
}
$this->loadView('about/history/' . $path);
}
}
Я чувствую, что приближаюсь к этому неправильно, и это кажется беспорядочным. Поэтому мой вопрос: есть ли лучший (более компактный/чистый/динамический) способ сделать это?
Вы можете создать собственный маршрутизатор, который позволит вам добавить контроллеры в подпапках (см http://glennpratama.wordpress.com/2009/10/20/multi-level-subfolder-for-controller-in -codeigniter /) для примера - в этом случае он допускает только одну подпапку, но ее можно расширить для более глубокого перехода –
Спасибо! Это то, что я мог определенно сделать. – lemonaida