Страница 1 из 1

CGridView и ссылка

Добавлено: 2013.02.07, 09:55
tanchik
Здравствуйте!застряла на простом моменте и хоть убейте не пойму
Нужно в ячейке вывести картинку и ссылку внизу
делаю так

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

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array('name'=>'image',
              'type'=>'html',
              'value'=> "CHtml::image('image/".$data->image."').CHtml::link('Начать чат', Yii::app()->createUrl('user/startchat', array('id'=>'".$data->id."')))",
            ),
        array('name'=>'username',
              'value'=>$data->username,
            ),
        array('name' =>'id',
              'value'=> $data->id,
            ),
        'firstmessage',
));
но получаю

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

<img alt="" src="image/">
<a href="/index.php?r=user/startchat&id=">Начать чат</a>
т.е. мои переменные не экранируются. Пожалуйста помогите :oops:

Re: CGridView и ссылка

Добавлено: 2013.02.07, 10:03
Oscar
array('name'=>'image',
'type'=>'html',
'value'=> "CHtml::image('image/$data->image').CHtml::link('Начать чат', Yii::app()->createUrl('user/startchat', array('id'=>$data->id)))", что-то вроде этого.....
),

Re: CGridView и ссылка

Добавлено: 2013.02.07, 10:29
tanchik
Oscar писал(а):array('name'=>'image',
'type'=>'html',
'value'=> "CHtml::image('image/$data->image').CHtml::link('Начать чат', Yii::app()->createUrl('user/startchat', array('id'=>$data->id)))", что-то вроде этого.....
),
так вообще пустую ячейку выводит, к сожалению :(

Re: CGridView и ссылка

Добавлено: 2013.02.07, 11:04
Kilimangaro
tanchik писал(а): мои переменные не экранируются.
Должно быть, наоборот, экранируется, так?

Re: CGridView и ссылка

Добавлено: 2013.02.07, 11:10
Kilimangaro
Если я все правильно понял, то нужно посмотреть результат вот такой конструкции

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

<?php echo $data->image; echo $data->id; ?>

Re: CGridView и ссылка

Добавлено: 2013.02.07, 11:11
tanchik
Kilimangaro писал(а):
tanchik писал(а): мои переменные не экранируются.
Должно быть, наоборот, экранируется, так?
Ага, а помочь можете?

Re: CGridView и ссылка

Добавлено: 2013.02.07, 11:17
Kilimangaro
tanchik, опробуйте конструкции которые я указал чуть выше, в том месте где вы выводите свой виджет и сообщите результат

Re: CGridView и ссылка

Добавлено: 2013.02.07, 11:31
tanchik
Kilimangaro писал(а):Если я все правильно понял, то нужно посмотреть результат вот такой конструкции

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

<?php echo $data->image; echo $data->id; ?>
если делаю такой вывод вне виджета - то ничегошеньки не выводит
в виджете, данная конструкция

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

array('name' =>'id',
              'value'=> $data->id,
            ), 
выводит колонку с ид
ничего не понимаю :?:

Re: CGridView и ссылка

Добавлено: 2013.02.07, 11:45
Kilimangaro
То есть, вы хотите сказать что конструкция

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

echo $data->id
не выводит ничего, а если все тоже самое но просто вставить в поле выводимой таблицы, отображается? Но не отображается в случае, если обрамить его HTML тегом <a>? Это из разряда парадоксов. Ваш код с точки зрения Widget-а и HTML работоспособный, вы можете убедится в этом самостоятельно, если выкинете ваши $data-id и $data->image и определите чуть выше вызова виджета, выдуманные переменные $image = "pic.jpg" и $id = 3; Это должно выглядеть примерно так:

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

$image = "pic.jpg";
$id = 3;
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array('name'=>'image',
              'type'=>'html',
              'value'=> "CHtml::image('image/".$image."').CHtml::link('Начать чат', Yii::app()->createUrl('user/startchat', array('id'=>'".$id."')))",
            ),
        array('name'=>'username',
              'value'=>$data->username,
            ),
        array('name' =>'id',
              'value'=> $data->id,
            ),
        'firstmessage',
)));
Вы убедитесь в том, что все работает правильно, по крайней мере у меня, этот код работает совершенно правильно.

