如何使用自定义模块在下拉列表中显示客户属性

时间:2011-12-08 13:44:36

标签: php magento

我在管理员中创建了一个自定义标签,我需要管理客户属性。

我想加载该部分中的所有客户属性,并针对每个属性保留一个复选框。

这样,当选中或取消选中复选框时,根据选择,列将显示/隐藏在管理客户网格中。

我想知道如何在该部分显示所有客户属性,每个都有一个复选框?

2 个答案:

答案 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;