我正在为页脚构建一个“本月产品”块。它应该加载一个类别的产品并显示第一个。
这是我的模板文件custom/featured-product.phtml
:
<?php $_productCollection = $this->getLoadedProductCollection() ?>
<div class="featured-product">
<h2><?php echo $this->__('Product of the Month') ?></h2>
<?php foreach ($_productCollection as $_product): ?>
<div class="item">
<a class="product-image" href="<?php echo $_product->getProductUrl() ?>">
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(200); ?>" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" />
</a>
<a class="product-name" href="<?php echo $_product->getProductUrl() ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a>
<?php echo $this->getPriceHtml($_product, true) ?>
</div>
<?php
// Note: Exit after first product.
break;
?>
<?php endforeach ?>
</div>
它只是 Magento 产品列表模板的简化版本:catalog/product/list.phtml
在职的
在 CMS 页面中嵌入块时,它可以正常工作。例子:
{{block type="catalog/product_list" category_id="13" template="custom/featured-product.phtml" }}
不工作
通过 嵌入块时local.xml
,它会失败。返回正确的标记,但未加载指定的类别。而是加载了一组随机(我不知道它们是如何选择的)产品。
我的代码local.xml
:
<default>
<reference name="footer">
<block type="catalog/product_list" name="custom.featuredProduct" as="product_of_the_month" category_id="13" template="custom/featured-product.phtml" />
</reference>
</default>
为了完整起见,我page/html/footer.phtml
像这样显式地渲染块:
<?php echo $this->getChildHtml('product_of_the_month') ?>
有任何想法吗?
我最好的猜测是我local.xml
的不正确。我需要加载父块吗?
[更新]
我的原始代码使产品页面崩溃。解决方法不是将代码如此依赖于 Magento 核心文件:catalog/product/list.phtml
. 特别避免这一行:
<?php $_productCollection = $this->getLoadedProductCollection() ?>
[解决方案]
此处包含带有用于 CMS 页面和 LayoutXML 示例的工作版本: https ://stackoverflow.com/a/12288000/1497746