Условное отображение блоков на вкладках страницы продукта - PullRequest
1 голос
/ 27 января 2012

Я изменяю внешний вид сайта 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 приводит к тому, что форма «оставьте свой отзыв» отображается на вкладке «Отзывы» на странице продукта.

Я отследил функцию 'addTab в /app/code/core/Mage/Catalog/Block/Product/View/Tabs.php, и я могу посмотреть, как это работает.Тем не менее, я не думаю, что видел способ использовать 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; ?>

Похоже, у него есть условные функции для 'сделай это, если есть обзоры, сделайв противном случае, если нет отзывов.Как я могу вызвать это ранее в цепочке рендеринга, чтобы решить, каким будет контекст блока, который рендерится на странице?Это задача, которую нужно выполнить в части phtml в части XML?

1 Ответ

1 голос
/ 27 января 2012

Возможно, вам понадобится создать свой собственный файл phtml, скопировать этот сводный файл в качестве отправной точки, но в другом случае вместо рендеринга ссылки отобразите блок, включенный в эту другую страницу.Затем вы можете настроить XML-файл для этого блока, чтобы сообщить ему, что вы используете новый файл шаблона, заменив атрибут шаблона.Вы можете добавить блок формы просмотра как дочерний элемент, используя макет xml, а затем использовать echo $this->getChildHtml('as_field_of_block'); или, альтернативно, просто жестко запрограммировать это в шаблон.Первый вариант, вероятно, более гибкий, но потребует немного дополнительной настройки xml.

...