Виджеты в yii2 в основном нужны в том случае, когда один блок используется на нескольких разных страницах (например меню сайта).
В виджет классе доступны пара методов:
init и run.
Метод init — инициализация и нормализация свойств виджета.
Метод run — возврат результата работы.
На примере создадим свой виджет.
Создаем папку /components.
В ней создадим наш виджет (MyWidget), фаил MyWidget.php.
Также создадим папку views (в ней будут храниться шаблоны наших виджетов, если они нам понадобятся).
В папке views создатим вид нашего виджета, фаил my.php.
Код вида (my.php)
Код:
<h1>Привет, дорогой <?= $name ?>!</h1>
Код виджета.
Код:
<?php
namespace app\components;
use yii\base\Widget;
class MyWidget extends Widget {
publick $name;
public function init(){
parent::init();
if($this->name === null) $this->name = 'Гость';
}
public function run(){
return $this->render('my', compact('name'));
}
}
Осталось вывести нашь виджет в нужном месте нашего вида (шаблона).
Для этого, подключим сам виджет.
use app\components\MyWidget;
И выведем его в нужном нам месте.
<?php echo MyWidget::widget([‘name’ => ‘Вася’]); ?>
Так-же с помощью виджета мы можем обрабатывать нужную информацию, нужным нам способом.
Например мы сделать выджет который будет выводить данный ему текст в верхний регистр (загланые буквы).
В этом случае код виджета будет выглядеть так
Код:
<?php
namespace app\components;
use yii\base\Widget;
class MyWidget extends Widget {
publick $name;
public function init(){
parent::init();
ob_start(); // буферизация поступившых данных
}
public function run(){
$content = ob_get_clean(); //получаем данные из буфера
$content = mb_strtoupper($content, 'utf-8'); // преобразовываем в верхний регистр
return $this->render('my', compact('content'));
}
}
в виде my.php просто выведем наш контент
<?= $content ?>
И теперь в основном шаблоне используем данный виджет по назначению
Код:
<?php MyWidget::begin() ?>
<h1>привет, мир!</h1>
<?php MyWidget::end() ?>
В итоге в месте расположения виджета выведется
ПРИВЕТ, МИР!