Magento防止重复产品&类别网址

时间:2018-02-27 06:16:42

标签: magento url duplicates

如果管理员用户在创建产品或类别时,如果网址密钥已存在并显示错误消息并阻止产品/类别创建,直到他更改产品/类别名称或网址密钥,该如何通知管理员用户?

感谢。

1 个答案:

答案 0 :(得分:0)

我已针对此问题实施了解决方案。我将在这里发布一个总结答案,如果有人有问题,请询问。

类别:创建一个观察者并为'catalog_category_save_before'事件添加一个url检查验证,可以用直接sql完成,如:

  $query = " SELECT value_id
    FROM catalog_category_entity_varchar
    WHERE value = '" . $urlKey . "' AND attribute_id = (
        SELECT attribute_id
        FROM eav_attribute
        WHERE entity_type_id = 3 AND attribute_code = 'url_key')
    ";

产品:这里有两件事......一件用于检查从产品名称创建的URL(如果保存产品上的url键为空),另一件在产品保存时指定了url密钥:

  • 为产品'name'属性添加后端模型,如果未设置url key,则在validate()方法上检查重复值,如:

    $urlKey = $object->getData('url_key');
    if ($urlKey) {
        return true;
    }
    
    if (!$this->getAttribute()->getEntity()->checkAttributeUniqueValue($this->getAttribute(), $object)) {
        throw Mage::exception('Mage_Eav',
            Mage::helper('eav')->__('The value of this attribute must be unique if you do not set explicit URL Key')
        );
    }
    
  • 在config.xml中ovewrite urlkey后端模型和“name”属性相同,在validate()方法下添加重复检查,如:

    if (!$this->getAttribute()->getEntity()->checkAttributeUniqueValue($this->getAttribute(), $object)) {
        $label = $this->getAttribute()->getFrontend()->getLabel();
        throw Mage::exception('Mage_Eav',
            Mage::helper('eav')->__('The value of attribute "%s" must be unique', $label)
        );
    }