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.

RiseNet
Robert Rogiński i Marek Skoratek s.c.
Al. Jerozolimskie 125/127,
02-017 Warszawa

P: +48 600 726 886
P: +48 781 574 595
E:

Formularz kontaktowy