diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js index 38964a6..d03e913 100644 --- a/framework/assets/yii.gridView.js +++ b/framework/assets/yii.gridView.js @@ -143,7 +143,7 @@ var $grid = $(this); var id = $(this).attr('id'); gridData[id].selectionColumn = options.name; - if (!options.multiple) { + if (!options.multiple || !options.checkAll) { return; } var checkAll = "#" + id + " input[name='" + options.checkAll + "']"; diff --git a/framework/grid/CheckboxColumn.php b/framework/grid/CheckboxColumn.php index 3b66478..57bbc05 100644 --- a/framework/grid/CheckboxColumn.php +++ b/framework/grid/CheckboxColumn.php @@ -81,6 +81,15 @@ class CheckboxColumn extends Column if (substr_compare($this->name, '[]', -2, 2)) { $this->name .= '[]'; } + + $name = $this->grid->showHeader ? $this->getHeaderCheckBoxName() : NULL; + $id = $this->grid->options['id']; + $options = json_encode([ + 'name' => $this->name, + 'multiple' => $this->multiple, + 'checkAll' => $name, + ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + $this->grid->getView()->registerJs("jQuery('#$id').yiiGridView('setSelectionColumn', $options);"); } /** @@ -133,4 +142,13 @@ class CheckboxColumn extends Column return Html::checkbox($this->name, !empty($options['checked']), $options); } + + /** + * Returns header checkbox name + * @return string header checkbox name + */ + private function getHeaderCheckBoxName() + { + return rtrim($this->name, '[]') . '_all'; + } } diff --git a/framework/grid/GridView.php b/framework/grid/GridView.php index b2bca6c..edea8f7 100644 --- a/framework/grid/GridView.php +++ b/framework/grid/GridView.php @@ -272,6 +272,11 @@ class GridView extends BaseListView $this->filterRowOptions['id'] = $this->options['id'] . '-filters'; } + $id = $this->options['id']; + $options = Json::htmlEncode($this->getClientOptions()); + $view = $this->getView(); + $view->registerJs("jQuery('#$id').yiiGridView($options);"); + $this->initColumns(); } @@ -280,11 +285,9 @@ class GridView extends BaseListView */ public function run() { - $id = $this->options['id']; - $options = Json::htmlEncode($this->getClientOptions()); $view = $this->getView(); GridViewAsset::register($view); - $view->registerJs("jQuery('#$id').yiiGridView($options);"); + parent::run(); }