Создание блока / модулей в Code Igniter - PullRequest
6 голосов
/ 04 января 2011

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

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

2 вопроса:

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

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

Ответы [ 3 ]

7 голосов
/ 04 января 2011

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

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

Во-первых, я делаю виджеты в виде представлений, скажем, пути будут выглядеть так: 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.

6 голосов
/ 04 января 2011

что вы подразумеваете под частичными? В 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:

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

3 голосов
/ 05 января 2011

Хорошей новостью является то, что 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. www.philsturgeon.co.uk

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

Чтобы попытаться помочь вам немного больше напрямую ...

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

$partial = $this->load->view('someView', $data, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...