В этой статье я хочу рассказать о виджетах в Yii. Мы поймём для чего он нужен и научимся создавать свои виджеты для Yii.
Что такое виджет в Yii и для чего он нужен?
Виджет в Yii — это наследник класса CWidget, который содержит некую внутреннюю логику и представление. Он очень похож на view-файл, только помимо представления он содержит логику отображения этого самого представления. Какая логика — зависит в каждом конкретном случае.
С помощью виджетов можно отображать курсы валют, погоду, свежие записи, и многое другое!
Как написать свой виджет для Yii?
Давайте попробуем создать простейший виджет, который будет выводить "Привет <username>!".
Сделайте следующее:
- Создайте папку в директории
protected/extensions/hello. Это будет папка, в которой мы будем создавать виджет. - Создайте файл
protected/extensions/hello/HelloWidget.php - Создайте папку
protected/extensions/hello/views - Создайте файл
protected/extensions/hello/views/index.php
Так, каркас виджета готов, у вас должна получиться следующая структура файлов и папок:

Теперь в файле HelloWidget.php напишите следующее:
<?php
class HelloWidget extends CWidget
{
/**
* @var string имя пользователя
*/
public $username = '';
/**
* Запуск виджета
*/
public function run()
{
$this->render('index', array(
'username' => $this->username,
));
}
}
В файле index.php пишем следующее:
<h1>Привет <?php echo $username; ?>!</h1>
Теперь в любом файле представления мы можем вызвать наш только что созданный виджет следующим образом:
<?php $this->widget('application.extensions.hello.HelloWidget', array(
'username' => 'Борис'
)); ?>
В результате мы увидим:

Вот и всё, поставленная задача выполнена, дополнительную информацию о виджетах в Yii можно найти в официальной документации.
Приветствую, не в курсе как правильно в виджете подключить php файл со сторонним классом?
Здравствуйте Николай!
Если речь идёт о первом Yii, то для этого необходимо воспользоваться методом Yii::import();. Этот метод подгрузит нужный класс в вашем файле.
Если вы используете Yii2, то всё гораздо проще — используйте namespace.
Отличные мануалы на сайте !!
Зря блог забросили
Спасибо