Я работаю над модулем, в котором мне нужно отобразить таблицу в базе данных с помощью GridView, и мне нужно иметь ActionColumn
, где у меня есть значок.Если значок получил щелчок, он должен показать модал с формой, имеющей тип INPUT_WIDGET
, которые являются select2, touchspin, rangeInput all из Kartik-v.Поэтому моя проблема в том, что INPUT_WIDGET
ведет себя необычно, select2 продолжает загружаться, touchspin не вращается, а rangeInput не работает.
Страница просмотра с кодом GridView выглядит следующим образом:
<?php
use kartik\builder\Form;
use kartik\form\ActiveForm;
use kartik\grid\GridView;
use yii\bootstrap\Modal;
use yii\helpers\Html;
use yii\helpers\Url;
$this->title = 'Update Activity Summary';
$this->params['breadcrumbs'][] = ['label' => 'Activity Summaries', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
$this->registerJs(
"$(function(){
// changed id to class
$('.modalButton').click(function (){
$.get($(this).attr('href'), function(data) {
$('#modal').modal('show').find('#modalContent').html(data)
});
return false;
});
});"
);
?>
<div class="activity-summary-create">
<h1><?=Html::encode($this->title)?></h1>
<?php
echo GridView::widget(
[
'dataProvider' => $dataprovider,
'columns' => [
'activity_name',
'project.createdBy.emp_name',
'createdBy.emp_name',
'progress',
'taken_hours',
'est_hours',
[
'attribute' => 'details',
'class' => 'kartik\grid\ExpandRowColumn',
'header' => 'details',
'width' => '50px',
'value' => function ($model, $key, $index, $column) {
return GridView::ROW_COLLAPSED;
},
'detail' => function ($model, $key, $index, $column) {
return Yii::$app->controller->renderPartial('activity_details', ['model' => $model]);
},
'expandIcon' => '<span class="glyphicon glyphicon-chevron-right"></span>',
'collapseIcon' => '<span class="glyphicon glyphicon-chevron-down"></span>',
'allowBatchToggle' => false,
'expandOneOnly' => true
],
[
'class' => 'yii\grid\ActionColumn',
'header' => 'Update Summary',
'buttons' => [
'update_summary' => function ($url, $model, $key) {
return "<a class=\"modalButton\" href=\"?r=activity-summary/summary-edit&id=$model->activity_id\"><span class=\"glyphicon glyphicon-upload\" aria-hidden=\"true\"></span></a>";
}
],
'template' => '{update_summary}'
]
]
]
);
Modal::begin(
[
'header' => 'Update Summary',
'id' => 'modal',
'size' => 'modal-lg'
]
);
echo "<div id='modalContent'></div>";
Modal::end();
?>
Страница просмотра формы в модальном режиме выглядит следующим образом:
<?php
use kartik\builder\Form;
use kartik\form\ActiveForm;
use yii\helpers\Html;
$form = ActiveForm::begin(['type' => ActiveForm::TYPE_VERTICAL]);
echo Form::widget(
[
'model' => $model,
'form' => $form,
'attributes' => [
'summary' => ['type' => Form::INPUT_TEXTAREA, 'options' => ['placeholder' => 'say about the activity..']]
]
]
);
echo Form::widget(
[
'model' => $model,
'form' => $form,
'columns' => 4,
# 'compactGrid' => true,
'attributes' => [
'taken_hours' => [
'type' => Form::INPUT_WIDGET,
'widgetClass' => '\kartik\touchspin\TouchSpin'
],
'actual_date' => [
'type' => Form::INPUT_WIDGET,
'widgetClass' => '\kartik\select2\Select2'
],
'progress_added' => [
'type' => Form::INPUT_WIDGET,
'label' => Html::label('Progress (%)'),
'widgetClass' => '\kartik\range\RangeInput',
'options' => ['width' => '100%',
'html5Container' => ['style' => 'width:100px'],
'html5Options' => ['min' => 0, 'max' => 100],
'addon' => ['append' => ['content' => '%']]
]
],
'category_id' => [
'type' => Form::INPUT_WIDGET,
'widgetClass' => '\kartik\select2\Select2',
'options' => [
'data' => $data['Category']
]
],
'actions' => [
'type' => Form::INPUT_RAW,
'value' => Html::submitButton(
'Submit',
['class' => 'btn btn-primary ml-2']
)
]
]
]
);
ActiveForm::end();
Изображение GridView со значком для запуска модального
Изображение модальной формы, имеющей INPUT_WIDGET
Заранее спасибо.