CodeIgniter - правильный способ создания «блочных» элементов на веб-странице - PullRequest
2 голосов
/ 15 апреля 2010

Я некоторое время искал решения для этой проблемы, но не нашел никакого «действующего mvc» решения для этого. Я надеюсь, что смогу достаточно ясно объяснить вашу проблему для вас, ребята.

  • Мне нужно создать динамический блок HTML на моем веб-сайте. (например, блок, содержащий последние комментарии блога пользователя).

  • У меня есть файл представления шаблона (файл, содержащий заголовок, контейнер содержимого и нижний колонтитул), в который мне нужно добавить некоторое содержимое И этот элемент блока.

Проблема в том, что я не хочу дублировать этот код блока на каждом контроллере. Это просто кажется глупым, и я уверен, что есть лучший способ сделать это, чем просто дублировать один и тот же материал снова и снова на всех файлах контроллера?

Я могу просто добавить представление в другое представление, но меня беспокоит то, как на самом деле генерировать это динамическое содержимое в файле представления этого блока. Я не могу вызвать контроллер из файла представления, контроллер из файла контроллера или модель из файла представления, потому что то, что я понимаю, просто не является способом "mvc"?

У кого-нибудь есть какие-нибудь хитрости или советы для этого?

Ответы [ 3 ]

2 голосов
/ 15 апреля 2010

Как отметил Зак, MY_Controller отлично подходит для создания глобальных данных.

Один из способов сделать это - создать «частичные» представления, которые представляют собой просто представление, содержащее все необходимое. Иногда это немного PHP, но для этих специальных представлений я не против сделать их грязными.

Другим способом является сопряжение вспомогательной функции с представлением. Поместите весь ваш PHP (cURL-запрос на получение RSS, кэширование и т. Д.) В вспомогательную функцию:

$this->load->view('partials/rss_feed');

Лучший способ - внедрить систему Widgets из PyroCMS . Эта вещь потрясающая! : D

1 голос
/ 15 апреля 2010

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

В конце концов я наткнулся на расширение HMVC до CodeIgniter. Это действительно хороший способ создания частичных просмотров. Вы создаете модуль, отвечающий за генерацию частичного. Модуль кодируется способом MVC, так же, как вы кодируете свои страницы. Этот модуль может быть включен в ваше представление.

Если вы уже использовали ASP.NET MVC, это похоже на использование Html.RenderAction .

1 голос
/ 15 апреля 2010

Если у вас есть несколько контроллеров, которые будут рисовать эти данные, вы можете использовать модель или расширить класс Controller с помощью MY_Controller. Это хорошо задокументировано в руководстве пользователя CodeIgniter.

Если это просто для многих методов в одном контроллере, вы можете поместить логику в конструктор контроллеров

Перечитав ваш пост, я думаю, что вам лучше всего расширить класс ControlIgniter's Controller с помощью MY_Controller , задокументированного здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...