0

階層化されたナビゲーションをヘッダーのストリップと左側のサイドバーに配置しようとしています。<block type="catalog/layer_view" template="catalog/layer/view.phtml"/>page.xml ファイルの head ブロックに追加することでこれを行っています。これは機能しますが、フィルターをクリックすると、Magento が複数のフィルターを好まないという事実に要約されるエラーが表示されます。

a:5:{i:0;s:64:"You cannot define a correlation name 'device_idx' more than once";i:1;s:3844:"#0 /home/sitea/subdomains/casefun/trunk/lib/Varien/Db/Select.php(281): Zend_Db_Select->_join('inner join', Array, 'device_idx.enti...', Array, NULL)

スタック トレースが続きます。

フィルターを選択したときに階層化されたナビゲーションを壊れることなくテーマに複数回追加するにはどうすればよいですか?

4

2 に答える 2

1

Singleton クラスを含めるには、Mage_Catalog_Model_Resource_Layer_Filter_Attribute (ローカル フォルダー内) を上書きする必要がありました: http://codepad.org/i2a1gL8i

これにより、各フィルターの 1 つのバージョンのみを作成できました。

しかし、新たな問題が発生しました。現在適用されているフィルターのリストで、各フィルターが 2 回表示されていました。

http://i.imm.io/Gk4w.png

これに対する修正は、はるかに簡単でした。

app/design/frontend/default/{theme}/template/catalog/layer/state.phtmlのチェックを追加します。

<?php $appliedFilters = array(); ?>
<?php foreach ($_filters as $_filter): //existing line ?>
<?php
  if(in_array(strtolower($_filter->getName()), $appliedFilters))
  {
    continue; 
  }
  $appliedFilters[] = strtolower($_filter->getName());
?>

同じ名前のフィルターが既にリストされている場合は、同じ名前の他のフィルターをリストしないでください。

于 2012-10-01T15:13:51.957 に答える
1

残念ながら、レイヤード ナビゲーション ブロックを 1 ページに複数表示することはできません。ブロックが表示されるたびに、Product コレクションにフィルターが適用されます。

技術的には、標準の Layered Nav ブロックをヘッダーまたは左の配置に拡張してカスタマイズを作成し、ルールをNOT applyFiltersに追加できますが、これは簡単な作業ではありません。

于 2012-10-01T11:21:15.203 に答える