mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-22 09:40:41 +08:00
make grid view filtering work.
This commit is contained in:
@@ -22,6 +22,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
var defaults = {
|
var defaults = {
|
||||||
|
filterUrl: undefined,
|
||||||
|
filterSelector: undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
var methods = {
|
var methods = {
|
||||||
@@ -32,6 +34,32 @@
|
|||||||
$e.data('yiiGridView', {
|
$e.data('yiiGridView', {
|
||||||
settings: settings
|
settings: settings
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var enterPressed = false;
|
||||||
|
$(document).on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) {
|
||||||
|
if (event.type === 'keydown') {
|
||||||
|
if (event.keyCode !== 13) {
|
||||||
|
return; // only react to enter key
|
||||||
|
} else {
|
||||||
|
enterPressed = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// prevent processing for both keydown and change events
|
||||||
|
if (enterPressed) {
|
||||||
|
enterPressed = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var data = $(settings.filterSelector).serialize();
|
||||||
|
var url = settings.filterUrl;
|
||||||
|
if (url.indexOf('?') >= 0) {
|
||||||
|
url += '&' + data;
|
||||||
|
} else {
|
||||||
|
url += '?' + data;
|
||||||
|
}
|
||||||
|
window.location.href = url;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -74,5 +102,38 @@
|
|||||||
return this.data('yiiGridView');
|
return this.data('yiiGridView');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var enterPressed = false;
|
||||||
|
|
||||||
|
var filterChanged = function (event) {
|
||||||
|
if (event.type === 'keydown') {
|
||||||
|
if (event.keyCode !== 13) {
|
||||||
|
return; // only react to enter key
|
||||||
|
} else {
|
||||||
|
enterPressed = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// prevent processing for both keydown and change events
|
||||||
|
if (enterPressed) {
|
||||||
|
enterPressed = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var data = $(settings.filterSelector).serialize();
|
||||||
|
if (settings.pageVar !== undefined) {
|
||||||
|
data += '&' + settings.pageVar + '=1';
|
||||||
|
}
|
||||||
|
if (settings.enableHistory && settings.ajaxUpdate !== false && window.History.enabled) {
|
||||||
|
// Ajaxify this link
|
||||||
|
var url = $('#' + id).yiiGridView('getUrl'),
|
||||||
|
params = $.deparam.querystring($.param.querystring(url, data));
|
||||||
|
|
||||||
|
delete params[settings.ajaxVar];
|
||||||
|
window.History.pushState(null, document.title, decodeURIComponent($.param.querystring(url.substr(0, url.indexOf('?')), params)));
|
||||||
|
} else {
|
||||||
|
$('#' + id).yiiGridView('update', {data: data});
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
})(window.jQuery);
|
})(window.jQuery);
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use yii\base\InvalidConfigException;
|
|||||||
use yii\base\Widget;
|
use yii\base\Widget;
|
||||||
use yii\db\ActiveRecord;
|
use yii\db\ActiveRecord;
|
||||||
use yii\helpers\Html;
|
use yii\helpers\Html;
|
||||||
|
use yii\helpers\Json;
|
||||||
use yii\widgets\BaseListView;
|
use yii\widgets\BaseListView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -136,6 +137,14 @@ class GridView extends BaseListView
|
|||||||
* When this property is not set (null) the filtering feature is disabled.
|
* When this property is not set (null) the filtering feature is disabled.
|
||||||
*/
|
*/
|
||||||
public $filterModel;
|
public $filterModel;
|
||||||
|
/**
|
||||||
|
* @var string|array the URL for returning the filtering result. [[Html::url()]] will be called to
|
||||||
|
* normalize the URL. If not set, the current controller action will be used.
|
||||||
|
* When the user makes change to any filter input, the current filtering inputs will be appended
|
||||||
|
* as GET parameters to this URL.
|
||||||
|
*/
|
||||||
|
public $filterUrl;
|
||||||
|
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:
|
||||||
*
|
*
|
||||||
@@ -167,6 +176,9 @@ class GridView extends BaseListView
|
|||||||
if (!isset($this->options['id'])) {
|
if (!isset($this->options['id'])) {
|
||||||
$this->options['id'] = $this->getId();
|
$this->options['id'] = $this->getId();
|
||||||
}
|
}
|
||||||
|
if (!isset($this->filterRowOptions['id'])) {
|
||||||
|
$this->filterRowOptions['id'] = $this->options['id'] . '-filters';
|
||||||
|
}
|
||||||
|
|
||||||
$this->initColumns();
|
$this->initColumns();
|
||||||
}
|
}
|
||||||
@@ -177,12 +189,33 @@ class GridView extends BaseListView
|
|||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
$id = $this->options['id'];
|
$id = $this->options['id'];
|
||||||
|
$options = Json::encode($this->getClientOptions());
|
||||||
$view = $this->getView();
|
$view = $this->getView();
|
||||||
GridViewAsset::register($view);
|
GridViewAsset::register($view);
|
||||||
$view->registerJs("jQuery('#$id').yiiGridView();");
|
$view->registerJs("jQuery('#$id').yiiGridView($options);");
|
||||||
parent::run();
|
parent::run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the options for the grid view JS widget.
|
||||||
|
* @return array the options
|
||||||
|
*/
|
||||||
|
protected function getClientOptions()
|
||||||
|
{
|
||||||
|
$filterUrl = isset($this->filterUrl) ? $this->filterUrl : array(Yii::$app->controller->action->id);
|
||||||
|
$id = $this->filterRowOptions['id'];
|
||||||
|
$filterSelector = "#$id input, #$id select";
|
||||||
|
if (isset($this->filterSelector)) {
|
||||||
|
$filterSelector .= ', ' . $this->filterSelector;
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'filterUrl' => Html::url($filterUrl),
|
||||||
|
'filterSelector' => $filterSelector,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders the data models for the grid view.
|
* Renders the data models for the grid view.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user