Re: CGridView и ссылка

Добавлено: 2013.02.07, 11:52
Kilimangaro
Но если все же, каким-то магическим способом, все выводится, при условии отсутствия хелпера CHtml, то плюньте на него, решайте проблемы методом тыка и перебора, попробуйте убрать его и вписать вручную html код, убедитесь, что в этом случае все работает как надо. После будем думать дальше, что делать с капризным хелпером

Re: CGridView и ссылка

Добавлено: 2013.02.07, 12:15
tanchik
Kilimangaro писал(а):Но если все же, каким-то магическим способом, все выводится, при условии отсутствия хелпера CHtml, то плюньте на него, решайте проблемы методом тыка и перебора, попробуйте убрать его и вписать вручную html код, убедитесь, что в этом случае все работает как надо. После будем думать дальше, что делать с капризным хелпером
Я наверное сошла с ума
делаю такой вывод

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

print_r($expert);
echo $expert->id;
 
модель вся выводится на печать, а атрибут модели ИД - нет :( Я что-то делаю не правильно? Очень нужна помощь!

Re: CGridView и ссылка

Добавлено: 2013.02.07, 12:22
Kilimangaro
tanchik, уже хорошо! По крайней мере мы исключили Chtml и CGridView. Я боюсь дальше, простыми гаданиями и представлениями вашей архитектуры в голове, решить проблему не удастся. Нужно работать с кодом, с базой данных которая у вас, смотреть что за проблема. Я могу посоветовать, только абстрагироваться, другими словами создать очень простой пример, того, что вы хотите реализовать и добиться его работоспособности. В противном случае необходим код вашего проекта, дамп базы данных в виде *.sql файла и можно попробовать что-то найти.

Re: CGridView и ссылка

Добавлено: 2013.02.07, 12:29
tanchik
Спасибо за помощь, буду ковырять.Надеюсь все получится!

Re: CGridView и ссылка

Добавлено: 2013.02.07, 12:33
Kilimangaro
tanchik, если решили абстрагироваться, то советую создать параллельно, стандартный проект и сделать, что-то похожее на вашу задачу, но значительно проще (опустите детали). Создание этого в новом проекте облегчит задачу, ничто не будет мешать, вы будете уверены, что написанный вами код ранее, нигде не способствует возникновению необъяснимых ситуаций.

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

Re: CGridView и ссылка

Добавлено: 2013.02.07, 12:35
alaevka
Попробуйте вот так:

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

array(
                    'type' => 'raw',
                    'value' => 'echoLinkandImage()',
                ),
А перед выводом CGridView:

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

function echoLinkandImage() {
       //формируете ссылку и картинку в переменной, предположим $data
       return $data;
}

Re: CGridView и ссылка

Добавлено: 2013.02.07, 13:46
anton44eg
анонимные функции, не?

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

array(
                    'type' => 'raw',
                    'value' => function($data) {
// some staff
return $url;
} ,
                ), 

Re: CGridView и ссылка

Добавлено: 2013.02.07, 13:47
Фриз
Надеюсь PHP 5.3 и выше.

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

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array(
            'name'=>'image',
            'type'=>'raw',
            'value' => function($data)
            {
                return CHtml::image("image/{$data->image}") . CHtml::link('Начать чат', array('user/startchat', 'id' => $data->id));
            }
        ),
        'username',
        'id',
        'firstmessage'
    )
));

Re: CGridView и ссылка

Добавлено: 2013.02.07, 14:43
tanchik
Фриз писал(а):Надеюсь PHP 5.3 и выше.

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

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array(
            'name'=>'image',
            'type'=>'raw',
            'value' => function($data)
            {
                return CHtml::image("image/{$data->image}") . CHtml::link('Начать чат', array('user/startchat', 'id' => $data->id));
            }
        ),
        'username',
        'id',
        'firstmessage'
    )
));
 
Благодарю, Ваш вариант отлично работает :D Спасибо огромное!