在产品页面选项卡中有条件地显示块

时间:2012-01-26 23:39:33

标签: php xml magento magento-1.5 frontend

我正在改变Magento 1.5网站的前端布局,我正在尝试将我的产品评论从单独的页面转移到下方的“更多信息”选项卡之一目录中的产品页面。因此,我希望此选项卡的内容是有条件的 - 我希望选项卡在存在时显示现有评论,但在产品尚未评论时显示评论创建表单。

这是我到目前为止所尝试过的,我试图整理的部分。

/app/design/frontend/our-site/default/review.xml:

<catalog_product_view translate="label">
    <label>Catalog Product View</label>
    <reference name="product.info.tabs">
        <action method="addTab" translate="title" module="review">
            <alias>product.reviews</alias>
            <title>Reviews</title>
            <block>review/form</block>
            <template>review/form.phtml</template>
        </action>
    </reference>
</catalog_product_view>                                            

此XML导致“留下您的评论”表单显示在产品页面上名为“评论”的标签下。

我在/app/code/core/Mage/Catalog/Block/Product/View/Tabs.php中追踪了'addTab函数,我可以看看它是如何工作的。但是,我认为我没有看到使用XML的方式是有条件的,应该在页面上显示什么。

我注意到summary.phtml文件做了我想要的事情:它有:

if ($this->getReviewsCount()): ?>
    <div class="ratings">
        <?php if ($this->getRatingSummary()):?>
             <div class="rating-box">
                <div class="rating" style="width:<?php echo $this->getRatingSummary() ?>%"></div>
             </div>
    <?php endif;?>
         <p class="rating-links">
             <a href="<?php echo $this->getReviewsUrl() ?>"><?php echo $this->__('%d Review(s)', $this->getReviewsCount()) ?></a>
             <span class="separator">|</span>
             <a href="<?php echo $this->getReviewsUrl() ?>#review-form">
                 <?php echo $this->__('Add Your Review') ?></a>
         </p>
    </div>
<?php elseif ($this->getDisplayIfEmpty()): ?>
    <p class="no-rating">
        <a href="<?php echo $this->getReviewsUrl() ?>#review-form">
            <?php echo $this->__('Be the first to review this product') ?>
        </a>
    </p>
<?php endif; ?>

看起来它有条件函数'如果有评论就这样做,否则如果没有评论就这样做。如何在渲染链的早期调用它来决定渲染到页面中的块的上下文是什么?这是一项需要在XML部分的phtml部分完成的任务吗?

1 个答案:

答案 0 :(得分:1)

您可能需要创建自己的phtml文件,将该摘要复制为起点,但在其他地方,而不是呈现链接呈现该其他页面上包含的块。然后,您可以调整该块的xml文件,通过替换template属性告诉您使用新模板文件。您可以使用xml布局将审阅表单块添加为子项,然后使用echo $this->getChildHtml('as_field_of_block');,或者只是将其硬编码到模板中。前一个选项可能更灵活,但需要对xml进行一些额外的调整。