カスタム非誘導ベースの層状ナビゲーション。これが唯一の方法ですか?

magento.stackexchange https://magento.stackexchange.com/questions/328

  •  16-10-2019
  •  | 
  •  

質問

今日、私は属性に基づいていない層状ナビゲーションオプションをノックアップしています。それは評価用ですので、フロントエンドは素敵な光沢のある星を見せることができます。

これを行うには:

  1. モジュールを作成しました
  2. catalog_block_layer_viewを書き直します

    <blocks>        
      <catalog>
        <rewrite>
          <layer_view>Bob_Catalog_Block_Layer_View</layer_view>
         </rewrite>                
       </catalog>
    </blocks>
    
  3. mage_catalog_block_layer_viewを拡張するbob_catalog_block_layer_viewというクラスを作成しました

  4. _initblocks()、getFilters()、_prepareLayout()を作成して、親クラスのメソッドをオーバーライドしました。これらはすべて、ある時点で親クラスを呼び出してから、返されるものに追加のデータを準備するか、追加しました。
  5. フィルターブロックを作成しますbob_catalog_block_layer_filter_rating mage_catalog_block_layer_filter_abstractを拡張するコンストラクターを使用して、filtermodelnameを設定し、その後、mage_catalog_block_block_layer_filter_absprateを持っているように、mage_catalog_block_block_layer_filter_absprateを持っているように、カスタムテンプレートを設定します。
  6. mage_catalog_model_layer_filter_abstractを拡張するモデルbob_catalog_model_layer_filter_ratingを作成します。

これはすべて正常に機能します。素敵な光沢のある星は、階層化されたナビゲーションで表示されます。

レイヤー状態テンプレートに関しては、カスタムレーティングフィルターをピックアップしてレイアウトを変更するために条件付きを入れなければならなかったので、私は何かが足りないと感じています。また、私がやらなければならないことのいくつか(製品コレクションをクローンして、コレクションがページネーションでカウントされないように製品コレクションをクローンします)は、私が丘を泳いでいるように感じさせます。

ですから、質問は、より良い提案(または多分ブログ投稿を持っている人がいることです ウィンク)カスタムの非アトリブバックレイヤードナビゲーションフィルターを構築する方法については?

読んでくれてありがとう、

si

役に立ちましたか?

解決

それを行う別の方法があります。レーティングとなる製品に通常の属性を追加できます。次に、オブザーバーを使用して(この評価がどのように形成されているかわかりません)、製品の属性を更新します。または、オブザーバーがオプションでない場合は、おそらく、スクリプトの重いものに応じて、X分ごとにすべての製品の属性を更新するCronjobを使用してください。

このようにして、Magentoの書き換えと変更の変更はありません。すべてのナビゲーションモジュールは引き続き機能し、維持が容易になります。

もちろん、問題は、これはあなたにとってオプションですか?評価はどこから来ますか?

編集 JavaScriptを使用して星をスタイリングするか、テンプレートの属性名を確認する必要があります。

他のヒント

私はコードを掘り下げましたが、イベントは見つかりませんでした。追加の属性を追加せずに、なしでは何もすることはありません <rewrite>

ブロックを追加する必要があります \Mage_Catalog_Block_Layer_View::_prepareLayout() の前に apply() (そうでない場合は、使用できます core_block_abstract_prepare_layout_after.

そして、あなたはそれを追加する必要があります \Mage_Catalog_Block_Layer_View::getFilters() そして、イベントもありません。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top