我使用的是Magento 1.6.2。
有没有办法在站点视图级别而不是在全局级别设置属性选项标签的位置? 原因:这里是英语和德语的颜色值
Black / Schwarz
透明/透明
铜/ Kupfer
黄色/ Gelb
很明显,不同语言的排序是不同的
无法覆盖位置值并对首页代码中的值进行排序,因为存在字母数字排序没有意义的选项:
即小中大
请帮忙
答案 0 :(得分:0)
是的,这很有可能。但这是一个相当深刻的变化,取决于你想用这个来完成什么。这将帮助您入门:
您想先向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;
}
要显示正在发生的事情:每个属性都有一个源模型。源模型负责在前端下拉列表类型(select,multiselect)中提供值。如果源模型是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不会妨碍。
我将留给您对管理面板进行必要的调整,以提供设置排序顺序矩阵的选项。