2014-02-20 3 views
0

Я перестраиваю сайт с 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); 

} 
} 

Я чувствую, что приближаюсь к этому неправильно, и это кажется беспорядочным. Поэтому мой вопрос: есть ли лучший (более компактный/чистый/динамический) способ сделать это?

+0

Вы можете создать собственный маршрутизатор, который позволит вам добавить контроллеры в подпапках (см http://glennpratama.wordpress.com/2009/10/20/multi-level-subfolder-for-controller-in -codeigniter /) для примера - в этом случае он допускает только одну подпапку, но ее можно расширить для более глубокого перехода –

+0

Спасибо! Это то, что я мог определенно сделать. – lemonaida

ответ

0

У вас есть несколько вариантов.

  1. Вы можете поместить операторы case в отдельную функцию. например. если вы имеете case 'documents' вы могли бы поставить это в частной функции:

    частные функции документов() {// Загружайте специальные скрипты $ this-> SETTITLE ('Документы'); $ this-> setDescription ('Document stuff'); $ path = 'people/person/documents'; }

  2. Вы можете создать ассоциативный массив с заголовком, описанием и т. Д. В нем и проверить, заполнены ли переменные. После этого вы можете вызвать массив с помощью $sub vars.

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