Я перестраиваю веб-сайт с помощью PHP codeigniter, который содержит в основном статические страницы и некоторые динамические страницы с вкраплениями. Проблема в том, что страницы находятся на 1-5 уровнях в глубине навигации (например, example.com/about/history/people/person/photos).
Я не уверен, как реализовать это в контроллере. В настоящее время у меня есть сумасшедший набор операторов 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 );
}
}
Я чувствую, что подхожу к этому неправильно, и это кажется грязным. Итак, мой вопрос: есть ли лучший (более компактный/чистый/динамичный) способ сделать это?