CGridView и ссылка

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

CGridView и ссылка

Сообщение 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:

Аватара пользователя
Oscar
Сообщения: 35
Зарегистрирован: 2012.11.24, 10:46
Откуда: Baku
Контактная информация:

Re: CGridView и ссылка

Сообщение Oscar »

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

tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CGridView и ссылка

Сообщение tanchik »

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

Аватара пользователя
Kilimangaro
Сообщения: 27
Зарегистрирован: 2013.02.04, 19:17
Откуда: Украина, Днепропетровск

Re: CGridView и ссылка

Сообщение Kilimangaro »

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

Аватара пользователя
Kilimangaro
Сообщения: 27
Зарегистрирован: 2013.02.04, 19:17
Откуда: Украина, Днепропетровск

Re: CGridView и ссылка

Сообщение Kilimangaro »

Если я все правильно понял, то нужно посмотреть результат вот такой конструкции

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

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

tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CGridView и ссылка

Сообщение tanchik »

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

Аватара пользователя
Kilimangaro
Сообщения: 27
Зарегистрирован: 2013.02.04, 19:17
Откуда: Украина, Днепропетровск

Re: CGridView и ссылка

Сообщение Kilimangaro »

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

tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CGridView и ссылка

Сообщение tanchik »

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

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

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

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

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

Аватара пользователя
Kilimangaro
Сообщения: 27
Зарегистрирован: 2013.02.04, 19:17
Откуда: Украина, Днепропетровск

Re: CGridView и ссылка

Сообщение 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',
)));
Вы убедитесь в том, что все работает правильно, по крайней мере у меня, этот код работает совершенно правильно.

Аватара пользователя
Kilimangaro
Сообщения: 27
Зарегистрирован: 2013.02.04, 19:17
Откуда: Украина, Днепропетровск

Re: CGridView и ссылка

Сообщение Kilimangaro »

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

tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CGridView и ссылка

Сообщение tanchik »

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

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

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

Аватара пользователя
Kilimangaro
Сообщения: 27
Зарегистрирован: 2013.02.04, 19:17
Откуда: Украина, Днепропетровск

Re: CGridView и ссылка

Сообщение Kilimangaro »

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

tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CGridView и ссылка

Сообщение tanchik »

Спасибо за помощь, буду ковырять.Надеюсь все получится!

Аватара пользователя
Kilimangaro
Сообщения: 27
Зарегистрирован: 2013.02.04, 19:17
Откуда: Украина, Днепропетровск

Re: CGridView и ссылка

Сообщение Kilimangaro »

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

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

Аватара пользователя
alaevka
Сообщения: 77
Зарегистрирован: 2010.03.12, 11:34
Контактная информация:

Re: CGridView и ссылка

Сообщение alaevka »

Попробуйте вот так:

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

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

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

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

Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: CGridView и ссылка

Сообщение anton44eg »

анонимные функции, не?

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

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

Фриз
Сообщения: 85
Зарегистрирован: 2012.01.20, 17:23

Re: CGridView и ссылка

Сообщение Фриз »

Надеюсь 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'
    )
));

tanchik
Сообщения: 73
Зарегистрирован: 2011.11.29, 16:18

Re: CGridView и ссылка

Сообщение 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 Спасибо огромное!

Ответить