商品の並べ替えを変更しようとしています。
属性の並べ替えオプションを使用して、名前で並べ替えるのではなく、「属性の管理」で指定された位置で並べ替えたいと思います。ただし、位置がある場合のみ(すべてが0の場合は、名前で並べ替える必要があります)。
このために、ソートが製品コレクションに適用されるファイルを知る必要があります。app \ code \ core \ Mage \ Catalog \ Model\Config.phpとapp\code \ core \ Mage \ Catalog \ Block \ Product \ List.php内を検索しましたが、どちらも並べ替えについて何も見つかりませんでした。そして多分いくつかのコード提案も。
グーグルもこの問題で私を助けていないので、私はここでそれを試してみます。多分誰かがこれで私を助けることができます。
ありがとう
編集:
例として、「色」属性を取り上げます。これはドロップダウン属性です。
「属性の管理」内のテーブルは次のようになります。
Valuename | Position
========================
light blue | 1
blue | 2
dark blue | 3
light red | 4
red | 5
dark red | 6
フロントエンドでは、属性「色」で並べ替えると、製品が次のように一覧表示されます。
blue
dark blue
dark red
light blue
light red
red
しかし、私はそれを次のようにリストしたいと思います:
light blue
blue
dark blue
light red
red
dark red
EDIT2:
public function getAllOptions($withEmpty = true, $defaultValues = false)
{
$storeId = $this->getAttribute()->getStoreId();
if (!is_array($this->_options)) {
$this->_options = array();
}
if (!is_array($this->_optionsDefault)) {
$this->_optionsDefault = array();
}
if (!isset($this->_options[$storeId])) {
$collection = Mage::getResourceModel('eav/entity_attribute_option_collection')
->setPositionOrder('asc')
->setAttributeFilter($this->getAttribute()->getId())
->setStoreFilter($this->getAttribute()->getStoreId())
->load();
$this->_options[$storeId] = $collection->toOptionArray();
$this->_optionsDefault[$storeId] = $collection->toOptionArray('default_value');
}
$options = ($defaultValues ? $this->_optionsDefault[$storeId] : $this->_options[$storeId]);
if ($withEmpty) {
array_unshift($options, array('label' => '', 'value' => ''));
}
return $options;
}