himiklab / yii2-jqgrid-widget

MIT License
21 stars 15 forks source link

Jqgrid and DepDrod #15

Closed valerangb3 closed 6 years ago

valerangb3 commented 7 years ago

Здравствуйте, подскажите пожалуйста, как можно организовать передачу выбранного значения depdrop'а, чтобы можно было загрузить данные в jqgrid, зависящие от выбранных значений в depdrop'e? Т.е., например, чтобы виджет jqgrid срабатывал после того, как установлены все значения в depdrop'e?

default

Мой вид

<?php
use himiklab\jqgrid\JqGridWidget;
use yii\helpers\Url;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use kartik\depdrop\DepDrop;
use app\models\Groups;
?>
<div class="wrap">
    <div class="row">
        <?php
        $form = ActiveForm::begin();
        $query = \app\models\FormObuch::find()->all();
        $items = ArrayHelper::map($query,'idf','name_f');
        ?>
        <div class="col-sm-3">
            <?php
            echo $form->field($model, 'name_f')->dropDownList($items,
                [
                    'id'=>'cat-id',
                    'prompt' => 'Выбор формы...',
                ]);
            ?>
        </div>
        <div class="col-sm-3">
            <?php
            // Child # 1
            $model = new Groups();
            echo $form->field($model, 'name_g')->widget(DepDrop::classname(), [
                //'type'=>DepDrop::TYPE_SELECT2,
                'options'=>['id'=>'subcat-id'],
                'pluginOptions'=>[
                    'depends'=>['cat-id'],
                    'placeholder'=>'Выбор группы...',
                    'url'=>Url::to(['/post/subcat'])
                ]
            ]);
            ?>
        </div>
        <?php
            ActiveForm::end();
        ?>
    </div>
    <?= JqGridWidget::widget([
        'requestUrl' => Url::to('jqgrid'),
        'gridSettings' => [
            'colNames' => ['Фамилия', 'Имя', 'Отчество', 'Дата рождения', 'Номер зачетки'],
            'colModel' => [
                ['name' => 'famil', 'index' => 'famil', 'editable' => true],
                ['name' => 'name', 'index' => 'name', 'editable' => true],
                ['name' => 'otchestvo', 'index' => 'otchestvo', 'editable' => true],
                [
                    'name' => 'date_birth', 'index' => 'date_birth', 'editable' => true,
                    'formatter' => "date",
                    'formatoptions' => ['srcformat' => "ISO8601Long", 'newformat' => "m/d/Y"],
                ],
                ['name' => 'num_zuch', 'index' => 'num_zuch', 'editable' => true]
            ],
            'rowNum' => 15,
            'autowidth' => true,
            'height' => 'auto',
        ],
        'pagerSettings' => [
            'edit' => true,
            'add' => true,
            'del' => true,
            'search' => ['multipleSearch' => true],
        ],
        'enableFilterToolbar' => true,
        'filterToolbarSettings' => [
            'autosearch' => true,
            'stringResult' => true,
            'searchOnEnter' => true,
            'defaultSearch' => "cn"
        ],
    ]) ?>
</div>

Мой контроллер

<?php
namespace app\controllers;

use app\models\FormObuch;
use app\models\Result;
use Yii;
use app\models\EntryForm;
use himiklab\jqgrid\actions\JqGridActiveAction;
use yii\helpers\Json;
![default](https://user-images.githubusercontent.com/25239310/33243859-9b9c3b36-d2fe-11e7-9362-c5f1dcf075d1.png)

class PostController extends CommonController
{
    public $layout = 'basic';

    public function actions()
    {
        return [
            'jqgrid' => [
                'class' => JqGridActiveAction::className(),
                'model' => Result::className(),
                'scope' => function (\yii\db\ActiveQuery $query) {
//вывод данных с idg=5
                    $query->select(['ids', 'famil', 'name', 'otchestvo', 'date_birth','num_zuch'])->where(['idg'=>5]);
                },
            ],
        ];
    }

    public function actionGroups(){
        $model = new FormObuch();
        return $this->render('groups', ['model' => $model]);
    }

    public function actionSubcat() {
        $out = [];
        if (isset($_POST['depdrop_parents'])) {
            $parents = $_POST['depdrop_parents'];
            if ($parents != null) {
                $cat_id = $parents[0];
                $out = FormObuch::getGroups($cat_id);
                // the getSubCatList function will query the database based on the
                // cat_id and return an array like below:
                // [
                //    ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'],
                //    ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>']
                // ]
                $poc = Json::encode(['output'=>$out]);
                echo Json::encode(['output'=>$out, 'selected'=>'']);
                return;
            }
        }
        echo Json::encode(['output'=>'', 'selected'=>'']);
    }
}
himiklab commented 6 years ago

Я так понимаю, что Вам нужно что-то вроде этого https://stackoverflow.com/questions/28320787/reload-jqgrid-with-new-data