3

すぐに使えるMagentoのインストールで、ルートカテゴリから始まる階層化されたナビゲーションページを表示することは可能ですか?

つまり、サンプルデータを使用して、

http://magento1point7pointzeropoint1.dev/catalog/category/view/id/8

ストア内のすべての携帯電話のリストを取得しましたが、階層化されたナビゲーションでは、カテゴリで並べ替えるオプションがありません。

携帯電話の親カテゴリページ(電子機器)に移動した場合

http://magento1point7pointzeropoint1.dev/catalog/category/view/id/13

階層化されたナビゲーションにより、フィルタリングするオプションが提供されます

Cell Phone
Camera
Computer

これらはすべてElectronicsのサブカテゴリです。

ですから、私が知りたいのは、ストア/システムにROOTカテゴリを参照できるページがあり、階層化されたナビゲーションにより、トップレベルのカテゴリ(家具、電子機器、アパレル)のいずれかで並べ替えることができます。 ) または、*これらの親カテゴリのすべてのサブカテゴリで並べ替える機能(リストするには多すぎます)。

ルートカテゴリを参照しようとすると

http://magento1point7pointzeropoint1.dev/catalog/category/view/id/3    

404ページを取得します。だから私の最初の仮定は機能が存在しないということですが、あなたの最初の本能はしばしばあなたを迷わせるので、私は決定的な答えのためにStackOverflow/「コミュニティ」に目を向けます。

(境界性プログラミング関連、私は知っていますが、私は研究の一環としてプログラミングの問題を求めています)

4

2 に答える 2

4

それは可能であり、真のマゼント方式であり、それほど単純ではありません。コントローラがルートカテゴリを表示するのを妨げる主なものはcatalog/categoryヘルパーです。

カテゴリコントローラは、次のメソッド_initCatagoryを呼び出します。canShow

if (!Mage::helper('catalog/category')->canShow($category)) {
    return false;
}

メイジカテゴリーヘルパー:

public function canShow($category)
{
    if (is_int($category)) {
        $category = Mage::getModel('catalog/category')->load($category);
    }

    if (!$category->getId()) {
        return false;
    }

    if (!$category->getIsActive()) {
        return false;
    }
    if (!$category->isInRootCategoryList()) {
        return false;
    }

    return true;
}

ご覧のとおり、カテゴリがルートカテゴリではないことを確認します。私が過去にこの問題に取り組んだ方法は、次のようなモジュールを使用することです。

  • 「すべての製品」のランディングページを処理し、カスタムカテゴリコントローラーをインスタンス化するカスタムルーターを作成します
  • 適切なサイトのルートカテゴリとprovの読み込みを処理するコントローラを作成します(コアカテゴリコントローラを拡張します)
  • このメソッドをオーバーロードし、チェックする溝を削除する独自のカテゴリヘルパーを実装します

そこから他の問題に遭遇する可能性がありますが、少なくとも出発点が必要です。

あなたの質問にもっと直接的に答えるために、私の経験から、それはそれを靴磨きすることなしには存在しません。

于 2013-01-15T00:25:07.377 に答える
3

私が提案するのは、多少異なるアプローチですが、カテゴリのルーティング/処理などに大量の大幅な変更を加えることなく機能するはずのアプローチです.

Products、Catalog、または同様の一般的なラベルが付けられたルートにカテゴリを追加します。階層化されたナビゲーションをサポートするように構成し、他のすべてのカテゴリをその中に入れます。もちろん、これは上部のナビゲーションがおかしくなっていることを意味します。タスク#2に続きます。

カテゴリが希望どおりに設定されたのでMage_Catalog_Block_Navigation、メソッドの一番上にあるロジックを書き直して変更し、マークアップの構築に使用される配列を埋めるループrenderCategoriesMenuHtmlの最初の子のレンダリングを開始します。$child$activeCategories

これは、ルート カテゴリを階層に結び付ける方法をいじるよりもはるかにクリーンなアプローチであることが判明し、マスター レイヤード ナビゲーションを持つという目標を達成します。唯一の潜在的な欠点 (見方によっては) は、URI とブレッドクラム トレイルに「/products/」(またはカタログ) が含まれることです。

于 2013-01-15T01:56:57.030 に答える