Получение проблемы с коллекцией в 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);
}
Дело в том, что $коллекция всегда равно нулю. Я не знаю, почему? Может кто-нибудь подсказать мне, как это исправить?
Спасибо
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()
.
Вы можете попробовать
$addressAttributeCollection = Mage::getResourceModel('customer/address_attribute_collection');
$addressAttributeCollection->setOrder('sort_order', 'ASC');