Commit c15aceb0 by Qiang Xue

Refactored filter error display for GridView.

parent 7ca1be35
...@@ -46,7 +46,7 @@ abstract class ErrorHandler extends Component ...@@ -46,7 +46,7 @@ abstract class ErrorHandler extends Component
/** /**
* Register this errorhandler * Register this error handler
*/ */
public function register() public function register()
{ {
......
...@@ -141,16 +141,22 @@ class DataColumn extends Column ...@@ -141,16 +141,22 @@ class DataColumn extends Column
{ {
if (is_string($this->filter)) { if (is_string($this->filter)) {
return $this->filter; return $this->filter;
} elseif ($this->filter !== false && $this->grid->filterModel instanceof Model && }
$this->attribute !== null && $this->grid->filterModel->isAttributeActive($this->attribute)) {
if ($this->grid->filterModel->hasErrors($this->attribute)) { $model = $this->grid->filterModel;
Html::addCssClass($this->filterOptions, 'has-error');
if ($this->filter !== false && $model instanceof Model && $this->attribute !== null && $model->isAttributeActive($this->attribute)) {
if ($model->hasErrors($this->attribute)) {
Html::addCssClass($this->filterOptions, 'has-error');
$error = Html::error($model, $this->attribute, $this->grid->filterErrorOptions);
} else {
$error = '';
} }
if (is_array($this->filter)) { if (is_array($this->filter)) {
$options = array_merge(['prompt' => ''], $this->filterInputOptions); $options = array_merge(['prompt' => ''], $this->filterInputOptions);
return Html::activeDropDownList($this->grid->filterModel, $this->attribute, $this->filter, $options); return Html::activeDropDownList($model, $this->attribute, $this->filter, $options) . ' ' . $error;
} else { } else {
return Html::activeTextInput($this->grid->filterModel, $this->attribute, $this->filterInputOptions); return Html::activeTextInput($model, $this->attribute, $this->filterInputOptions) . ' ' . $error;
} }
} else { } else {
return parent::renderFilterCellContent(); return parent::renderFilterCellContent();
......
...@@ -15,7 +15,6 @@ use yii\helpers\Url; ...@@ -15,7 +15,6 @@ use yii\helpers\Url;
use yii\helpers\Html; use yii\helpers\Html;
use yii\helpers\Json; use yii\helpers\Json;
use yii\widgets\BaseListView; use yii\widgets\BaseListView;
use yii\helpers\ArrayHelper;
use yii\base\Model; use yii\base\Model;
/** /**
...@@ -142,6 +141,9 @@ class GridView extends BaseListView ...@@ -142,6 +141,9 @@ class GridView extends BaseListView
* Both "format" and "label" are optional. They will take default values if absent. * Both "format" and "label" are optional. They will take default values if absent.
*/ */
public $columns = []; public $columns = [];
/**
* @var string the HTML display when the content of a cell is empty
*/
public $emptyCell = ' '; public $emptyCell = ' ';
/** /**
* @var \yii\base\Model the model that keeps the user-entered filter data. When this property is set, * @var \yii\base\Model the model that keeps the user-entered filter data. When this property is set,
...@@ -161,6 +163,9 @@ class GridView extends BaseListView ...@@ -161,6 +163,9 @@ class GridView extends BaseListView
* as GET parameters to this URL. * as GET parameters to this URL.
*/ */
public $filterUrl; public $filterUrl;
/**
* @var string additional jQuery selector for selecting filter input fields
*/
public $filterSelector; public $filterSelector;
/** /**
* @var string whether the filters should be displayed in the grid view. Valid values include: * @var string whether the filters should be displayed in the grid view. Valid values include:
...@@ -175,18 +180,29 @@ class GridView extends BaseListView ...@@ -175,18 +180,29 @@ class GridView extends BaseListView
* @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
*/ */
public $filterRowOptions = ['class' => 'filters']; public $filterRowOptions = ['class' => 'filters'];
/**
* @var array the options for rendering the filter error summary.
* Please refer to [[Html::errorSummary()]] for more details about how to specify the options.
* @see renderErrors()
*/
public $filterErrorSummaryOptions = ['class' => 'error-summary'];
/**
* @var array the options for rendering every filter error message.
* This is mainly used by [[Html::error()]] when rendering an error message next to every filter input field.
*/
public $filterErrorOptions = ['class' => 'help-block'];
/** /**
* @var string the layout that determines how different sections of the list view should be organized. * @var string the layout that determines how different sections of the list view should be organized.
* The following tokens will be replaced with the corresponding section contents: * The following tokens will be replaced with the corresponding section contents:
* *
* - `{summary}`: the summary section. See [[renderSummary()]]. * - `{summary}`: the summary section. See [[renderSummary()]].
* - `{errors}`: the filter model errors. See [[renderErrors()]]. * - `{errors}`: the filter model error summary. See [[renderErrors()]].
* - `{items}`: the list items. See [[renderItems()]]. * - `{items}`: the list items. See [[renderItems()]].
* - `{sorter}`: the sorter. See [[renderSorter()]]. * - `{sorter}`: the sorter. See [[renderSorter()]].
* - `{pager}`: the pager. See [[renderPager()]]. * - `{pager}`: the pager. See [[renderPager()]].
*/ */
public $layout = "{summary}\n{errors}\n{items}\n{pager}"; public $layout = "{summary}\n{items}\n{pager}";
/** /**
* Initializes the grid view. * Initializes the grid view.
...@@ -233,12 +249,15 @@ class GridView extends BaseListView ...@@ -233,12 +249,15 @@ class GridView extends BaseListView
public function renderErrors() public function renderErrors()
{ {
if ($this->filterModel instanceof Model && $this->filterModel->hasErrors()) { if ($this->filterModel instanceof Model && $this->filterModel->hasErrors()) {
return Html::tag('div', Html::ul($this->filterModel->getFirstErrors(), ['class' => 'help-block']), ['class' => 'has-error']); return Html::errorSummary($this->filterModel, $this->filterErrorSummaryOptions);
} else { } else {
return ''; return '';
} }
} }
/**
* @inheritdoc
*/
public function renderSection($name) public function renderSection($name)
{ {
switch ($name) { switch ($name) {
......
...@@ -1047,7 +1047,10 @@ class BaseHtml ...@@ -1047,7 +1047,10 @@ class BaseHtml
public static function errorSummary($models, $options = []) public static function errorSummary($models, $options = [])
{ {
$lines = []; $lines = [];
foreach ((array)$models as $model) { if (!is_array($models)) {
$models = [$models];
}
foreach ($models as $model) {
/** @var Model $model */ /** @var Model $model */
foreach ($model->getFirstErrors() as $error) { foreach ($model->getFirstErrors() as $error) {
$lines[] = Html::encode($error); $lines[] = Html::encode($error);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment