Идеи для реализации нескольких представлений для одних и тех же данных - PullRequest
1 голос
/ 15 июля 2009

Я использую CodeIgniter, но этот вопрос относится к любой среде MVC. У меня есть пользовательская CMS, которая позволяет управлять 5 различными сайтами. Пользователи входят в систему и переключаются между этими сайтами. Они могут добавлять контент в каждую из областей сайтов. CMS и данные, которые можно ввести, одинаковы для каждого сайта.

Все общедоступные сайты выглядят совершенно по-разному и представляют разные бренды, даже если они содержат те же данные, что и все остальные.

Так как бы вы пошли на реализацию этих взглядов? Есть ли какие-то шаблоны дизайна, на которые я должен смотреть?

Единственный способ, которым я могу думать о том, чтобы сделать это прямо сейчас, - это поместить оператор switch внутри каждого действия контроллера, чтобы получить другое представление для каждого веб-сайта, но должен быть гораздо более умный способ сделать это. Я хочу обойтись созданием множества кода, который выглядит следующим образом:

class Home extends Controller {

    public function getPage()
    {
        $website = $this->session->userdata( "site_id" );
        switch( $website )
        {
            case "1":
                // load view one
            break;
            case "2":
                // load view 2
            break;
            // etc etc
        }
    }
}

Ответы [ 2 ]

1 голос
/ 15 июля 2009
  • Напишите класс CoreController, который расширяет Controller, и все остальные контроллеры расширяют класс CoreController, в вашем случае Home:

    class CoreController extends Controller {}
    class Home extends CoreController {}
    
  • Создание папок в папке просмотра с помощью site_ids:

    application/views/1/
    application/views/2/
    
  • Переключить базовую папку в конструкторе CoreController.
0 голосов
/ 15 июля 2009

Делайте так, как это делает Django со своей опциональной структурой "sites" :

  1. Добавить сайт в ваши модели.
  2. Установите связь между Сайтом и вашими существующими моделями.
  3. Загрузите Site :: get_current_site () и используйте его атрибуты.

Подход Residuum хорош для организации файлов.

...