PHP:如何根据gridview中点击按钮的行ID在模式框中显示数据?

时间:2017-02-08 05:37:12

标签: php jquery twitter-bootstrap bootstrap-modal yii2-basic-app

我有一个Yii2基本应用程序,它包含一个包含kartik GridView的 index.php 视图。有一个操作列,其中包含view按钮,如果点击该页面,会将页面重定向到 view.php 的视图。

enter image description here

如果点击查看按钮,页面将重定向到 view.php ,并根据ID显示数据,

对于上图中的示例,该表格在视图列中包含两个按钮。如果点击了第一个(顶部)按钮,它将在 id 列(表格左侧)的id上显示数据,因此它将显示具有id = 1的数据。 我已经成功创建了这个动作。

但我需要在模式框中显示数据。所以我使用yii\bootstrap\Modal。我已成功在模式框中显示数据。对于首次点击,它会弹出包含基于id的数据的模式框,但对于下一个点击按钮,它还会显示基于id的数据第一次点击按钮。

上图中的示例: 我第一次点击第二行(id = 2)中的按钮,然后弹出包含id=2数据的模式框,然后点击第一行(id = 1),它还会弹出包含id = 2数据的 modalbox

这是我在index.php中的代码:

<?php

use yii\helpers\Html;
use kartik\grid\GridView;
use yii\widgets\Pjax;
use yii\helpers\Url;
use yii\bootstrap\Modal;

<div class="students-index">
<?=
GridView::widget([
    'dataProvider' => $dataProvider,
    'tableOptions' => ['class' => 'table table-hover'],
    'columns' => [
        [
            'label' => 'id',
            'value' => function($data) {
                return $data->id;
            }
        ],
        [
            'label' => 'Name',
            'value' => function($data) {
                return $data->name;
            }
        ],
        [
            'label' => 'Birthdate',
            'value' => function($data) {
                return $data->Birthdate;
            }
        ],
        [
            'label' => 'Sex',
            'value' => function($data) {
                return $data->Sex;
            }
        ],
        [
            'class' => 'yii\grid\ActionColumn',
            'header' => 'View',
            'template' => '{view}',
            'buttons' => [
                'view' => function ($url, $model) {
            $icon = '<span class="glyphicon glyphicon-eye-open"></span>';
            return Html::a($icon, $url, [
                        'title' => Yii::t('app', 'View'),
                        'data-toggle' => "modal",
                        'data-target' => "#myModal",
            ]);
        },
            ],
            'urlCreator' => function ($action, $model, $key, $index) {
        if ($action === 'view') {
            $url = Url::toRoute(['/school/students/view', 'id' => $model->faktur_out_id], ['data-method' => 'post',]);
            return $url;
        }
    }
        ]
    ],
]);
?>

</div>

<?php
Modal::begin([
'id' => 'myModal',
]);
 Pjax::begin([
     'id'=>'pjax-modal','timeout'=>false,
     'enablePushState'=>false,
     'enableReplaceState'=>false,
 ]); 

 Pjax::end();

 Modal::end();
?>

<?php
$this->registerJs("
$('#myModal').on('show.bs.modal', function (event) {
    var button = $(event.relatedTarget)
    var href = button.attr('href') 
    $.pjax.reload('#pjax-modal', {
    'url' => href,
    });
"); ?>

如何根据id?

在模态框中显示数据

但实际上我还没有理解$this->registerJs("......")。 也许任何人都可以用简单的语言解释它。

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

$this->registerJs(" "); 只是Yii框架中的一个函数,它允许您在" "之间编写javascript。

试试这个:

<?php
Modal::begin([
'id' => 'myModal',
]);
 Pjax::begin([
     'id'=>'myModal','timeout'=>false,
     'enablePushState'=>false,
     'enableReplaceState'=>false,
 ]); 

 Pjax::end();

 Modal::end();
 ?>

<?php
$this->registerJs("
$('#myModal').on('show.bs.modal', function (event) {
    var button = $(event.relatedTarget)
    var href = button.attr('href') 
    $.pjax.reload('#myModal', {
    'url' => href,
    });
"); ?>