Magento Отключить поле фильтра для сетки администратора - PullRequest
10 голосов
/ 07 сентября 2010

У меня есть пользовательский модуль с серверной страницей.В сетке я показываю электронную почту клиента в качестве имени пользователя.По умолчанию Magento добавляет фильтр к каждому столбцу в сетке.Теперь, когда я пытаюсь фильтровать по электронной почте клиента, я получаю исключение о том, что в моей пользовательской таблице нет столбца электронной почты.Magento пытается найти это в моей таблице.Как я могу исправить эту проблему, или как я могу удалить поле этого столбца, чтобы администратор не мог фильтровать по этому полю.Спасибо.

Ответы [ 3 ]

35 голосов
/ 27 октября 2010

Добавить опцию

    'filter' => false

к столбцу, из которого вы хотите удалить фильтр в виде сетки (например, app / code / core / Mage / Adminhtml / Block / Sales / Order / Grid.php)

    $this->addColumn('email', array(
       'header'    => Mage::helper('module')->__('Email'),
       'align'     =>'left',
       'index'     => 'email',
       'filter' => false,
   ));
1 голос
/ 07 сентября 2010

Полагаю, вы имели в виду "как я могу удалить поле этого столбца, чтобы администратор мог t фильтровать по этому полю"

Если это так, я могу рассказать вам, как удалить поле электронной почты.

Открыть /app/code/local/Namespace/Module/Block/Adminthml/Module/Grid.php

Где-то в защищенной функции _prepareColumns () вы должны найти что-то вроде:

  $this->addColumn('email', array(
      'header'    => Mage::helper('module')->__('Email'),
      'align'     =>'left',
      'index'     => 'email',
  ));

Просто прокомментируйте эти строки.

И обратите внимание, что в методе __construct в самом начале всего класса у вас нет

  $this->setDefaultSort('email');

Если это так, измените его на

$this->setDefaultSort('id'); // if you have an id field in your module.
0 голосов
/ 05 ноября 2016

Если у вас нет столбца электронной почты в пользовательской таблице, то я предполагаю, что вы создаете свою сетку, присоединяя свою пользовательскую таблицу к основной таблице, содержащей адрес электронной почты пользователя, такой как customer_entity.

Когда вы фильтруете по столбцу, Magento использует индекс столбца для создания предложения where.Что в вашем случае даст что-то вроде WHERE email LIKE '%filter value%', но он не найдет электронную почту в вашей пользовательской таблице.

Вы можете исправить это, используя filter_index, чтобы явно указать Magento, какую таблицу и столбец использовать.при построении предложения where.Попробуйте что-то вроде этого

$this->addColumn('email', array(
    'header'    => Mage::helper('module')->__('Email'),
    'index'     => 'email',
    'filter_index'          => 'core_table.email',
));

, где core_table - таблица, к которой вы присоединяетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...