#php #model-view-controller #codeigniter #module
#php #модель-вид-контроллер #codeigniter #модуль
Вопрос:
Ну, я много думал о первом реальном сайте CodeIgniter, который я пишу. Я хочу модулировать сайт таким образом, чтобы у меня был контроллер, который форматирует панель навигации, тот, который форматирует универсальный правый столбец, и тот, который форматирует область содержимого.
Моя идея состоит в том, чтобы иметь контроллер для каждого состояния любой части сайта (примером может служить правый столбец, в нем будет 3 состояния; новые сообщения, связанные сообщения и фильтры поиска). Я бы также хотел, чтобы область содержимого также имела много разных состояний (такие вещи, как результаты поиска, просмотр публикации, новые сообщения и т.д.).
Проблема в том, что я не могу найти способ использовать несколько выходных данных контроллера и скомпилировать их в один шаблон (обратите внимание, я сказал контроллеры, а не представления).
Я видел расширение HMVC, но это слишком много для моего первого сайта, и я надеюсь на более упрощенное решение (если вы не сможете доказать мне обратное и показать, что HMVC проще, чем то, что я видел).
Комментарии:
1. Модули в CI -> Использовать codeigniter.com/wiki/Matchbox
Ответ №1:
Мне это кажется немного шатким в модели MVC.
Если вы используете единый вид с отслеживанием состояния для вашей правой панели, который может изменять состояние в зависимости от ввода (т. Е. на какой странице пользователь находится в данный момент), тогда я бы добавил модель для панели. Действие контроллера будет отвечать за установку правильного состояния модели (т. Е. «вы находитесь в состоянии домашней страницы»). Модель может отвечать за указание правильному виду панели, какие дочерние представления загружать.
В любом случае, я бы, вероятно, реализовал что-то подобное именно так. HMVC кажется излишним и в этом примере не будет использоваться по назначению.
Комментарии:
1. Я думал, что модель предназначена только для данных, а контроллер предназначен для настройки представлений? Или вы передаете данные контроллеру, и контроллер отвечает, какое дочернее состояние использовать?
2. Как какие элементы управления загружать, не данные? 🙂 Контроллер передает информацию о состоянии модели (на основе любых параметров), затем загружает дочерние представления. Представление (в данном случае правая панель) будет запрашивать модель, чтобы проверить, какие дочерние представления загружать. В качестве альтернативы контроллер мог бы извлекать эти данные непосредственно из модели и передавать их в представление.
3. Опять же, первый сайт, использующий MVC, все еще многому учится. И ты, старший, заслуживаешь печенье. Теперь это имеет гораздо больше смысла ;).
Ответ №2:
Для того, что вы пытаетесь выполнить, модуль matchbox, предложенный в комментариях, кажется излишним. Я не думаю, что использование контроллеров для форматирования каждой из этих областей — очень хороший подход.
Обычно люди, которым нужен тип функциональности, который вы описываете при работе с CodeIgniter, в конечном итоге используют библиотеку шаблонов. Для CodeIgniter существует несколько библиотек шаблонов с открытым исходным кодом, которые можно легко найти с помощью поиска Google по запросу «библиотека шаблонов codeigniter».
Я никогда не использовал ни один из них, поэтому не буду рекомендовать какую-либо конкретную библиотеку. Однако приложение, над которым я работаю, позаимствовало некоторые идеи из библиотеки шаблонов Фила Стерджена. Возможно, вы не найдете точного соответствия функциям, которые вам нужны, но, по крайней мере, вы сможете черпать вдохновение из решений, предложенных другими.