raa
(Rudenkosasha)
October 21, 2010, 6:24pm
1
Есть такая ситуация,
у меня есть виюха, в нутри которой подключается другая через renderPartial, первая рендерится через render.
во второй подключается виджет, он выдает js код, который успешно подключается в футер главного темплейта.
Но, далее, мне необходимо подтягивать второй темплейт через ajax, он отдается отдельным экшеном через renderPartial
И беда в том что при таком запросе, yii отсекает js код.
Вопрос, как можно получить этот хвост ?
Пока быстрее что в голову пришло это сделать для экшена $this->layout = ’ '; и обычный render()
seb
(Serebrov)
October 25, 2010, 2:41pm
2
Наверное нужно сделать renderPartial($view, $data, false, true) - последний параметр processOutput отвечает за вставку js кода.
vanchin
(Van4in)
November 9, 2010, 4:55pm
4
У меня более интересный вопрос на эту тему:
Допустим кусок страницы обновляется аяксом. View для этого куска содержит такие интересные вещи как например Chtml::ajax(), которые регистрирует jQuery. Т.е. в независимости от того подключен ли уже на страницы jQuery или нет, при аякс-обновлении контента, загрузится еще один jQuery, а это (сами угадайте почему) не есть хорошо…
Ни каких Yii-style решений данной проблемы я не нашел, остается только отказываться от Chtml::ajax()в таких случаях…
Может ктото знает более изящные решения?
raa
(Rudenkosasha)
November 9, 2010, 5:00pm
5
У меня более интересный вопрос на эту тему:
Допустим кусок страницы обновляется аяксом. View для этого куска содержит такие интересные вещи как например Chtml::ajax(), которые регистрирует jQuery. Т.е. в независимости от того подключен ли уже на страницы jQuery или нет, при аякс-обновлении контента, загрузится еще один jQuery, а это (сами угадайте почему) не есть хорошо…
Ни каких Yii-style решений данной проблемы я не нашел, остается только отказываться от Chtml::ajax()в таких случаях…
Может ктото знает более изящные решения?
все верно, эта логика остается на ваше усмотрения.
vanchin
(Van4in)
November 9, 2010, 5:12pm
6
Т.е. Вы хотите сказать, что нет в жизни справедливости, и я не смогу использовать все плюшки yii при работе с ajax’ом?!
raa
(Rudenkosasha)
November 9, 2010, 5:25pm
7
хаха, все верно )
Никто не обещал что жизнь будет мягкой и пушистой )
А какие плюшки yii дает при работе с ajax’ом ?
Лично я не вижу ничего такого, он просто врапер на типичные вещи в js.
И я мало что позволяю yii делать с js, мне к примеру нравится самому в js колупаться
solarix
(Solarixex)
November 9, 2010, 5:34pm
8
а CClientScript не поможет в вашем случае?
а вообще, какие AJAX-плюшки могут быть в фремвёрке?) Лично я решил не юзать все эти CActiveForm, CHtml, интегрённые виджеты и прочее. Код логики представления должен быть минимален на столько, на сколько это возможно, и все эти "удобства" только для программера, но когда работаете командой PHP кодер/HTML верстальщик/дизайнер, лепить элементы HTML страницы из обёрток-виджетов, имхо лишнее.
Реализую клиентскую часть (аякс, стили и прочее) отдельно от самой программной логики и не переживаю по поводу того, как например какой-то там CActiveDataProvider сдружить с CGridView… имхо Yii в этих вещах сильно переоценивает свою значимость
vanchin
(Van4in)
November 9, 2010, 5:36pm
9
Sasha:
хаха, все верно )
Никто не обещал что жизнь будет мягкой и пушистой )
А какие плюшки yii дает при работе с ajax’ом ?
Лично я не вижу ничего такого, он просто врапер на типичные вещи в js.
И я мало что позволяю yii делать с js, мне к примеру нравится самому в js колупаться
Мне то же нравится в js колупаться, но тривиальные вещи на мой взгляд приятнее делать с помощью хелпера Chtml.
И все же не впадайте в уныние, не будьте столь пессимистичны - добавьте строчку
Yii::app()->getClientScript()->coreScriptPosition=CClientScript::POS_READY;
в контроллере или представлении для выдачи аякс контента и наслаждайтесь жизнью!
diggy
(Digger A)
November 9, 2010, 5:39pm
10
А много ли "лишнего" кода генерирует CHtml? Все свойства отдельно взятого тега могут быть успешно изменены при вызове метода из CHtml. Чтобы изменить дизайн, в идеале вам нужно всего лишь определить каждому елементу свой класс или показать верстальщику как это сделать.
vanchin
(Van4in)
November 9, 2010, 5:39pm
11
solarix:
а CClientScript не поможет в вашем случае?
а вообще, какие AJAX-плюшки могут быть в фремвёрке?) Лично я решил не юзать все эти CActiveForm, CHtml, интегрённые виджеты и прочее. Код логики представления должен быть минимален на столько, на сколько это возможно, и все эти "удобства" только для программера, но когда работаете командой PHP кодер/HTML верстальщик/дизайнер, лепить элементы HTML страницы из обёрток-виджетов, имхо лишнее.
Реализую клиентскую часть (аякс, стили и прочее) отдельно от самой программной логики и не переживаю по поводу того, как например какой-то там CActiveDataProvider сдружить с CGridView… имхо Yii в этих вещах сильно переоценивает свою значимость
Я Вам точно так же обосную чем плох AR и все остальные фичи фреймворка и будем наслаждаться нейтив пхп))
p.s.: заценити прелести Adept Fraamework и каждая фича Yii для Вас станет простой понятной и очень ценной)
solarix
(Solarixex)
November 9, 2010, 5:49pm
12
да, конечно… знаете, сколько времени я провёл убеждая всех, что W3C и стандарты, а в частности xslt - true? И вот теперь, начинать именно противоречить самому себе, что то, что придумано в очередном фреймвёрке, это повод начать учить ещё один шаблонизатор (так или иначе, эти врапперы - суть шаблонизация) и отходить от трансформаций, которые стандарт, и на которые предлагал всем переходить )
вот насчёт AR никакого негатива не испытываю, так как это слой доступа к данным, которой занимается программист, а вот из свёрстанной части шаблона, делать несколькостраничный конфиг, например, в случае использования форм-билдера, это, имхо через чур )
Lex
(Toseter Lex)
November 9, 2010, 6:56pm
13
У меня более интересный вопрос на эту тему:
Допустим кусок страницы обновляется аяксом. View для этого куска содержит такие интересные вещи как например Chtml::ajax(), которые регистрирует jQuery. Т.е. в независимости от того подключен ли уже на страницы jQuery или нет, при аякс-обновлении контента, загрузится еще один jQuery, а это (сами угадайте почему) не есть хорошо…
Ни каких Yii-style решений данной проблемы я не нашел, остается только отказываться от Chtml::ajax()в таких случаях…
Может ктото знает более изящные решения?
http://www.yiiframework.com/doc/api/1.1/CClientScript#reset-detail
Может быть вот это поможет, после вызова виджета вызывать reset. Главное проверить что бы он уже присутствовал на странице.
а CClientScript не поможет в вашем случае?
а вообще, какие AJAX-плюшки могут быть в фремвёрке?) Лично я решил не юзать все эти CActiveForm, CHtml, интегрённые виджеты и прочее. Код логики представления должен быть минимален на столько, на сколько это возможно, и все эти "удобства" только для программера, но когда работаете командой PHP кодер/HTML верстальщик/дизайнер, лепить элементы HTML страницы из обёрток-виджетов, имхо лишнее.
Реализую клиентскую часть (аякс, стили и прочее) отдельно от самой программной логики и не переживаю по поводу того, как например какой-то там CActiveDataProvider сдружить с CGridView… имхо Yii в этих вещах сильно переоценивает свою значимость
Цель любого фреймворка экономить время, использовать уже написанный и протестированный код.
Те же виджеты помогают со стандартными задачами, к примеру генерация crud, подумайте сколько вы тратите на это времени и делаете одно и тоже по нескольку раз.
да, конечно… знаете, сколько времени я провёл убеждая всех, что W3C и стандарты, а в частности xslt - true? И вот теперь, начинать именно противоречить самому себе, что то, что придумано в очередном фреймвёрке, это повод начать учить ещё один шаблонизатор (так или иначе, эти врапперы - суть шаблонизация) и отходить от трансформаций, которые стандарт, и на которые предлагал всем переходить )
вот насчёт AR никакого негатива не испытываю, так как это слой доступа к данным, которой занимается программист, а вот из свёрстанной части шаблона, делать несколькостраничный конфиг, например, в случае использования форм-билдера, это, имхо через чур )
Шаблонизатор не отменяет стандартов W3C.
raa
(Rudenkosasha)
November 9, 2010, 7:22pm
14
solarix:
а CClientScript не поможет в вашем случае?
а вообще, какие AJAX-плюшки могут быть в фремвёрке?) Лично я решил не юзать все эти CActiveForm, CHtml, интегрённые виджеты и прочее. Код логики представления должен быть минимален на столько, на сколько это возможно, и все эти "удобства" только для программера, но когда работаете командой PHP кодер/HTML верстальщик/дизайнер, лепить элементы HTML страницы из обёрток-виджетов, имхо лишнее.
Реализую клиентскую часть (аякс, стили и прочее) отдельно от самой программной логики и не переживаю по поводу того, как например какой-то там CActiveDataProvider сдружить с CGridView… имхо Yii в этих вещах сильно переоценивает свою значимость
использую только
Yii::app()->getClientScript()->[registerScriptFile|registerCssFile]
для индивидуального подключения скриптов и стилей во вьюшках
Yii::app()->clientScript->registerCoreScript(‘jquery’);
и в принципе все.
seb
(Serebrov)
November 10, 2010, 7:52am
15
У меня более интересный вопрос на эту тему:
Допустим кусок страницы обновляется аяксом. View для этого куска содержит такие интересные вещи как например Chtml::ajax(), которые регистрирует jQuery. Т.е. в независимости от того подключен ли уже на страницы jQuery или нет, при аякс-обновлении контента, загрузится еще один jQuery, а это (сами угадайте почему) не есть хорошо…
Ни каких Yii-style решений данной проблемы я не нашел, остается только отказываться от Chtml::ajax()в таких случаях…
Может ктото знает более изящные решения?
Тут два варианта:
Блокировать повторяющиеся скрипты во время ajax запроса:
if (Yii::app()->request->isAjaxRequest) {
Yii::app()->clientscript->scriptMap['jquery.js'] = false;
}
Загрузить все требующиеся скрипты заранее (например, в layout). И во время ajax-запросов блокировать все скрипты:
if (Yii::app()->request->isAjaxRequest) {
Yii::app()->clientscript->scriptMap['*.js'] = false;
}
Второй метод может показаться не оптимальным, однако на практике это может быть полезно, т.к. весь набор скриптов можно объединить и сжать.
galymzhan
(Kozhayev)
November 10, 2010, 3:41pm
16
seb, твой код во втором пункте надо класть в beforeAction? я как раз собираюсь использовать такой вариант. А инлайновые скрипты будут работать в этом случае? типа таких:
/*<![CDATA[*/
jQuery(function($) {
jQuery('#UserProfile_birth_date').datepicker(...);
});
/*]]>*/
seb
(Serebrov)
November 10, 2010, 3:50pm
17
galymzhan:
seb, твой код во втором пункте надо класть в beforeAction? я как раз собираюсь использовать такой вариант. А инлайновые скрипты будут работать в этом случае? типа таких:
/*<![CDATA[*/
jQuery(function($) {
jQuery('#UserProfile_birth_date').datepicker(...);
});
/*]]>*/
Куда класть - неважно, лишь бы он выполнился до render’а, beforeAction() - вполне подходящий вариант.
Инлайновые скрипты естественно будут работать, даже те которые добавлены через Yii::app()->clientScript->registerScript(…).
Блокироваться будут только регистрации файлов скриптов через Yii::app()->clientScript->registerScriptFile(…).