2011-01-04 6 views
6

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

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

2 вопросы:

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

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

ответ

7

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

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

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

+0

ahhh, я думаю, что это более явно то, что я искал, но Thrope, спасибо за вашу помощь. Я многому учусь о CI. – Rapture

6

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

} 

Update 2:

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

+0

Извините, я имею в виду использование шаблонов. Как вы сказали - используя $ this-> load-> view ('user_controls'). Я не хочу, чтобы данные обязательно были глобальными и загружались на каждом представлении, но я предпочел бы на страницах, где у меня есть «последние образы», ​​вызывать контроллер, который заполняет эти данные, без необходимости запускать этот запрос с контроллера каждой страницы, имеет недавний блок изображений? Может быть, я не имею смысла? – Rapture

+0

восторг, см. Мое обновление. –

+0

ах, спасибо. Кажется, мне нужно больше познакомиться с моделями. В настоящее время у меня есть только две модели баз данных доктрины, и я использую встроенное создание страниц, используя имя_имя/functionName, поэтому у меня нет модели страницы. Кажется, что мне, возможно, нужно научиться создавать один – Rapture

3

Хорошей новостью является то, что 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); 
Смежные вопросы