如何创建自定义属性源类型

redmaomail 2024-07-24 18:13 阅读数 63 #Magento

红帽云邮外贸主机

你是否曾经需要创建自定义属性源类型?下面的小示例可能会对你有所帮助。

首先你需要创建sql安装文件,这个文件将把源类型的属性加入到你的系统中。源类型定义在数组: ‘source’ => ‘sourcetype/attribute_source_type’

startSetup();
 
$installer->addAttribute('catalog_product', 'product_type', array(
        'group'             => 'Product Options',
		'label'             => 'Product Type',
		'note'              => '',
        'type'              => 'int',	//backend_type
		'input'             => 'select',	//frontend_input
		'frontend_class'	=> '',
		'source'			=> 'sourcetype/attribute_source_type',
        'backend'           => '',
        'frontend'          => '',
        'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
		'required'          => true,
        'visible_on_front'  => false,
        'apply_to'          => 'simple',
        'is_configurable'   => false,
        'used_in_product_listing'	=> false,
        'sort_order'        => 5,
    ));
 
$installer->endSetup();

接着你需要创建自定义源类型或者名为Alwayly_Sourcetype_Model_Attribute_Source_Type的类,下面是我的例子:

class Alwayly_Sourcetype_Model_Attribute_Source_Type extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
	const MAIN = 1;
	const OTHER = 2;
 
    public function getAllOptions()
    {
        if (is_null($this->_options)) {
            $this->_options = array(
                array(
                    'label' => Mage::helper('sourcetype')->__('Main Product'),
                    'value' =>  self::MAIN
                ),
                array(
                    'label' => Mage::helper('sourcetype')->__('Other Product'),
                    'value' =>  self::OTHER
                ),
            );
        }
        return $this->_options;
    }
 
    public function toOptionArray()
    {
        return $this->getAllOptions();
    }
 
    public function addValueSortToCollection($collection, $dir = 'asc')
    {
        $adminStore  = Mage_Core_Model_App::ADMIN_STORE_ID;
        $valueTable1 = $this->getAttribute()->getAttributeCode() . '_t1';
        $valueTable2 = $this->getAttribute()->getAttributeCode() . '_t2';
 
        $collection->getSelect()->joinLeft(
            array($valueTable1 => $this->getAttribute()->getBackend()->getTable()),
            "`e`.`entity_id`=`{$valueTable1}`.`entity_id`"
            . " AND `{$valueTable1}`.`attribute_id`='{$this->getAttribute()->getId()}'"
            . " AND `{$valueTable1}`.`store_id`='{$adminStore}'",
            array()
        );
 
        if ($collection->getStoreId() != $adminStore) {
            $collection->getSelect()->joinLeft(
                array($valueTable2 => $this->getAttribute()->getBackend()->getTable()),
                "`e`.`entity_id`=`{$valueTable2}`.`entity_id`"
                . " AND `{$valueTable2}`.`attribute_id`='{$this->getAttribute()->getId()}'"
                . " AND `{$valueTable2}`.`store_id`='{$collection->getStoreId()}'",
                array()
            );
            $valueExpr = new Zend_Db_Expr("IF(`{$valueTable2}`.`value_id`>0, `{$valueTable2}`.`value`, `{$valueTable1}`.`value`)");
 
        } else {
            $valueExpr = new Zend_Db_Expr("`{$valueTable1}`.`value`");
        }
 
 
 
        $collection->getSelect()
            ->order($valueExpr, $dir);
 
        return $this;
    }
 
    public function getFlatColums()
    {
        $columns = array(
            $this->getAttribute()->getAttributeCode() => array(
                'type'      => 'int',
                'unsigned'  => false,
                'is_null'   => true,
                'default'   => null,
                'extra'     => null
            )
        );
        return $columns;
    }
 
 
    public function getFlatUpdateSelect($store)
    {
        return Mage::getResourceModel('eav/entity_attribute')
            ->getFlatUpdateSelect($this->getAttribute(), $store);
    }
}

如果安装正确地完成,进入Magento后台admin -> Catalog -> Product,你会看到一个名为“Product Options”的选项。

电商网站开发服务


红帽云邮外贸主机

分享到:
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。
    红帽云邮外贸主机
热门
    红帽云邮外贸主机
    红帽云邮外贸主机