CGridView и OnClick

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

CGridView и OnClick

Сообщение Onotole »

привет. Ситуация следующая. Мне нужно для каждого <tr> при выводе через CGridView сделать событие onclick с вызовом функции, Которая будет перезавать id таблицы.
Код:

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

public function actionIndex()
    {
                $dataProvider=new CActiveDataProvider('Table', array(
                    'pagination' => array(
                         'pageSize' => 30,
                    ),)
                 );
        $this->render('index',array(
            'dataProvider'=>$dataProvider,
        ));

    } 
index.php

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

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'bans-grid',
    'dataProvider'=>$dataProvider,

    'columns'=>array(
                'bid',
                array(    
                    'name'=>'created',
                    'value'=>'date("d-m-Y", $data->ban_created)',
                    'htmlOptions'=>array('onclick'=>'alert(\'this.bid\');'),
                ),
                array(
                    'name'=>'Комментарии',
                    'value'=>'$data->commentsCount',  
                ),
                array(
                    'name'=>'Файлы',
                    'value'=>'$data->filesCount',  
                ),
    ),
        
)); ?>
Пока для теста сделал

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

'htmlOptions'=>array('onclick'=>'alert(\'this.bid\');'), 
но он выводит алерт с содержимым this.bid , я туда писал $data->bid - он выводит так, если обрамляю апострофами, то ругается на несуществующую переменную $data

Скажите, куда копать
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: CGridView и OnClick

Сообщение Onotole »

Неужели и вправду никто не знает?
Vladimir P
Сообщения: 60
Зарегистрирован: 2012.08.15, 15:41

Re: CGridView и OnClick

Сообщение Vladimir P »

Вы желаете чего-то, не очень понятно чего. Из вступления я не совсем понял, а отталкиваясь от кода вы хотите чего-то типа

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

'columns'      => array(
        array(
            'name'        => 'bid',            
            'type'  => 'raw',
            'value' => 'Chtml::link($data->bid, "", array("onclick"=>"alert($data->bid)"))'
        ),
...
В htmlOptions вы $data наверно не получите, только в value, отсюда и танцуйте. Если хотите по клику вызывать функцию с id строки в качестве аргумента, то вот это сработает. Но это же будет писать onclick в каждую ячейку столбца, фу какая гадость :) Я бы отдельный js код написал в три с половиной строчки.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: CGridView и OnClick

Сообщение Onotole »

Vladimir P писал(а):Вы желаете чего-то, не очень понятно чего. Из вступления я не совсем понял, а отталкиваясь от кода вы хотите чего-то типа

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

'columns'      => array(
        array(
            'name'        => 'bid',            
            'type'  => 'raw',
            'value' => 'Chtml::link($data->bid, "", array("onclick"=>"alert($data->bid)"))'
        ),
...
В htmlOptions вы $data наверно не получите, только в value, отсюда и танцуйте. Если хотите по клику вызывать функцию с id строки в качестве аргумента, то вот это сработает. Но это же будет писать onclick в каждую ячейку столбца, фу какая гадость :) Я бы отдельный js код написал в три с половиной строчки.
Скажи, Как бы сделал ты? =) Ато я тут костылей понапридумывал, но некошерно всё както
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: CGridView и OnClick

Сообщение Onotole »

Вообще в идеале мне бы для tr событие сделать. Дело в том, что я хочу выводить модалькой доп. Инфу по этой строке. Надеюсь сейчас понятнее объяснил =)
Vladimir P
Сообщения: 60
Зарегистрирован: 2012.08.15, 15:41

Re: CGridView и OnClick

Сообщение Vladimir P »

Вот это чрезвычайно грубый вариант, подставь сюда свои имена таблицы и функции, показывающей модальное окно, и облагородь :)

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

<? Yii::app()->clientScript->registerScript('VseModalkuPosony', "
$('#idTablici tr').bind('click', function(){
        $.ajax({
                            cache: false,
                            url: '/script-s-dannymi/'+$(this).find('td:first-child').text(),
                            success: function(data) {
                                Modalko();
                            }
                        });
});
    "); ?>
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: CGridView и OnClick

Сообщение Onotole »

Ну согласись, это уж совсем грубый вариант =)))
Я всё равно не поверю, что нет возхможности передать через РНР
Поищу ещё
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: CGridView и OnClick

Сообщение Onotole »

Для tr в CGridView не задается ID, только класс
Vladimir P
Сообщения: 60
Зарегистрирован: 2012.08.15, 15:41

Re: CGridView и OnClick

Сообщение Vladimir P »

Onotole писал(а):Ну согласись, это уж совсем грубый вариант =)))
Я всё равно не поверю, что нет возхможности передать через РНР
Поищу ещё
Грубый он в том, что я не проверял работоспособность, может там где скобка не закрыта или точки с запятой нету. А так самое то. Или я совсем не понимаю задачи. При чем тут PHP, собственно, задача же что-то на клиенте изобразить.
Для tr в CGridView не задается ID, только класс
Я в своем примере не использую ни ID, ни классов у tr. Я предполагаю, что id выводится в первом столбце и беру оттуда.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: CGridView и OnClick

Сообщение Onotole »

Я и говорю, что id я выводить не буду в первом столбце. Так то я бы уже пришпандорил этот костыль давно и успокоился.
Vladimir P
Сообщения: 60
Зарегистрирован: 2012.08.15, 15:41

Re: CGridView и OnClick

Сообщение Vladimir P »

Под любой другой столбец переделывается парой символов :)
Если вообще не хотите, чтобы id был виден невооруженным глазом, загоните его как атрибут куда-нибудь в первую ячейку, почему бы и нет.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: CGridView и OnClick

Сообщение Onotole »

Всё гораздо проще оказалось =)

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

'rowHtmlOptionsExpression'=>'array("onClick" => "alert($data->bid)", "style" => "cursor:pointer")', 
Ответить