Twig view renderer для Yii
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Twig view renderer для Yii
Изучил плотнее PHP-шаблонизатор Twig и ради эксперимента прикрутил его к Yii.
Полезен не только как готовое решение, но и как пример вживления своего рендерера.
Пользуемся
Полезен не только как готовое решение, но и как пример вживления своего рендерера.
Пользуемся
Нравится Yii? Давайте сделаем его лучше!.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Twig view renderer для Yii
Код обновлён до версии 0.9.1. Теперь работатет с последней версией Twig.
Нравится Yii? Давайте сделаем его лучше!.
Re: Twig view renderer для Yii
Я так понимаю, что для того, чтобы включить в шаблон виджет, его придётся создавать где-то в контроллере и передавать вывод в представление? То есть в твиговском шаблоне, например такое не прокатит?
Код: Выделить всё
{{ Yii::app()->request->baseUrl}}
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Twig view renderer для Yii
Да. Если есть идеи и желание сделать что-то более универсальное, с удовольствием приму код и идеи.
Нравится Yii? Давайте сделаем его лучше!.
Re: Twig view renderer для Yii
Первое что напрашивается, оформить наиболее используемые в представлении виджеты и т.п. как расширения к твигу. Покурю доки, попробую.
Кстати, я к вашему твиг расширению баг репорт написал, о не правильной работе с темами. Почему то съедается часть имени темы и поэтому поиск происходит непонятно где. То есть при использовании темы "classic" поиск идёт в директории "assic"
Кстати, я к вашему твиг расширению баг репорт написал, о не правильной работе с темами. Почему то съедается часть имени темы и поэтому поиск происходит непонятно где. То есть при использовании темы "classic" поиск идёт в директории "assic"
- porcelanosa
- Сообщения: 570
- Зарегистрирован: 2010.03.16, 04:31
- Откуда: Москва
Re: Twig view renderer для Yii
а будет работать с последней версией?
http://twig.kron0s.com/blog/2010/06/14/ ... -released/
http://twig.kron0s.com/blog/2010/06/14/ ... -released/
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Re: Twig view renderer для Yii
в CTwigViewRenderer.php после в 51 строке добавляем
работает
Только вот интересно как в шаблоне юзать виджеты теперь
Допустим:
Код: Выделить всё
$data['this'] = $context;
Код: Выделить всё
$data['Yii'] = Yii::app();
Код: Выделить всё
{{Yii.request.baseUrl}}
Только вот интересно как в шаблоне юзать виджеты теперь
Допустим:
Код: Выделить всё
<!-- start nav -->
<?php $this->widget('zii.widgets.CMenu',array(
'id'=>'nav',
'items'=>array(
array('label'=>'Главная', 'url'=>array('/site/index')),
array('label'=>'Быстрый старт', 'url'=>array('/site/registration')),
),
)); ?>
<!-- end nav -->
- alien
- Сообщения: 11
- Зарегистрирован: 2010.11.17, 10:31
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: Twig view renderer для Yii
Как в шаблоне - не знаю, приходится сначала в контроллере его подготовить(костыль, конечно.. )Только вот интересно как в шаблоне юзать виджеты теперь
Код: Выделить всё
$widget_html = $this->widget('*******',array( ******* ), TRUE); // TRUE - вернет html в переменную.
И там уже {{ $widget_html }} делаешь.
- Stamm
- Сообщения: 407
- Зарегистрирован: 2010.03.14, 18:59
- Откуда: Россия, Москва
- Контактная информация:
Re: Twig view renderer для Yii
PhpStorm теперь поддерживает twig
http://blogs.jetbrains.com/webide/2011/ ... g-support/
http://blogs.jetbrains.com/webide/2011/ ... g-support/
- alien
- Сообщения: 11
- Зарегистрирован: 2010.11.17, 10:31
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: Twig view renderer для Yii
Кстати, все оказалось просто. Примерно так:Только вот интересно как в шаблоне юзать виджеты теперь
Допустим:Код: Выделить всё
<!-- start nav --> <?php $this->widget('zii.widgets.CMenu',array( 'id'=>'nav', 'items'=>array( array('label'=>'Главная', 'url'=>array('/site/index')), array('label'=>'Быстрый старт', 'url'=>array('/site/registration')), ), )); ?> <!-- end nav -->
Код: Выделить всё
{{ this.widget(
'zii.widgets.CMenu',
{
"id":"nav",
"items" : [
{"label":"Главная", "url":['/site/index']},
{"label":"Быстрый старт", "url":['/site/registration']}
]
},
true)
}}
php array('foo' => 'bar') в Твиге будут как {"foo" : "bar"}
а
php array('one', 'two') будут как ['one', 'two']
Во всяком случае, у себя в шаблонах вот так я вызываю OpenId виджет
Код: Выделить всё
{{ this.widget('application.widgets.openidProviders.openidProviders', {"options":{"lang":"ru"}}, true) }}
P.S. жаль, недоступнен вызов статических методов через имя класса, иначе я бы давно уже использовал CHtml::МЕТОДЫ
Re: Twig view renderer для Yii
Добавь глобальную переменную в рендерере $data['html'] = new CHtml; и юзай его статические методы как обычные.
- alien
- Сообщения: 11
- Зарегистрирован: 2010.11.17, 10:31
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: Twig view renderer для Yii
да, я почти так и сделал.radamir писал(а):Добавь глобальную переменную в рендерере $data['html'] = new CHtml; и юзай его статические методы как обычные.
Re: Twig view renderer для Yii
Есть пару предложений и вопрос.
Во-первых стоит закоммитить эти изменения.
Только пхп у меня ругается на передачу в массив по ссылке:
В режиме разработки стоит отключать кеш. Для этого в опциях кеш надо ставить false. Но проверка на пустой кеш делается не очень удачно. empty(false) == true и кеш отклбчить нельзя. empty стоит заменить на !isset
Object of class CPortlet could not be converted to string
Где я не прав?
Во-первых стоит закоммитить эти изменения.
Только пхп у меня ругается на передачу в массив по ссылке:
Код: Выделить всё
$data['app'] =& Yii::app(); // для более быстрого доступа
Код: Выделить всё
{{ this.beginWidget('zii.widgets.CPortlet', {
'title':'Operations' ,
},true) }}
{{ this.widget('zii.widgets.CMenu', {
'items':this.menu ,
'htmlOptions': { 'class':'operations' },
}, true) }}
{{ this.endWidget() }}
Где я не прав?
Re: Twig view renderer для Yii
Получается, что begin/end widget тут не получится?
- Svyatov
- Сообщения: 459
- Зарегистрирован: 2010.08.12, 14:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Twig view renderer для Yii
Верно, не получится, потому что методы возвращают объект, а не строчку. Можно попробовать обернуть это в функцию типа:SpartakuS писал(а):Получается, что begin/end widget тут не получится?
Код: Выделить всё
function noReturn($argument) { return ''; }
Код: Выделить всё
{{ noReturn(this.beginWidget('zii.widgets.CPortlet', {
'title':'Operations' ,
},true)) }}
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Twig view renderer для Yii
SpartakuS, приму изменения в виде pull-request сюда: https://github.com/yiiext/twig-renderer Сам пока заняться не могу.
Нравится Yii? Давайте сделаем его лучше!.
Re: Twig view renderer для Yii
Отослал. Надеюсь все верно сделал.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Twig view renderer для Yii
С форматированием есть косяки и ещё по мелочи, но, в общем, почти всё хорошо. Если будет поправлено — приму. Если нет — как работа отпустит — попробую выделить время заняться.
Нравится Yii? Давайте сделаем его лучше!.