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