0

所以我想要实现的是,将属性“促销”设置为“是”的产品显示在网站的首页上。这是有效的,但我使用的 .phtml 文件是常规的 list.phtml。这目前正在显示我设置为促销的所有项目,但我只想显示 1。

简而言之:如何编辑 list.phtml 以仅显示 1 个产品而不是所有产品?

4

1 回答 1

1

改变你拉你的收藏的方式。克隆/重命名您的 list.phtml,例如promotion.phtml。然后改变这一行,从此:

$_productCollection=$this->getLoadedProductCollection();

对此:

$_productCollection = Mage::getModel('catalog/product')
                        ->getCollection()
                        ->addAttributeToSelect('*')
                        ->addFieldToFilter('promotion', 1)
                        ->addAttributeToSort('updated_at', 'DESC')
                        ->clear()->setPageSize(1)->load();

它应该只加载一项促销设置为“是”的项目。确保在 CMS 页面内容或 XML 中设置新模板,具体取决于添加的方法。

解释

  • Mage::getModel('catalog/product')->getCollection():获取产品集合。您可以通过更改模型来获取其他集合,例如“目录/类别”和“cms/page”。

  • ->addAttributeToSelect('*'):添加所有产品列。这可以换成类似的东西('name', 'url')。我假设它比加载所有内容要快,但我没有对其进行基准测试。由于您使用的是完整模板,因此最好将此设置保留为全部。

  • ->addFieldToFilter('promotion', 1):按属性过滤产品。在这里,我们为所有将“促销”属性设置为 1(是/真)的产品过滤了产品。产品使用这个,而类别使用->addAttributeToFilter()的很奇怪。一定要通读 Alan Storm 的收藏说明(下面的链接),以了解您可以用这个做些什么。您可以通过添加另一个->addFieldToFilter()过滤器或将过滤器存储在嵌套数组中来将多个过滤器添加到您的集合中。

  • ->addAttributeToSort('updated_at', 'DESC'):按特定属性和方向对产品集合进行排序。在这里,我将“updated_at”日期设置为降序,“ASC”是升序。您可以添加多个排序属性,当然要注意添加它们的顺序。

  • ->clear()->setPageSize(1)->load():需要这三个来调整集合的拉动量。->clear()必须在它允许更改提取的产品数量之前调用。该->setPageSize()位是您指定要退回多少产品的地方->load(),当然还有加载集合。请注意,如果您不限制返回的集合的大小,则不需要这一整行,产品将迭代而无需调用->load().

资源

Alan Storm 说得最好,读一读,你应该是操纵收藏的专家:http: //alanstorm.com/magento_collections

于 2013-08-14T20:19:32.027 回答