Intereting Posts

Создание блока / модулей в кодовом зажигателе

До сих пор я наслаждался использованием CodeIgniter для создания некоторых простых веб-приложений (на самом деле, просто изучая фреймворк), но я не могу найти простой способ создания блока / модуля.

Я хотел бы иметь блок «Последние изображения», который я могу удалить на любую страницу на сайте, не дублируя запрос в контроллере каждой страницы и передавая его в шаблон с помощью $ vars.

2 вопроса:

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

Кажется, это должно быть достаточно просто, мне просто нечего верить в правильное решение. Заранее спасибо.

Solutions Collecting From Web of "Создание блока / модулей в кодовом зажигателе"

Хорошо, вот мой подход к «виджетам», «модулям», «частичным представлениям» или тому, что вы хотите назвать их. В любом случае мы подразумеваем многоразовые элементы для страниц.

Есть несколько способов сделать это, так что мой путь может быть не для вас – тогда снова это может быть именно то, что вы ищете!

Во-первых, я делаю виджеты в виде представлений, скажем, пути будут такими: views / widgets / myview.php

Я принимаю решение о том, какие виджеты я планирую использовать в своем контроллере. Мой метод заключается в том, чтобы поместить пути к представлениям, которые я хочу в массиве, например:

$data['widgets'] = array('widgets/myview', 'widgets/myview2'); 

Затем, когда я загружаю свой основной вид (все еще в моем контроллере), я делаю это:

 $this->load->view('main_view', $data); 

Теперь массив виджетов передается в основное представление.

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

 foreach ($widgets as $widget) { $this->load->view($widget); } 

Этот цикл запускается в моем основном представлении. Удобно, что все данные, которые вы передали в основное представление, будут доступны во вложенных вами представлениях.

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

что вы подразумеваете под частицами? В CodeIgniter нет собственных частичных представлений. Хотя, вы можете $this->load->view() в представлениях.

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

 $data['info'] = 'value'; $this->load->vars($data); 

$info будет доступна для всех просмотров, которые вы загружаете.

Обновить:

Вы должны сделать это в своем конструкторе:

 class Page extends Controller { function Page() { $this->load->model('page'); $data['images'] = $this->page->get_images(); $this->load->vars($data); // images will now be available to all views } } 

Обновление 2:

Должен признать, что я не использовал шаблоны, но это будет работать на всех страницах, созданных вашим контроллером.

Хорошей новостью является то, что CodeIgniter определенно движется в этом направлении. Для начала ознакомьтесь с модульными расширениями от wiredeignz. Его можно найти здесь: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/overview с хорошей документацией, чтобы вы начали. Это может быть идеально для вас, потому что вы можете запустить модуль (т. Е. Вызвать контроллер / метод модуля и вернуть частичный вид) и вставить его в шаблон или глобальный вид или что-то еще. Кроме того, посмотрите на CI 2.0 – https://bitbucket.org/ellislab/codeigniter/overview. Это совсем не так, как в предыдущих версиях codeigniter, и у него много новых функций, которые очень интересны. Хотя в бета-версии это очень, очень стабильно. HMVC написан для работы с CI 2.0.

Кроме того, посмотрите на код для других проектов CI, которые работают таким образом. Я бы порекомендовал pyroCMS от Phil Sturgeon. Он действительно лидирует и написал много интересных статей и сообщений о модуляции и CI 2.0. http://www.philsturgeon.co.uk

Этот способ работы действительно полезен для сохранения отдельных битов сайта независимо, только при необходимости.

Попробовать и помочь вам немного подробнее …

Не забывайте, что вы можете буферизовать вывод, используя дополнительный третий параметр. Если вы не уверены, обратитесь к руководству пользователя.

 $partial = $this->load->view('someView', $data, true);