Widgety
Opis ogólny
Wtyczki mogą zostać umieszczone w zdefiniowanym placeholderze zarejestrowanego layoutu. Posiadają własną logikę, indywidualne parametry oraz widok. Każdy layout może posiadać dowolną ilość wtyczek, również tych samych. Wprowadzenie wtyczki do layoutu, możliwe jest porzez definicję layoutu podczas rejestracji lub przez panel administracyjny i przygotowane narzędzia.
Definicja Placeholderów
Base_Layout::registerLayout($module, $filename, $is_edit = true, $placeholders = array() )
Przykład
class TextPage_Bootstrap extends Base_Application_Module_Bootstrap { public function _initLayouts() { Base_Layout::registerLayout('TextPage', 'layout', true, array( 'left' => array(), 'main' => array(), )); } }
Parametry
$module
- nazwa modułu$filename
- nazwa layoutu$is_edit
- czy layout może być edytowany i wykorzystywany w panelu administracyjnym$placeholders
- definicja placeholderów layoutu
Widok szablonu
application/modules/text-page/layouts/scripts/layout.phtml
<?=$this->placeholder('layout_top')?> <div class="row-fluid"> <div class="span2"><?=$this->placeholder('left')?></div> <div class="span10"> <?=$this->layout()->content ?> <?=$this->placeholder('main')?> </div> </div> <?=$this->placeholder('layout_bottom')?>
Widok z panelu administracyjnego
Rejestracja widgetu
Aby widget mógł zostać wykorzystany przez aplikację należy go zarejestrować
Base_Widget::registerWidget($widget, $type = "page")
Parametry
$widget
nazwa widgetu$type
typ widgetu
Przykład
<?php class Page_Bootstrap extends Base_Application_Module_Bootstrap { public function _initLayouts() { Base_Widget::registerWidget('Page_Widget_Wysiwyg'); } }
Powiązanie layoutu z widgetami
Rejestracja widgetu w layoucie
<?php class Page_Bootstrap extends Base_Application_Module_Bootstrap public function _initLayouts() { Base_Layout::registerLayout('Page', 'layout-home', true, array( 'main' => array(), 'box1' => array(), 'box2' => array(), 'box3' => array(), 'middle_left' => array(), 'middle_right' => array(), ) ); Base_Widget::registerWidget('Page_Widget_Wysiwyg'); Base_Widget::registerWidget('Page_Widget_Slider'); Base_Widget::registerWidget('Page_Widget_Box'); }
Widok layoutu
application/modules/page/layouts/scripts/layout-home.phtml
<?=$this->placeholder('layout_top')?> <div class="row-fluid"> <?=$this->placeholder('main')?> </div> <div class="row-fluid"> <div class="span4"> <?=$this->placeholder('box1')?> </div> <div class="span4"> <?=$this->placeholder('box2')?> </div> <div class="span4"> <?=$this->placeholder('box3')?> </div> </div> <div class="row-fluid"> <div class="span8"> <?=$this->placeholder('middle_left')?> </div> <div class="span4"> <?=$this->placeholder('middle_right')?> </div> </div> <?=$this->placeholder('layout_bottom')?>
Widok edycji z panelu administracyjnego
Szczegółowy widok ustawień widgetów
Przykład strony
Ręczna konfiguracja parametrów widgetu
<?php class Page_Bootstrap extends Base_Application_Module_Bootstrap { public function _initLayouts() { Base_Layout::registerLayout('Page', 'layout-home', true, array( 'main' => array('widgets' => array( array( '_class' => 'Page_Widget_Box', 'html' => '<p>html content</p>' ) )), 'box1' => array('widgets' => array( array( '_class' => 'Page_Widget_Login', ), array( '_class' => 'Page_Widget_LastNews', 'title' => 'Najnowsze artykuły', 'order' => 'title ASC', 'limit_on_page' => 10, ), array( '_class' => 'Page_Widget_ElementFromDb', 'id_element' => 23, ) )), ) ); } }
Struktura widgetu
Rejestracja widgetu
<?php class Page_Bootstrap extends Base_Application_Module_Bootstrap { public function _initLayouts() { Base_Layout::registerLayout('Page', 'layout-home', true, array( 'main' => array('widgets' => array( array( '_class' => 'Page_Widget_Box', 'title' => 'My First widget', 'html' => '<p>html content</p>' ) )), ) ); Base_Widget::registerWidget('Page_Widget_Box'); } }
Lokalizacja widgetu
application/modules/page/widgets/Box.php
Lokalizacja widoku widgetu
application/modules/page/views/widgets/box.phtml
Klasa widgetu
class Page_Widget_Box extends Base_Widget_Abstract{ public function getViewScriptsDir() { return __DIR__; } public function getRenderView() { return 'box.phtml'; } }
Widok widgetu
<h1><?=$this->params['title']?></h1> <p><?=$this->params['html']?><p>
Logika widgetu
protected function renderWidget()
class Page_Widget_Box extends Base_Widget_Abstract{ public function getViewScriptsDir() { return __DIR__; } public function getRenderView() { return 'box.phtml'; } protected function renderWidget() { $my_params = $this->params; ... $this->view->my_params = $my_params; } }
Panel administracyjny
Zarządzanie widgetami na stronach
Panel administracyjny umożliwa przygotowanie indywidualnej strony, odróżniającej się układem i treścią od pozostałych podstron. Przykładem może być strona główna. Wystarczy wybrać i dodać przygotowane widgety poprzez przygotowane narzędzia. Możliwe jest przeciądanie pomiędzy blokami layoutu i zmiana kolejności widgetów.