Extension de GridView ActionColumn avec icône supplémentaire

je suis en train de construire une webapp avec le cadre de Yii2 qui fournira aux utilisateurs (connectés) la capacité de télécharger des fichiers pré-téléchargés par les administrateurs.

j'ai créé l'action actionDownload dans le contrôleur spécifique qui appelle le sendFile() méthode.

Comment puis-je créer un bouton qui appelle l'action spécifique actionDownload sur un clic dans un GridView (la liste des documents)?

21
demandé sur Cimbali 2015-01-19 14:28:21

3 réponses

Étendre la déclaration de template et boutons comme ceci:

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

L'icône de téléchargement avec l'url sera ajouté à l'ensemble existant des icônes. Vous pouvez voir par exemple comment les icônes par défaut sont rendues ici.

dans le cas commun où vous n'avez même pas à construire le lien manuellement, il sera construit sur la base du nom du bouton et de la clé primaire du modèle, par exemple /download?id=1.

dans le cas où vous voulez une url différente spéciale la propriété existe, elle s'appelle $ urlCreator, mais vous pouvez aussi le changer directement dans le bouton de rendu de fermeture, par exemple:

'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',
        ]
    );
},
37
répondu arogachev 2017-09-19 12:11:35

comment ajouter un autre bouton d'action dans la colonne d'action kartik-v yiii2 grid?

voir l'exemple suivant.J'ai ajouté le bouton de copie.

[
    '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'], 
],
2
répondu Muhammad Shahzad 2016-08-28 18:01:26

l'attribut template est important

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}'


        ],
    ],
]);
1
répondu Rafal 2017-02-06 18:53:59