我使用Magento 1.6.2。
有没有办法在站点视图级别而不是全局级别上设置属性选项标签的位置?
原因:此处为英语和德语中的颜色值
布莱克/施瓦茨
清晰/透明
铜缆/ Kupfer
黄色/ Gelb
覆盖位置值并对frontpage代码中的值进行排序是不可能的,因为在某些选项中字母数字排序没有意义:
即小中大
请帮帮忙
发布于 2012-11-27 01:28:48
是的,这是非常有可能的。但这是一个相当深刻的变化,这取决于你想用它来完成什么。这将帮助您入门:
您需要首先向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不会妨碍您。
我将留给您对管理面板进行必要的调整,以提供设置排序矩阵的选项。
https://stackoverflow.com/questions/13569039
复制相似问题