首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性选项/标签排序是否定义在站点视图级别?

属性选项/标签排序是否定义在站点视图级别?
EN

Stack Overflow用户
提问于 2012-11-27 00:31:40
回答 1查看 732关注 0票数 0

我使用Magento 1.6.2。

有没有办法在站点视图级别而不是全局级别上设置属性选项标签的位置?

原因:此处为英语和德语中的颜色值

布莱克/施瓦茨

清晰/透明

铜缆/ Kupfer

黄色/ Gelb

覆盖位置值并对frontpage代码中的值进行排序是不可能的,因为在某些选项中字母数字排序没有意义:

即小中大

请帮帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-27 01:28:48

是的,这是非常有可能的。但这是一个相当深刻的变化,这取决于你想用它来完成什么。这将帮助您入门:

您需要首先向eav/attribute_option_value表中添加一个新列。

代码语言:javascript
复制
$installer = $this;

$installer->startSetup();

$installer->run("
    ALTER TABLE `{$this->getTable('eav/attribute_option_value')}` ADD COLUMN `sort_order` INT UNSIGNED NULL DEFAULT 0;
");

$installer->endSetup();

接下来,您需要重写Mage_Eav_Model_Mysql4_Entity_Attribute_Option_Collection。在执行存储筛选器的联接时,您需要在此处添加您的sort_order:

代码语言:javascript
复制
public function setStoreFilter($storeId=null, $useDefaultValue=true)
{
    if (is_null($storeId)) {
        $storeId = Mage::app()->getStore()->getId();
    }
    $sortBy = 'store_default_value';
    if ($useDefaultValue) {
        $this->getSelect()
            ->join(array('store_default_value'=>$this->_optionValueTable),
            'store_default_value.option_id=main_table.option_id',
            array('default_value'=>'value'))
            ->joinLeft(array('store_value'=>$this->_optionValueTable),
            'store_value.option_id=main_table.option_id AND '.$this->getConnection()->quoteInto('store_value.store_id=?', $storeId),
            array('store_value'=>'value',
                'value' => new Zend_Db_Expr('IF(store_value.value_id>0, store_value.value,store_default_value.value)',
                'sort_order'))) // ADDED
            ->where($this->getConnection()->quoteInto('store_default_value.store_id=?', 0));
    }
    else {
        $sortBy = 'store_value';
        $this->getSelect()
            ->joinLeft(array('store_value'=>$this->_optionValueTable),
            'store_value.option_id=main_table.option_id AND '.$this->getConnection()->quoteInto('store_value.store_id=?', $storeId),
            'value',
            'sort_order') // ADDED
            ->where($this->getConnection()->quoteInto('store_value.store_id=?', $storeId));
    }
    $this->setOrder("store_value.sort_order", 'ASC'); // CHANGED

    return $this;
}

要显示发生了什么:每个属性都有一个源模型。源模型负责在前端下拉列表(select、multiselect)中提供值。如果源模型为Mage_Eav_Model_Entity_Attribute_Source_Table (如果属性类型为select或multiselect,则默认情况下为该值),则此代码将检索以下值:

代码语言:javascript
复制
$collection = Mage::getResourceModel('eav/entity_attribute_option_collection')
    ->setPositionOrder('asc')
    ->setAttributeFilter($this->getAttribute()->getId())
    ->setStoreFilter($this->getAttribute()->getStoreId())
    ->load();

如您所见,我们正在重写setStoreFilter()函数。这是最后一次调用。您可能希望在重写的函数的开头添加一个unshiftOrder('main_table.sort_order', 'ASC'),只是为了确保`main_table.sort_order不会妨碍您。

我将留给您对管理面板进行必要的调整,以提供设置排序矩阵的选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13569039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档