Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extend GridView ActionColumn with additional icon

Tags:

I'm building a webapp with Yii2 framework that will provide users (logged in) the capability to download pre-uploaded files by administrators.

I've created the action actionDownload in the specific controller that call the sendFile() method.

How can I create a button that call the specific action actionDownload on click in a GridView (the list of documents)?

like image 799
AleCat83 Avatar asked Jan 19 '15 11:01

AleCat83


1 Answers

Extend declaration of template and buttons like this:

[     'class' => 'yii\grid\ActionColumn',     'template' => '{download} {view} {update} {delete}',     'buttons' => [         'download' => function ($url) {             return Html::a(                 '<span class="glyphicon glyphicon-arrow-down"></span>',                 $url,                  [                     'title' => 'Download',                     'data-pjax' => '0',                 ]             );         },     ], ], 

The download icon with the url will be added to existing set of icons. You can see for example how default icons are rendered here.

In common case you don't even have to build link manually, it will be constructed based on the button name and model primary key, for example /download?id=1.

In case you want different url special property exists, it's called $urlCreator, but you can also change it right in the button rendering closure, for example:

'download' => function ($url, $model) {     return Html::a(         '<span class="glyphicon glyphicon-arrow-download"></span>',         ['another-controller/anotner-action', 'id' => $model->id],          [             'title' => 'Download',             'data-pjax' => '0',         ]     ); }, 
like image 172
arogachev Avatar answered Sep 22 '22 13:09

arogachev