А вот надо показать там грид, CGridView который.
И он показывается, данные выводит..
Но не навешиваются js скрипты. Вообще. Происходит примерно следующее:
$html.='ТУТА ЧАСТЬ ХТМЛ';
Yii::import('zii.widgets.grid.*');
$columns = array();
//ТУДА В массив формируем колонки и потом..
$grid = $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => ORG_OBJECT::model()->getTable($oy_id, $attr['TABLE_ID']),
'summaryText' => 'Всего элементов: {count}',
'id' => 'grid_' . $n,
'pager' => array(
'footer' => '',
'header' => ''
),
'template' => "
<div class='table_head_p'>
<a href='#' onclick='addTableData()' style='text-decoration:none'>Добавить</a>
{summary}{pager}
</div>
\n{items}", 'columns' => $columns
), true); //генерим грид, и ставим тру для того что бы хтмл вернулся в переменную.
echo $html;
exit;
Вот, js не цепляется, а надо =\
Там потом ниже еще есть CHtml::ajaxSubmitButton с той же проблемой, кнопка есть, аякса нет.
Спустя 10 минут, 8 секунд (14.06.2012 - 11:08) TMake написал(а):
vital т.е. ты пытаешься ajax'ом выгрузить весь грид, а не проще на странице организовать вывод грид, а ajax'ом подгружать уже что тебе нужно.
У меня была такая проблема, но как решил уже не помню
У меня была такая проблема, но как решил уже не помню
Спустя 7 минут, 43 секунды (14.06.2012 - 11:16) vital написал(а):
Цитата (stepan @ 14.06.2012 - 10:08) |
vital т.е. ты пытаешься ajax'ом выгрузить весь грид, а не проще на странице организовать вывод грид, а ajax'ом подгружать уже что тебе нужно. У меня была такая проблема, но как решил уже не помню |
Не проще.
У меня нету статических гридов.
Кол-во гридов в блоке, колонки в них - все динамически(есть отдельная страница где создаются таблицы - создаются для них колонки, выбираются типы значений..). Я не могу их создать заранее.
т.е. грид и есть часть того, что нужно сформировать и подгрузить.
Спустя 24 минуты, 42 секунды (14.06.2012 - 11:41) vital написал(а):
Если кому интересно, происходит примерно следующее
Свернутый текст
public function actiongetBlock() {
set_time_limit(0);
$block_id = Yii::app()->request->getParam('block_id');
$oy_id = Yii::app()->request->getParam('oy_id');
$attrsInBlock = KF_ATTR_GROUP::model()->getPokazateliInBlock($block_id, true);
if (empty($attrsInBlock)) {
echo 'В этом блоке нету показателей!';
exit;
}
$attr_ids = array();
$table_ids = array();
foreach ($attrsInBlock as $attr) {
if (empty($attr['TABLE_ID']))
$attr_ids[] = $attr['ATTR_ID'];
}
$attrsValues = KF_ATTR::model()->getAttrValuesByIds($oy_id, $attr_ids);
$html = '<div class="form"><form id="blockForm">';
$script = '';
foreach ($attrsInBlock as $attr) {
$html.='<div class="row">';
if (empty($attr['TABLE_ID'])) {
//тут не важно
} else {
//а тут грид.
$html.='<label for="table[' . $attr['TABLE_ID'] . ']">Двумерный показатель:' . $attr['TABLE_NAME'] . '</label>';
Yii::import('zii.widgets.grid.*');
$columns = array();
$cols = KF_TABLE::model()->getTable($attr['TABLE_ID']);
$col_count = $cols->totalItemCount;
$cols = $cols->getData();
if ($col_count > 0) {
for ($i = 0; $i <= $col_count - 1; $i++) { //заполняются колонки
$columns[] = array('value' => '$data[' . $i . ']', 'header' => $cols[$i]['ATTR_NAME']);
}
$columns[] = array(
'class' => 'CButtonColumn',
'template' => '{update}{delete}',
'afterDelete' => '1',
'buttons' => array(
'delete' => array(
'url' => 'Yii::app()->createUrl("fillingforms/delRowTable", array("ids[]"=>Chtml::encode($data[count($data)-1][2])))',
'options' => array(
'onclick' => 'var url=$(this).attr("href");
$.ajax({
"url":url,
success:function(data){
alert("Cтрока удалена");
$.fn.yiiGridView.update("grid_' . $n . '");
}
});
return false;'
)
),
'update' => array(
'url' => 'Yii::app()->createUrl("fillingforms/AddTableData",array("ids[]"=>Chtml::e ncode($data[count($data)-1][2])))',
)
)
);
}
// создается грид
$grid = $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => ORG_OBJECT::model()->getTable($oy_id, $attr['TABLE_ID']),
'summaryText' => 'Всего элементов: {count}',
'id' => 'grid_' . $n,
'pager' => array(
'footer' => '',
'header' => ''
),
'template' => "
<div class='table_head_p'>
<a href='#' onclick='addTableData()' style='text-decoration:none'>Добавить</a>
{summary}{pager}
</div>
\n{items}", 'columns' => $columns
), true);
$script.='
jQuery("#grid_' . $n . '").yiiGridView({
"ajaxVar":"ajax",
"pagerClass":"pager",
"loadingClass":"grid-view-loading",
"filterClass":"filters",
"tableClass":"items",
"selectableRows":1});';
$html.= $grid;
}
$html.='</div>';
}
//кнопочки
$html.=CHtml::SubmitButton('Cохранить', array(
'onclick' => '$.post("' . $this->createUrl('fillingforms/saveForm') .
'",$("#blockForm").serialize()+"&oy_id=' . $oy_id . '&' . Yii::app()->request->csrfTokenName . '=' . Yii::app()->request->csrfToken . '"); return false;'));
$html.=CHtml::button('Отмена', array(
'onclick' => '$("#form_container").empty();$("#form_container").load("' .
$this->createUrl('fillingforms/getblock') .
'",{"' . Yii::app()->request->csrfTokenName . '":"' . Yii::app()->request->csrfToken .
'","block_id":"' . CHtml::encode($block_id) . '","oy_id":"' . CHtml::encode($oy_id) . '"})'));
$html.='</form></div>';
echo $html . '<script type="text/javascript">' . $script . '</script>';
exit;
}
Спустя 4 минуты, 18 секунд (14.06.2012 - 11:45) Dezigo написал(а):
Самое интерестное,что этот подход не как не упрощает понемание и быстроту кода.
И способ через жопу.(вместо обычного php шаблонизатора)
И способ через жопу.(вместо обычного php шаблонизатора)
Спустя 4 минуты, 38 секунд (14.06.2012 - 11:50) TMake написал(а):
Цитата (Dezigo @ 14.06.2012 - 12:45) |
Самое интерестное,что этот подход не как не упрощает понемание и быстроту кода. |
Потому как у него все в одном контроллере и отображение и действие. А на подход грешить не стоит, каждому свое.
Спустя 3 минуты, 17 секунд (14.06.2012 - 11:53) Invis1ble написал(а):
оффтоп
Я вот как раз хотел спросить, нормально ли это, что в контроллере формируется html да еще и в перемешку с js, но постеснялся
Спустя 4 минуты, 14 секунд (14.06.2012 - 11:57) TMake написал(а):
Invis1ble из этого можно было бы раскидать как должно быть в идеале, но мне лень, тем более vital задачу решил
P.S. Лишь бы не пришлось встретиться с этим творением.
P.S. Лишь бы не пришлось встретиться с этим творением.
Спустя 2 минуты, 52 секунды (14.06.2012 - 12:00) vital написал(а):
Цитата |
Самое интерестное,что этот подход не как не упрощает понемание и быстроту кода. И способ через жопу.(вместо обычного php шаблонизатора) |
Как же бесят такие хорошие люди которые не понимают сути=\ Но считают себя мега-умными и пишут =\
Окей, сделай мне шаблон для страницы КОТОРАЯ ПОЛНОСТЬЮ ДИНАМИЧНА.
ТАМ НЕТУ КУСКОВ ХТМЛА К-Е МОЖНО СОЗДАТЬ ЗАРАНЕЕ.
Цитата |
Я вот как раз хотел спросить, нормально ли это, что в контроллере формируется html да еще и в перемешку с js, но постеснялся |
Есть варианты - иногда проще вернуть json - и руками создавать на клиенте все, иногда - вернуть готовый хтмл.
зависит часто от объема данных - скажем, в этой же прилаге было место, где аяксом подгружалось дерево <ul>\<li> списком, из ~800элементов - так браузеры подвисали, а ие вообще не мог отрендерить это дерево.
Переделав на возврат json-a, а создание хтмла тегов на клиенте этой проблемы нет.
Но конкретно в данном случае просто нету другого варианта. Ибо весьма разнообразный контент, те же гриды я не могу создать на клиенте. Как и кучу всяких разных штук.
Спустя 2 минуты, 4 секунды (14.06.2012 - 12:02) vital написал(а):
Цитата (stepan @ 14.06.2012 - 10:57) |
Invis1ble из этого можно было бы раскидать как должно быть в идеале, но мне лень, тем более vital задачу решил P.S. Лишь бы не пришлось встретиться с этим творением. |
Ни пользоваться, ни дорабатывать это тебе никто никогда в жизни не даст, не переживай.
Спустя 2 минуты, 34 секунды (14.06.2012 - 12:05) vital написал(а):
Цитата |
И способ через жопу.(вместо обычного php шаблонизатора) |
Сделаешь лучше - заплачу мою месячную зп.
Если согласен - напишу тз и выложу публично.
Если не сделаешь - ты мне.
Слабо?
Спустя 2 минуты, 33 секунды (14.06.2012 - 12:07) TMake написал(а):
Цитата (vital @ 14.06.2012 - 13:00) |
Есть варианты - иногда проще вернуть json - и руками создавать на клиенте все, иногда - вернуть готовый хтмл. |
Но пихать все в один контроллер не стоит, а где же MVC, ведь в твоей портянки такой микс.
Спустя 59 секунд (14.06.2012 - 12:08) vital написал(а):
Цитата |
тем более vital задачу решил |
не совсем =\
залез в код фреймворка и почти все сделал, осталость только найти где навешиваются евенты на кнопки в гриде, к-й CButtonColumn и тоже продублировать
Спустя 1 минута, 48 секунд (14.06.2012 - 12:10) TMake написал(а):
Цитата (vital @ 14.06.2012 - 13:02) |
Ни пользоваться, ни дорабатывать это тебе никто никогда в жизни не даст, не переживай. |
Не уж то завышенная само оценка???
И слава богу.
Спустя 7 секунд (14.06.2012 - 12:10) vital написал(а):
Цитата (stepan @ 14.06.2012 - 11:07) | ||
Но пихать все в один контроллер не стоит, а где же MVC, ведь в твоей портянки такой микс. |
Тоже самое что и на пост выше.
Там нету другого варианта.
Спустя 2 минуты, 21 секунда (14.06.2012 - 12:12) vital написал(а):
Инпост, все-равно смотришь тему - включите мне чат вверху плиз.
Спустя 8 минут, 34 секунды (14.06.2012 - 12:21) redreem написал(а):
Цитата |
Но не навешиваются js скрипты |
т.е. не срабатывают автоматом после прогрузки?
если в этом проблема, то это нормально - сунь их в функцию, а функцию вызови после приема контента.
Спустя 2 минуты, 16 секунд (14.06.2012 - 12:23) vital написал(а):
Цитата (stepan @ 14.06.2012 - 11:10) | ||
Не уж то завышенная само оценка??? И слава богу. |
Не совсем.
Просто никто из вас не попробовал задуматься о треде, но как писать сразу что фуу ты не выводищь в шаблон так сразу все горазды.
Так вот, там есть шаблоны. Много шаблонов. А еще кеширование в мемкеш статических кусков, автогзип-минифай и куча всего прочего. Вот только к сути треда не относится.
А еше писать госприлаги не дадут никогда фрилансеру.
Спустя 4 минуты, 23 секунды (14.06.2012 - 12:28) vital написал(а):
Цитата (redreem @ 14.06.2012 - 11:21) | ||
т.е. не срабатывают автоматом после прогрузки? если в этом проблема, то это нормально - сунь их в функцию, а функцию вызови после приема контента. |
не совсем. Я же спецом про фреймоврк уточнил.
т.е. мои скрипты я знаю как выполнить
Есть еще скрипты, к-е относятся к виджетам фреймворка - дефолтные обработчики вских кнопок\евентов. И вот они подключаются там каким-то внутренним способом в фреймоврке я не совсем точно представляю как.
Сами файлы я подключил отдельно, они на странице есть, но вот как фреймворк навешивает обработчики на скажем кнопку удалить в гриде(например) - я хз. Суть треда именно в том, что что еще надо сделать что бы навесились евенты дефолтные, посколько где генерится яваскрипт не понятно.
Спустя 10 минут, 8 секунд (14.06.2012 - 12:38) redreem написал(а):
покажи js кусок, который оказывается в браузере после приема. предположу что проблема связана с затиранием привязки событий фреймворка жкверевскими методами, такими как live например. из php куска воссоздавать js визуально - влом.
Спустя 2 минуты, 22 секунды (14.06.2012 - 12:40) Семён написал(а):
! |
Семён |
Спустя 1 минута, 39 секунд (14.06.2012 - 12:42) vital написал(а):
Цитата |
покажи js кусок, который оказывается в браузере после приема |
Да нету этого куска.(он то мне и нужен)
Ничего там не затирается потому что нечему.
В том и суть, что как Yii генерит свой встроенный js и как его навешивает? И как мне попросить это сделать?
Спустя 1 минута, 14 секунд (14.06.2012 - 12:43) vital написал(а):
Цитата (redreem @ 14.06.2012 - 11:38) |
покажи js кусок, который оказывается в браузере после приема. предположу что проблема связана с затиранием привязки событий фреймворка жкверевскими методами, такими как live например. из php куска воссоздавать js визуально - влом. |
Собственно яваскрипт в контроллере - я потому и написал, что тот js к-й Yii генерит сам по себе - не появился.
В том и вопрос, что как сделать так, что бы дефолтный js появился.
Спустя 21 минута, 48 секунд (14.06.2012 - 13:05) redreem написал(а):
$grid = $this->widget('zii.widgets.grid.CGridView', array(
...
'afterAjaxUpdate'=>'function(id) { $(' . 'grid_' . $n ').yiiGridView.update(id); }',
...
Спустя 5 минут, 59 секунд (14.06.2012 - 13:11) vital написал(а):
Цитата |
'afterAjaxUpdate'=>'function(id) { $(' . 'grid_' . $n ').yiiGridView.update(id); }', |
Этот код не сработает
Точно так же как не сработают клики по кнопке удалить, не сработает клик по чекбоксу для выделить все и т.п.
Я с этого и начал
А не сработает т.к. yii не навесит эти все обработчики.
_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar