Получение проблемы с коллекцией в observer Magento


Я хочу отсортировать адрес атрибута клиента после sort_order. По какой-то причине по умолчанию это не работает, поэтому я начал копаться в ядре. Эта функция:

protected function _getFormAttributeCollection()
{
   return parent::_getFormAttributeCollection()
   ->addFieldToFilter('attribute_code', array('neq' => 'created_at'));
}

От Mage_Customer_Model_Form несет ответственность. Если я добавлю сюда этот код ->setOrder('sort_order', 'ASC'); в свою коллекцию, он будет работать нормально. Из-за того, что вы не касаетесь ядра, я хочу исправить это от наблюдателя. Я использовал это событие: core_block_abstract_to_html_before, и это моя функция от моего наблюдателя:

 $grid = $observer->getBlock();
 if ($grid instanceof  Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element) {
   $collection = $observer->getEvent()->getCollection();
   $collection = $collection->getSelect()->order('sort_order', 'ASC');
// $collection->setOrder('sort_order', 'ASC');
   $observer->getEvent()->setCollection($collection);
 }

Дело в том, что $коллекция всегда равно нулю. Я не знаю, почему? Может кто-нибудь подсказать мне, как это исправить?

Спасибо

Author: Attila Naghi, 2017-05-26

2 answers

Это не работает, потому что core_block_abstract_to_html_before слишком широкое, оно вызывается каждый раз, когда блок визуализируется. Даже если у вас есть условие в вашем наблюдателе, оно все еще расширено, коллекция есть, вы, вероятно, просто смотрите на какой-то другой блок, который загружается на этой странице.

Решение:

Переопределить Mage_Customer_Model_Form и добавить

return parent::_getFormAttributeCollection() 
    ->addFieldToFilter('attribute_code', array('neq' => 'created_at'))
    ->setOrder('sort_order', 'ASC');

К методу _getFormAttributeCollection().

 0
Author: Radosav, 2017-05-26 19:27:35

Вы можете попробовать

$addressAttributeCollection = Mage::getResourceModel('customer/address_attribute_collection');
$addressAttributeCollection->setOrder('sort_order', 'ASC');
 0
Author: Abdul Ghaffar, 2017-05-26 11:06:13