2011-12-15 9 views
0

Magentoの雑誌購読を販売しているWebサイトがあり、約1000種類のタイトルがあります。私が望むのは、すべての製品がフロントページにある、非常に単純なドロップダウンメニューを作成することです。 thisと非常によく似ていますが、「製造元」を「名前」(製品名)に置き換えることはできません。Magento Frontpageでのドロップダウンすべての製品を表示

例はhereで、別のウェブサイトで雑誌購読を販売しています(右上、検索フィールド左)。

誰かがこのようなドロップダウンリストを作成するためのコードを提示できますか?

答えて

0

あなたがにリンクされている他のウェブサイトを見てみると、HTMLドロップダウンが選択された製品のURLにナビゲートするonselect属性内部のJavaScriptの小さなスニペットで、次のようになります。

<select ... onchange="window.location.href = this.value"> 
    <option>Select a product</option> 
    <option value="/path-to-foo">Foo</option> 
    <option value="/path-to-bar">Bar</option> 
</select> 

JavaScriptをナビゲートwindow.location.hrefを新しいURLに設定して、このURLを選択した<option>の値であるthis.valueから取得します。

Magentoでこのようなドロップダウンをレンダリングするには、まずMike Bywaters' code(目に見えるものとその他のものでフィルタリング)を使用してすべての製品を取得する必要があります。そして、正しい値を持つすべての製品を通じて、あなたのループと各製品のおecho<option>タグ:$productMage::getModel(...)への呼び出しの結果である場合

echo "<option value=\"/" . $product->getUrlPath() . "\">"; 
echo $product->getName(); 
echo "</option>"; 

はその後$product->getUrlPath()への呼び出しは、製品のパスを返す必要があります、as documented here

+0

ありがとうございます。すべてのタイトル(製品)をアルファベット順に並べ替えると、IDの順に並べられます。 – Tijdschriftenzo

0

あなたがドロップダウンをしたいテンプレートファイルでこれを入れてみてください:

<select> 
    <?php 
     $products = Mage::getResourceModel('catalog/product_collection') 
      ->setStore(Mage::app()->getStore()->getId()) 
      ->addAttributeToFilter('status', array('eq' => '1')) 
      ->addAttributeToFilter('type_id', array('eq' => 'simple')); 
     foreach ($products as $prod_model) { 
      $product = Mage::getModel('catalog/product')->load($prod_model->getId()); 
      echo "<option value=\"".$product->getId()."\">".$product->getName()."</option>"; 
     } 
    ?> 
</select> 

それが唯一のアクティブなシンプルな製品を取得しますが、あなたが製品の属性値に応じて、追加のフィルタを追加することができます - (> addAttributeToFilter ) 関数。

EDIT:また、多くの製品がある場合は処理に時間がかかりますが、キャッシュが有効になっていない場合は特に時間がかかります。これは本当に推奨されていません。

+0

ありがとうございます! ....しかし、あなたが正しいです、それらをすべてロードするまでには時間がかかります。 キャッシュをオンにすると、うまくいくように見えます。 2つのことが残っています。 1.非表示の商品も表示されます。 - > addAttributeToFilter( 'visibility'、array( 'eq' => 'カタログ、検索')) 2.製品を選択するときは、あなたに指示しませんそれ。 (それはちょうど今の名前を示しています) 3.「タイトルを選んでください」のように、テキストで最初の選択肢を入れる方法。 – Tijdschriftenzo

+0

@Mike、私はあなたに「普通の」感覚をもたらす[Mage_Catalog_Model_Layer#prepareProductCollection() '](http://docs.magentocommerce.com/Mage_Catalog/Mage_Catalog_Model_Layer.html#prepareProductCollection)のソースを見ることをお勧めしますこの小さな宝石、 'Mage :: getSingleton( 'catalog/product_status') - > addVisibleFilterToCollection($ collection);' – clockworkgeek

+0

のような製品リストは、私の頭の上から外して、 "visibility"を0,1,2または3.ドロップダウンで何かをするには、ある種のJavaScriptを添付する必要があります。空白のオプションを追加する場合は、を選択してください。PHP –

関連する問題