Twig view renderer для Yii

Выкладываем свои наработки
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Twig view renderer для Yii

Сообщение samdark »

Изучил плотнее PHP-шаблонизатор Twig и ради эксперимента прикрутил его к Yii.

Полезен не только как готовое решение, но и как пример вживления своего рендерера.

Пользуемся
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Twig view renderer для Yii

Сообщение samdark »

Код обновлён до версии 0.9.1. Теперь работатет с последней версией Twig.
Аватара пользователя
angrycat
Сообщения: 2
Зарегистрирован: 2010.03.02, 04:50

Re: Twig view renderer для Yii

Сообщение angrycat »

Я так понимаю, что для того, чтобы включить в шаблон виджет, его придётся создавать где-то в контроллере и передавать вывод в представление? То есть в твиговском шаблоне, например такое

Код: Выделить всё

{{ Yii::app()->request->baseUrl}} 
не прокатит?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Twig view renderer для Yii

Сообщение samdark »

Да. Если есть идеи и желание сделать что-то более универсальное, с удовольствием приму код и идеи.
Аватара пользователя
angrycat
Сообщения: 2
Зарегистрирован: 2010.03.02, 04:50

Re: Twig view renderer для Yii

Сообщение angrycat »

Первое что напрашивается, оформить наиболее используемые в представлении виджеты и т.п. как расширения к твигу. Покурю доки, попробую.

Кстати, я к вашему твиг расширению баг репорт написал, о не правильной работе с темами. Почему то съедается часть имени темы и поэтому поиск происходит непонятно где. То есть при использовании темы "classic" поиск идёт в директории "assic"
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Twig view renderer для Yii

Сообщение porcelanosa »

а будет работать с последней версией?
http://twig.kron0s.com/blog/2010/06/14/ ... -released/
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Twig view renderer для Yii

Сообщение samdark »

Не знаю, не пробовал.
Byrger
Сообщения: 33
Зарегистрирован: 2010.06.04, 17:03

Re: Twig view renderer для Yii

Сообщение Byrger »

в CTwigViewRenderer.php после

Код: Выделить всё

$data['this'] = $context; 
в 51 строке добавляем

Код: Выделить всё

$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

Сообщение alien »

Только вот интересно как в шаблоне юзать виджеты теперь
Как в шаблоне - не знаю, приходится сначала в контроллере его подготовить(костыль, конечно.. :( )

Код: Выделить всё

$widget_html = $this->widget('*******',array( ******* ), TRUE); // TRUE - вернет html в переменную.
 
А потом передаешь $widget_html в контекст вьюхи.
И там уже {{ $widget_html }} делаешь.
Изображение
Аватара пользователя
Stamm
Сообщения: 407
Зарегистрирован: 2010.03.14, 18:59
Откуда: Россия, Москва
Контактная информация:

Re: Twig view renderer для Yii

Сообщение Stamm »

PhpStorm теперь поддерживает twig
http://blogs.jetbrains.com/webide/2011/ ... g-support/
Аватара пользователя
alien
Сообщения: 11
Зарегистрирован: 2010.11.17, 10:31
Откуда: Ростов-на-Дону
Контактная информация:

Re: Twig view renderer для Yii

Сообщение alien »

Только вот интересно как в шаблоне юзать виджеты теперь
Допустим:

Код: Выделить всё

<!-- 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) }}
И да, ГЛАВНОЕ последним параметром передать TRUE, чтобы контент вернулся, а не распечатался, иначе Твиг кинет исключение.

P.S. жаль, недоступнен вызов статических методов через имя класса, иначе я бы давно уже использовал CHtml::МЕТОДЫ :(
Изображение
Аватара пользователя
radamir
Сообщения: 142
Зарегистрирован: 2009.08.10, 08:02
Откуда: Новосибирск

Re: Twig view renderer для Yii

Сообщение radamir »

Добавь глобальную переменную в рендерере $data['html'] = new CHtml; и юзай его статические методы как обычные.
Аватара пользователя
alien
Сообщения: 11
Зарегистрирован: 2010.11.17, 10:31
Откуда: Ростов-на-Дону
Контактная информация:

Re: Twig view renderer для Yii

Сообщение alien »

radamir писал(а):Добавь глобальную переменную в рендерере $data['html'] = new CHtml; и юзай его статические методы как обычные.
да, я почти так и сделал.
Изображение
SpartakuS
Сообщения: 72
Зарегистрирован: 2010.10.16, 21:36

Re: Twig view renderer для Yii

Сообщение SpartakuS »

Есть пару предложений и вопрос.
Во-первых стоит закоммитить эти изменения.
Только пхп у меня ругается на передачу в массив по ссылке:

Код: Выделить всё

$data['app'] =& Yii::app(); // для более быстрого доступа 
В режиме разработки стоит отключать кеш. Для этого в опциях кеш надо ставить false. Но проверка на пустой кеш делается не очень удачно. empty(false) == true и кеш отклбчить нельзя. empty стоит заменить на !isset

Код: Выделить всё

            {{ this.beginWidget('zii.widgets.CPortlet', {
                             'title':'Operations' ,
                        },true) }}
            {{ this.widget('zii.widgets.CMenu', {
                 'items':this.menu ,
                 'htmlOptions': { 'class':'operations' },
            }, true) }}
            {{ this.endWidget() }} 
Object of class CPortlet could not be converted to string
Где я не прав?
SpartakuS
Сообщения: 72
Зарегистрирован: 2010.10.16, 21:36

Re: Twig view renderer для Yii

Сообщение SpartakuS »

Получается, что begin/end widget тут не получится?
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Twig view renderer для Yii

Сообщение Svyatov »

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

Сообщение samdark »

SpartakuS, приму изменения в виде pull-request сюда: https://github.com/yiiext/twig-renderer Сам пока заняться не могу.
SpartakuS
Сообщения: 72
Зарегистрирован: 2010.10.16, 21:36

Re: Twig view renderer для Yii

Сообщение SpartakuS »

Отослал. Надеюсь все верно сделал.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Twig view renderer для Yii

Сообщение samdark »

С форматированием есть косяки и ещё по мелочи, но, в общем, почти всё хорошо. Если будет поправлено — приму. Если нет — как работа отпустит — попробую выделить время заняться.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Twig view renderer для Yii

Сообщение samdark »

Намёржил.
Ответить