Когда вы используете array_merge
, вы уничтожаете правильные индексы, которые должны быть идентификаторами атрибутов.Также хорошей практикой является давать значимым именам для ваших переменных.
$result = array();
$addressAttributes = Mage::getModel('customer/entity_address_attribute_collection');
foreach ($addressAttributes as $addressAttribute)
{
if (($addrlabel = $addressAttribute->getFrontendLabel()))
$result[$addressAttribute->getId()] = $addrlabel;
}
$customerAttributes = Mage::getModel('customer/entity_attribute_collection');
foreach ($customerAttributes as $customerAttribute)
{
if (($custlabel = $customerAttribute->getFrontendLabel()))
$result[$customerAttribute->getId()] = $custlabel;
}
return $result;
Полагаю, следующим шагом будет удаление столбцов, которые добавит родительский элемент вашей сетки, они хранятся в защищенном свойстве _columns
сетки.Не все столбцы должны быть удалены, например столбец массовых операций.Затем добавьте выбранные столбцы обратно.
protected function _prepareColumns()
{
parent::_prepareColumns();
// remove the excess columns here
$attributeIds = Mage::getStoreConfig('sectionname/groupname/fieldname');
$attributes = Mage::getModel('eav/entity_attribute')->getCollection()
->addFieldToFilter('attribute_id', array('in' => $attributeIds));
foreach ($attributes as $attribute)
{
$options = array();
if ($attribute->getFrontendInput() == 'select') {
foreach ($attribute->getSource()->getAllOptions() as $value) {
$options[$value['value']] = $value['label'];
}
}
$this->addColumn($attribute->getCode(), array(
'index' => $attribute->getCode(),
'header' => $attribute->getFrontendLabel(),
'type' => $attribute->getFrontendInput(),
'options' => $options
));
}
return $this;
}
Этот способ может потерять полезное форматирование, например ширину столбцов и т. Д., Поэтому более сложным способом было бы определить, какие столбцы уже есть, и оставить их, затемудаляйте только те, которые не были выбраны.