2

我是 php 新手,我想要的是如果我可以通过在文件中执行类似的操作将排序顺序定义为仅按价格显示的产品

Mage_Adminhtml_Model_System_Config_Source_Catalog_ListSort

$options[] = array(
    'label' => Mage::helper('catalog')->__('Price'),
    'value' => 'price'
    'getCurrentDirection' => 'asc'
);

其余属性按降序排列。

不幸的是,似乎没有工作。任何人都可以帮忙吗?

4

1 回答 1

0

我认为您正在查看错误的文件。您在上面描述的 ListSort 文件仅列出了排序依据的可用选项。它对当前的排序没有任何作用。

此外,您引用的文件位于 Adminhtml 范围内。如果您需要更改前端的默认排序,您应该查看其他地方。

如果我理解正确,您的问题是如果选择价格作为排序依据,默认情况下如何对 ASC 进行排序,而默认排序 DESC 是另一个属性用于排序依据。

对于前端,您应该查看 Mage_Catalog_Block_Product_List_Toolbar 文件中的 getCurrentOrder() 函数。在这里,您可以使用默认方向和排序顺序。破解 app/core/Mage 文件不是一个好习惯,但您可以复制此文件并将其放在 app/local/Mage/* (与核心文件完全相同的目录)中,它会自动重载默认方法。

对于后端,您可以查看 Mage_Adminhtml_Block_Widget 文件中的 _prepareCollection() 函数。默认排序是“desc”,因此您只需将价格更改为“asc”即可。在这里,您也应该在 app/local/Mage/* 中进行复制。您可以尝试这样的事情(对于 Magento 1.7.1.0,这是第 507-508 行):

改变

$columnId = $this->getParam($this->getVarNameSort(), $this->_defaultSort);
$dir      = $this->getParam($this->getVarNameDir(), $this->_defaultDir);

$columnId = $this->getParam($this->getVarNameSort(), $this->_defaultSort);
if($this->getVarNameSort() == 'price') {
    $dir      = $this->getParam($this->getVarNameDir(), 'asc');
} else {
    $dir      = $this->getParam($this->getVarNameDir(), $this->_defaultDir);
}

我希望这有帮助!

于 2012-10-19T17:09:44.650 回答