我使用 Magento 1.6.2。
有没有办法在站点视图级别而不是全局级别上设置属性选项标签的位置?
原因:这里是英语和德语的颜色值
黑色 / Schwarz
Clear / 透明
铜 / Kupfer
黄色 / Gelb
很明显,不同语言的排序是不同的。
覆盖位置值并对首页代码中的值进行排序是不可能的,因为有些选项的字母数字排序没有意义:
即小中大
请帮忙
我使用 Magento 1.6.2。
有没有办法在站点视图级别而不是全局级别上设置属性选项标签的位置?
原因:这里是英语和德语的颜色值
黑色 / Schwarz
Clear / 透明
铜 / Kupfer
黄色 / Gelb
很明显,不同语言的排序是不同的。
覆盖位置值并对首页代码中的值进行排序是不可能的,因为有些选项的字母数字排序没有意义:
即小中大
请帮忙
是的,这是很有可能的。但这是一个相当深刻的变化,取决于你想用它来完成什么。这将使您开始:
您想首先向表中添加一个新列eav/attribute_option_value
。这是为此的设置脚本:
$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:
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;
}
显示发生了什么:每个属性都有一个源模型。源模型负责在前端下拉类型列表(选择、多选)中提供值。如果源模型是Mage_Eav_Model_Entity_Attribute_Source_Table
(如果属性类型是 select 或 multiselect,则默认情况下是),则此代码检索值:
$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 不会妨碍您。
我将留给您对管理面板进行必要的调整,以提供设置排序顺序矩阵的选项。