2011-12-15 103 views
0

我有一个销售杂志订阅的Magento网站,大约有1000种不同的标签。我想要的是创建一个非常简单的下拉菜单,在首页上预先填充所有产品。非常像this,只是我似乎无法用'name'(产品名称)取代​​'制造商'。下载Magento Frontpage显示所有产品

一个例子可以找到here与不同的网站出售杂志订阅以及(右上方,搜索字段左边)。

有人可以给我们提供一些代码来创建这样的下拉列表吗?

回答

0

看着你的联系,下拉HTML看起来像这样,使用JavaScript的一个小片段内onselect属性的其他网站导航到所选产品的网址:

<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,并从this.value获取此URL,这是所选<option>的值。

要呈现一个下拉这样在Magento你首先必须得到使用Mike Bywaters' code(可见光和诸如此类的东西过滤)的所有产品。然后你通过所有的产品循环,你echo<option>标记为正确的值的每个产品:

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

如果$productMage::getModel(...)呼叫的结果,那么到$product->getUrlPath()调用应该返回产品的路径,as documented here

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( )功能。

编辑:此外,如果您有很多产品,则需要花费很长时间,尤其是如果您没有启用缓存,则需要很长时间。这不是真的推荐。

+0

谢谢! ....但是你是对的,需要很长的时间来加载它们。 但是,当开启缓存时,它似乎工作得很好。 剩下几件事: 1.它也会显示不可见的产品。我添加了,但没有做这项工作: - > addAttributeToFilter('visibility',array('eq'=>'Catalog,search')) 2.当选择一个产品时,它不会指引您它。 (它现在只显示姓名) 3.如何将第一个选择与文本,如“选择标题”。 – Tijdschriftenzo 2011-12-16 13:35:27

+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 2011-12-16 15:38:43