我在管理员中创建了一个自定义标签,我需要管理客户属性。
我想加载该部分中的所有客户属性,并针对每个属性保留一个复选框。
这样,当选中或取消选中复选框时,根据选择,列将显示/隐藏在管理客户网格中。
我想知道如何在该部分显示所有客户属性,每个都有一个复选框?
答案 0 :(得分:2)
您可以使用getAttributes()
返回Mage_Eav_Model_Entity_Attribute
数组。
<?php
$attributes = Mage::getModel('customer/customer')->getAttributes();
foreach ($attributes as $attr) :
?>
<input type="checkbox" name="attributes[]" value="<?php echo $attr->getId() ?>" id="attribute-<?php echo $attr->getId() ?>" />
<label for="attribute-<?php echo $attr->getId() ?>"><?php echo $attr->getStoreLabel() ?></label>
<?php endforeach; ?>
首先我们需要在您的模块中创建一个源模型,在下面您显然必须重命名它以匹配您的实际模块。
class Your_Module_Model_Source_Customer_Attribute
{
public function toOptionArray()
{
$attributes = Mage::getModel('customer/entity_attribute_collection')
// remove filter to allow default address ID, etc.
->addVisibleFilter();
$result = array();
foreach ($attributes as $attribute) {
if (($label = $attribute->getFrontendLabel()))
$result[$attribute->getId()] = $label;
}
return $result;
}
}
然后我们在模块的 system.xml 中需要一个新字段。
<fieldname translate="label">
<label>Customer Attributes</label>
<frontend_type>checkboxes</frontend_type>
<source_model>yourmodule/source_customer_attribute</source_model>
<show_in_default>1</show_in_default>
</fieldname>
这非常好用,令人惊讶,因为这些类没有在核心中使用。 <{1}}类型也可以checkboxes
,而不是radios
,也可以。{/ p>
答案 1 :(得分:0)
想出来了!
这是最终的代码。很明显,感谢您在第一时间对代码的帮助。
$attributes = Mage::getModel('customer/entity_address_attribute_collection');
$result = array();
foreach ($attributes as $attribute)
{
if (($label = $attribute->getFrontendLabel()))
$result[$attribute->getId()] = $label;
}
$attributes1 = Mage::getModel('customer/entity_attribute_collection');
$result1 = array();
foreach ($attributes1 as $attribute1)
{
if (($label1 = $attribute1->getFrontendLabel()))
$result1[$attribute1->getId()] = $label1;
}
$final = array_merge($result, $result1);
return $final;