В этой статье я хочу рассказать о виджетах в 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.
Отличные мануалы на сайте !!
Зря блог забросили
Спасибо