Je suis en train de créer une webapp avec le framework Yii2 qui fournira aux utilisateurs (connectés) la possibilité 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 la méthode sendFile()
.
Comment puis-je créer un bouton qui appelle l'action spécifique actionDownload
au clic dans une GridView (la liste des documents)?
Étendez la déclaration de modèle 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ée à l'ensemble d'icônes existant. Vous pouvez voir par exemple comment les icônes par défaut sont rendues ici .
Dans le cas commun, vous n'avez même pas besoin de créer un lien manuellement, il sera construit en fonction du nom du bouton et de la clé primaire du modèle, par exemple /download?id=1
.
Dans le cas où vous souhaitez que la propriété spéciale url existe, elle s'appelle $ urlCreator , mais vous pouvez également la modifier directement dans la fermeture du rendu du bouton, 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 de la grille kartik-v yii2?
Voir l'exemple suivant J'ai ajouté un 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 de modèle 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}'
],
],
]);