Неустранимая ошибка: Magento Добавить столбец в Admin Client Grid - PullRequest
3 голосов
/ 14 ноября 2011

Я хотел добавить столбец в сетку клиентов администратора is_onHold (в таблице customer_entity есть столбец с именем is_onHold , tinyint (1) {хочу сохранить логическое значение}).

Я пытался Fabrizio d решение из: Magento - Добавить столбец в сетку клиента , но он дает фатальную ошибку при попытке отфильтровать результат на основе добавленного столбца.

Я добавил следующий код в _prepareColumns () :

$this->addColumn('is_onHold', array(
            'header'    => Mage::helper('customer')->__('On Hold?'),
            'width'     => '150',
            'index'     => 'is_onHold',
            'type'      => 'options',
            'options'   => array(
              1 => 'Yes',
              0 => 'No',
          )
        ));

и следующий код в _prepareCollection () :

->addAttributeToSelect('is_onHold')

Работает отлично, столбец добавляется в сетку, но, когда я пытаюсь отфильтровать запись по вновь добавленному столбцу, я получаю сообщение об ошибке Mage EAV Error

когда я проверял соответствующий отчет об ошибке, он говорит:

a:5:{i:0;s:34:"Invalid attribute name: is_onHold.";i:1;s:5418:"#0 E:\wamp\www\magePrj\app\code\core\Mage\Eav\Model\Entity\Collection\Abstract.php(1166): Mage::exception('Mage_Eav', 'Invalid attribu...')
1 E:\wamp\www\magePrj\app\code\core\Mage\Eav\Model\Entity\Collection\Abstract.php(1255): Mage_Eav_Model_Entity_Collection_Abstract->_addAttributeJoin('is_onHold', 'inner')
2 E:\wamp\www\magePrj\app\code\core\Mage\Eav\Model\Entity\Collection\Abstract.php(292): Mage_Eav_Model_Entity_Collection_Abstract->_getAttributeConditionSql('is_onHold', Array, 'inner')
3 E:\wamp\www\magePrj\app\code\core\Mage\Eav\Model\Entity\Collection\Abstract.php(312): Mage_Eav_Model_Entity_Collection_Abstract->addAttributeToFilter('is_onHold', Array)
4 E:\wamp\www\magePrj\app\code\core\Mage\Adminhtml\Block\Widget\Grid.php(449): Mage_Eav_Model_Entity_Collection_Abstract->addFieldToFilter('is_onHold', Array)

Это потому, что я пытаюсь использовать параметры типа для логического столбца? Я не уверен, что я делаю неправильно ...

1 Ответ

6 голосов
/ 15 ноября 2011

Я нашел решение проблемы, с которой столкнулся. После того, как несколько часов ударился головой о стену.

На самом деле, не было ничего плохого в использовании любого типа данных для столбца. Итак, проблема не была в таблице.

Я проверил все связанные файлы. И, наконец, нашел, где была проблема. На самом деле, я был прав до:

$this->addColumn('is_onHold', array(
        'header'  => Mage::helper('customer')->__('On Hold?'),
        'width'   => '120',
        'index'   => 'is_onHold',
        'type'    => 'options',
        'options' => array('1' => 'Yes', '0' => 'No')
));

и

->addAttributeToSelect('is_onHold')

Но, я думаю, когда вы используете вышеуказанный метод, вам нужно внести одно дополнительное изменение в Mage_Customer_Model_Entity_Customer -> _ getDefaultAttributes () и ваши столбцы там ...

как и я:

return array(
            'entity_type_id',
            'attribute_set_id',
            'created_at',
            'updated_at',
            'increment_id',
            'store_id',
            'website_id',
            'is_onHold',
            'hold_till'
        );

Последние 2 в массиве - это добавленные мной столбцы ...

Надеюсь, это кому-нибудь поможет ...

...