[Magento] カテゴリトップのデフォルト並び順『position(位置)』を『New(新着順/登録ID順)』に変更する。

カテゴリトップのデフォルト「position(位置)」という並び順は、管理画面「カタログ」→「カテゴリ管理」→任意のカテゴリを選んでタブ「カテゴリの商品」を開き、リスト右にある「位置」という入力欄に数値を入れて順番を変えて行きますが、 そもそもこの「position(位置)」というのが分かりづらい上に、商品を追加する度にいちいち入力し直すのもまた億劫です・・・。

magento_category_position

なので、『position(位置)』を『New(新着順/登録ID順)』の意味合いに変更します。

環境(各バージョン)

  • magento version: 1.8.1.0
  • PHP version: 5.3.3
  • MySQL version: 5.1.73

準備

まずは、
/app/code/core/Mage/Catalog/Block/Product/List/Toolbar.php

/app/code/local/Mage/Catalog/Block/Product/List/Toolbar.php
にコピーします。


/app/code/local/ 以下にディレクトリ /Mage/Catalog/Block/Product/List/ が存在しない場合は必要なディレクトリを作成してゆき、そこに Toolbar.php をコピーしてください。

ファイルをコピーしなければならない理由については関連記事『コアやテンプレートファイルに手を加える際に覚えておきたい事』にまとめていますので、併せて参照してみてください。

修正対象ファイル

コピーした
/app/code/local/Mage/Catalog/Block/Product/List/Toolbar.php
を修正します。

修正箇所

修正前

if ($this->getCurrentOrder()) {
$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
}

修正後

「$this->getCurrentOrder()」が「position」の場合はID降順に並べろ、それ以外はそれぞれに従え、ということですね。

if ($this->getCurrentOrder()) {
if(($this->getCurrentOrder())=='position'){
$this->_collection->setOrder('entity_id','desc');
}
else {
$this->_collection->setOrder($this->getCurrentOrder(),$this->getCurrentDirection());
}
}

以上です。

Similar posts