Обрезка представлений сетки Magento
Я нахожу, что пользователи нашего бэкенда/бэк-офиса Magento тратят много времени на повторную отправку данных только из-за пробелов в конце при попытке фильтровать сетки Magento.
Рассмотрим следующий пример:
Вы увидите, что после слова "тест" есть пробел, а именно "тест". Если пользователь нажимает enter, результаты не возвращаются, потому что совпадения нет.
Я бы хотел, чтобы Magento автоматически обрезал эту отправку, чтобы она избавьтесь от предшествующих и завершающих пробелов.
Обновление: Благодаря ответу Алексея.Сварычевского:
Я применил локальное переопределение:
app/code/core/local/Mage/Adminhtml/Block/Widget/Grid.php
, теперь метод выглядит следующим образом:
protected function _setFilterValues($data)
{
foreach ($this->getColumns() as $columnId => $column) {
if (isset($data[$columnId])
&& (!empty($data[$columnId]) || strlen($data[$columnId]) > 0)
&& $column->getFilter()
) {
if (is_array($data[$columnId])){
$new_values = array();
foreach ($data[$columnId] as $key => $value){
$new_values[$key] = trim($value);
}
$column->getFilter()->setValue($new_values);
}
else{
$column->getFilter()->setValue(trim($data[$columnId]));
}
$this->_addColumnFilterToCollection($column);
}
}
return $this;
}
Раздел is_array()
обрабатывает отправку данных, где фильтр состоит не более чем из двух значений (т.е. Дата, количество, цена и т.д.)
1 answers
Попробуйте переписать метод Mage_Adminhtml_Block_Widget_Grid::_setFilterValues()
foreach ($this->getColumns() as $columnId => $column) {
if (isset($data[$columnId])
&& (!empty($data[$columnId]) || strlen($data[$columnId]) > 0)
&& $column->getFilter()
) {
$column->getFilter()->setValue($data[$columnId]);
$this->_addColumnFilterToCollection($column);
}
}
return $this;
Этот метод отвечает за настройку значений фильтра для фильтрации.
Или вы можете переписать Mage_Adminhtml_Block_Widget_Grid_Column_Filter_Abstract::getCondition()
, который отвечает за создание условий.
В одном из этих методов вы можете обрезать значения.