GridView - добавить ссылку к имени товара.

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

GridView - добавить ссылку к имени товара.

Сообщение remix »

Добрый день.

Есть таблица GridView, где показываются имена товаров, необходимо сделать ссылку на "Имя товара". Чтобы клиент кликая по "Имени товара" попадал на страницу товара.

Через обычную таблицу с foreach - это легко сделать на Yii2, но хочу реализовать через таблицу GridView. Делаю ссылку на поле "name".

В интернете нашел код, который делает ссылку но пытается перенаправить на функцию "Update" - а мне нужно, чтобы ссылка вела на сам товар.

Cсылка на товар у меня имеет вид:

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

http://сайт/категория/имя-товара.html


Мой код таблицы GridView с ссылкой:

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

<?php Pjax::begin(['timeout' => 10000]); ?>
        <?= GridView::widget([
               'dataProvider' => $dataProvider,
               'filterModel' => $searchModel,
               'tableOptions' => [
                   'class' => 'table table-striped table-hover text-center'
               ],
               'summary'=>'', // скрыть               
                     'summary' => 'Показаны записи <strong>{begin}-{end}</strong> из <strong>{totalCount}</strong>.',
               'showHeader' => true,
               'columns' => [                   
                   //'name',
                	[
           		 'attribute' => 'name',
           		 'format' => 'raw',
           		 'value' => function($model){
             		 return Html::a($model->name, ['update']);
           		 },
        	  	],
                   'length',
                   'width',
                   'height',
                   'weight',    
               ],
           ]); ?>
       <?php Pjax::end(); ?>
В интернете не нашел примера реализации такой задачи. Прошу поддержки гуру...
Аватара пользователя
tugrik
Сообщения: 26
Зарегистрирован: 2016.03.11, 17:07

Re: GridView - добавить ссылку к имени товара.

Сообщение tugrik »

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

           return Html::a($model->name, $model->getProductLink());
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: GridView - добавить ссылку к имени товара.

Сообщение remix »

Переделал ссылку таким видом:

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

http://сайт/категория?param1=имя-товара&param2=.html
С помощью такого кода:

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

[
            'attribute' => 'name',
            'format' => 'raw',
            'value' => function($model){
              return Html::a($model->name, Url::to(['категория/', 'param1' => $model->url, 'param2' => '.html']));
            },
          ],
Но не открывается товар по такой ссылке - вероятно у меня контроллер не понимает такие ссылки (((

Как избавиться от этого param1 и param2, чтобы ссылка была слитной как тут:

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

http://сайт/категория/имя-товара.html
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: GridView - добавить ссылку к имени товара.

Сообщение remix »

tugrik писал(а): 2018.02.06, 16:20

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

           return Html::a($model->name, $model->getProductLink());
Пробовал твой метод - но чет я его не понимаю... Но я решил другим способом, а решение нашел здесь: http://www.webapplex.ru/gridview-vidzhe ... mework-2.x

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

[
            'attribute' => 'name',
            'format' => 'raw',
            'value' => function($model){
              $url = "http://сайт/категория/".$model->url.".html";             
              return Html::a($model->name, $url);
            },
          ],
Спасибо за поддержку - решил свою проблему! :D :D :D
Аватара пользователя
vitaxa_prog
Сообщения: 306
Зарегистрирован: 2011.06.06, 22:44
Откуда: Волноваха

Re: GridView - добавить ссылку к имени товара.

Сообщение vitaxa_prog »

remix писал(а): 2018.02.06, 17:26 Спасибо за поддержку - решил свою проблему!
Отличное решение проблемы :o
После вас, тот кто будет работать с этим кодом, вспомнит не один раз вас, незлым, тихим словом.

1. Напишите правило в urlManager
2. Там же, установите параметр suffix=>html
3. В модели создайте метод getProductLink
4. В grid вызывайте

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

'value' => function($model){            
              return Html::a($model->name, $model->getProductLink());
            },
В принципе ничего нет невозможного.
— Вы думаете?
— Для человека. С интеллектом.
Ответить