我们在服务器上安装了Wordpress,并集成了WordPress和Magento的Fishpig扩展程序。我们希望通过将相关帖子添加到前端产品页面上的新选项卡(产品说明和追加销售产品所在的位置)来利用扩展程序关联博客帖子和产品的功能。我完成了所有这些工作 - 产品页面上有一个名为“相关博客帖子”的新标签,选中后,它会显示帖子标题和摘录。 问题是,即使没有相关的博客帖子,该标签也会显示。如何在空的时候隐藏它?
我可能缺少一些简单的东西。这是我添加标签的方式:
1)此文件 app / design / frontend / base / default / layout / wordpress.xml 确定在前端产品页面上显示相关帖子的块。 在这个靠近底部的文件中,我将引用名称从 product.info.additional 更改为* related_blog_posts *。
2)到第210行附近的文件: app / design / frontend / default / {template} /layout/catalog.xml ,我放置了以下代码。我把它放在产品描述和产品加售的类似代码部分之间。
<action method="addTab" translate="title" module="catalog"><alias>related_blog_posts</alias><title>Related Blog Posts</title><block>catalog/product_list_relatedposts</block><template>catalog/product/list/relatedposts.phtml</template></action>
3)添加了一个新文件: app / code / local / Mage / Catalog / Block / Product / List / relatedposts.php 在此文件中添加了以下代码:
class Mage_Catalog_Block_Product_List_Relatedposts extends Mage_Core_Block_Template
{
protected $_list;
public function __construct()
{
parent::__construct();
$this->setTemplate('catalog/product/view/additional.phtml');
}
public function getChildHtmlList()
{
if (is_null($this->_list)) {
$this->_list = array();
foreach ($this->getSortedChildren() as $name) {
$block = $this->getLayout()->getBlock($name);
if (!$block) {
Mage::exception(Mage::helper('catalog')->__('Invalid block: %s.', $name));
}
$this->_list[] = $block->toHtml();
}
}
return $this->_list;
}
}
4)添加了一个新文件: app / design / frontend / default / {template} /template/catalog/product/list/Relatedposts.phtml ,并将以下代码添加到此文件中:< / p>
<?php foreach ($this->getChildHtmlList () as $_html): ?>
<div class="collateral-box">
<?php echo $_html ?>
</div>
<?php endforeach; ?>
5)在 app / design / frontend / base / default / template / wordpress / post / associated / list.phtml 文件中,我更改了以下代码:
<ul>
<?php foreach($posts as $post): ?>
<li>
<a href="<?php echo $post->getPermalink() ?>" title="<?php echo $this->escapeHtml($post->getPostTitle()) ?>"><?php echo $this->escapeHtml($post->getPostTitle()) ?></a>
</li>
<?php endforeach; ?>
</ul>
要:
<div class="related-posts">
<?php foreach($posts as $post): ?>
<h3><a href="<?php echo $post->getPermalink() ?>" title="<?php echo $this->escapeHtml($post->getPostTitle()) ?>"><?php echo $this->escapeHtml($post->getPostTitle()) ?></a></h3>
<?php $post->setExcerptSize($this->getExcerptLength()) ?>
<p class="related-post-excerpt"><?php echo $post->getPostExcerpt() ?></p>
<?php endforeach; ?>
</div>
最后一项更改会为每个相关帖子添加摘录,而不是仅显示标题。
6)清除缓存并重新编译网站。
摘要:新标签显示在前端产品页面上,相关的博客帖子会显示在标签中。但是,即使没有该产品的相关博客帖子,该选项卡也会显示。我已经尝试了在if / count条件下将相关信息包装在Relatedposts.phtml中的多种方法,但我无法正常工作。如果没有内容,如何阻止我的新标签显示?
答案 0 :(得分:0)
我会尝试这样的事情,或者像你提到某种计数一样,
应用/设计/前端/默认/ {模板} /template/catalog/product/list/Relatedposts.phtml 强>
<?php
if($this->getChildHtmlList()): ?>
<?php foreach ($this->getChildHtmlList () as $_html): ?>
<div class="collateral-box">
<?php echo $_html ?>
</div>
<?php endforeach; ?>
<?php endif; ?>
您还需要确保此块不返回任何空格,因为它将被解释为内容并创建选项卡。我也有一个自定义选项卡,这对我来说是个问题。如果你遇到麻烦,你应该Zend_Debug :: dump()$ this-&gt; getChildHtmlList()并查看生成的内容。