1

次のカテゴリ構造を持つ Magento Web サイトがあります (大文字はカテゴリ、小文字は製品です)。

ROOT CATEGORY
     APPARELS
          SHOP BY SIZE
               product1
               product2
               product3
          SHOP BY COLLECTION
               product4
               product5
          SHOP BY DESIGN
               product6
               product7
               product8
               product9

ナビゲーション メニューを、SHOP BY SIZE、SHOP BY COLLECTION、SHOP BY DESIGN として表示したいと考えています。APPARELS レベルでナビゲーションを開始したくありません。これを行う方法はありますか?

注: Magento の設計により、ROOT CATEGORY はナビゲーション メニューに表示できません。ナビゲーション メニューは、第 2 レベルのカテゴリ、つまりこの場合は APPARELS から始まります。

4

2 に答える 2

2

Navigation.phpを見てください。コア機能を変更できますが、リライト付きのモジュールを使用することで(コアファイルを直接変更しないでください!)。カスタムナビゲーション機能が必要なときは、常にそこから始めます。

http://freegento.com/doc/db/d56/_catalog_2_block_2_navigation_8php-source.html

編集、私はこの方法をよく使用しますが、できるだけ書き直さないようにすることをお勧めします。この場合、レベル2のカテゴリをメインナビゲーションとして表示することについて話しているので、難しいとは思いません。

于 2013-01-04T17:54:45.657 に答える
2

本当にデザイン Root -> Apparels -> Shop By * を使用したい場合は、1 回のオーバーライドと変更でこれを行うことができます

config.xml - これは明らかに非常に単純化されたファイルです。ファイルのヘルパー リライトを提供する必要があります。

<?xml version="1.0"?>
<config>
    <helpers>
        <catalog>
            <rewrite>
                <category>Namespace_Module_Helper_Catalog_Category</category>
            </rewrite>
        </catalog>
    </helpers>
</config>

Category.php これは、サイトのルート カテゴリの下にある最初の子カテゴリを使用することを前提としています。あなたの場合、それは「アパレル」になります。この変更では、フラットまたは非フラット カテゴリ テーブルの使用が考慮されます。ID を選択するための他のオプションがあります。1 つは、カテゴリ リストをソースとして使用するシステム構成で、ナビゲーションのルート カテゴリを直接選択できるようにします。

このファイルの核心は、親 ID を取得して、ナビゲーションの基にしたい「ルート カテゴリ」にすることです。繰り返しますが、あなたの場合、親 ID は「アパレル」カテゴリの ID に設定されます。

class Namespace_Module_Helper_Catalog_Category extends Mage_Catalog_Helper_Category {
    public function getStoreCategories($sorted=false, $asCollection=false, $toLoad=true)
    {
        $parent     = Mage::app()->getStore()->getRootCategoryId();
        $cacheKey   = sprintf('%d-%d-%d-%d', $parent, $sorted, $asCollection, $toLoad);
        if (isset($this->_storeCategories[$cacheKey])) {
            return $this->_storeCategories[$cacheKey];
        }

        /**
         * Check if parent node of the store still exists
         */
        $category = Mage::getModel('catalog/category');
        /* @var $category Mage_Catalog_Model_Category */
        if (!$category->checkId($parent)) {
            if ($asCollection) {
                return new Varien_Data_Collection();
            }
            return array();
        }

        /* Change ian on 1/4/13 at 11:16 AM - Description: Here we capture the id of first child for use as the 'root' */
        $category->load($parent);
        /** @var $collection Mage_Catalog_Model_Resource_Category_Collection */
        $collection = $category->getChildrenCategories();
        if (is_array($collection)) {
            $category = array_shift($collection); //get the first category in the array.  Unknown key.
            $parent = $category->getId();
        } else {
            $parent = $collection->getFirstItem()->getId();
        }

        $recursionLevel  = max(0, (int) Mage::app()->getStore()->getConfig('catalog/navigation/max_depth'));
        $storeCategories = $category->getCategories($parent, $recursionLevel, $sorted, $asCollection, $toLoad);

        $this->_storeCategories[$cacheKey] = $storeCategories;
        return $storeCategories;
    }
}
于 2013-01-04T18:30:48.350 に答える