2015-01-19 3 views
21

Я создаю webapp с фреймворком Yii2, который предоставит пользователям (зарегистрированным) возможность загружать предварительно загруженные файлы администраторами.Extend GridView ActionColumn с дополнительным значком

Я создал действие actionDownload в конкретном контроллере, который вызывает метод sendFile().

Как создать кнопку, вызывающую определенное действие actionDownload при щелчке в GridView (список документов)?

+1

Где именно вы хотите разместить эту кнопку? В столбце действий с кнопками, такими как просмотр/обновление/удаление? Или в отдельной колонке? Как загружаются файлы? В архиве отдельно или один файл для каждой строки GridView? Пожалуйста, предоставьте более подробную информацию. – arogachev

+0

Привет, спасибо за ответ. Мне нужно поместить кнопку в столбец действия. Каждая строка в GridView имеет один конкретный файл, поэтому мне нужна одна кнопка для каждой строки Grofview. – AleCat83

ответ

35

Продлить декларацию template и buttons так:

[ 
    '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', 
       ] 
      ); 
     }, 
    ], 
], 

значок загрузки с URL будет добавлен в существующий набор иконок. Вы можете увидеть, например, как отображаются значки по умолчанию here.

В общем случае вам даже не нужно строить связь вручную, она будет построена на основе имени кнопки и первичного ключа модели, например /download?id=1.

В случае, если вы хотите различный URL специальное свойство существует, то он называется $urlCreator, но вы также можете изменить его прямо в замыкании кнопки рендеринга, например:

'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', 
     ] 
    ); 
}, 
+0

Это хорошо работает, просто замените glyphicon-arrow-download на glyphicon-download, чтобы отобразить значок. – Ludo

2

Как добавить еще одну кнопку действия в kartik- v yii2 столбец действия сетки?

Просто см. Следующий пример. Я добавил кнопку копирования.

[ 
    'class' => 'kartik\grid\ActionColumn', 
    'dropdown' => false, 
    'vAlign'=>'middle', 
    'template' => '{delete} {view} {update} {copy}', 
    'urlCreator' => function($action, $model, $key, $index) { 
      return Url::to([$action,'id'=>$key]); 
    }, 
    'buttons'=>[ 
     'copy' => function ($url, $model, $key) { 
      return Html::a('<span class="glyphicon glyphicon-copy"></span>', ['copy', 'id'=>$model->id],['title'=>'Copy']); 
     }, 
    ],  
    'viewOptions'=>['role'=>'modal-remote','title'=>'View','data-toggle'=>'tooltip'], 
    'updateOptions'=>['role'=>'modal-remote','title'=>'Update', 'data-toggle'=>'tooltip'], 
    'deleteOptions'=>['role'=>'modal-remote','title'=>'Delete', 
         'data-confirm'=>false, 'data-method'=>false,// for overide yii data api 
         'data-request-method'=>'post', 
         'data-toggle'=>'tooltip', 
         'data-confirm-title'=>'Are you sure?', 
         'data-confirm-message'=>'Are you sure want to delete this item'], 
], 
1

атрибут шаблона важно

echo GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     'id', 
     'title', 
     ['class' => 'yii\grid\ActionColumn', 
      'buttons' => [ 
       'additional_icon' => function ($url, $model, $key) { 
        return Html::a ('<span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> ', ['controller/action', 'id' => $model->id]); 
       }, 
      ], 
      'template' => '{update} {view} {delete} {additional_icon}' 


     ], 
    ], 
]); 
Смежные вопросы