Положение getReviewsSummaryHtml (() - PullRequest
       3

Положение getReviewsSummaryHtml (()

1 голос
/ 17 сентября 2011

Я относительно новичок в Magento, поэтому, пожалуйста, будьте осторожны, если приведенный ниже глупый очевидный вопрос !!

Я хочу переместить вывод из:

$this->getReviewsSummaryHtml($this->getProduct(), false, true);

В настоящее время он находится в моем main view.phtml, как показано в этом разделе кода (это пять строк снизу):

    <div class="product-shop">
        <div class="product-name">
            <h1><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></h1>
            <div class="coda-slider-wrapper">
                <div class="coda-slider preload" id="coda-slider-1">

                    <?php foreach ($this->getChildGroup('detailed_info', 'getChildHtml') as $alias => $html):?>
                        <div class="panel box-collateral <?php echo "box-{$alias}"?>">
                            <div class="panel-wrapper">
                                <?php if ($title = $this->getChildData($alias, 'title')):?>
                                <h2><?php echo $this->escapeHtml($title); ?></h2>
                                <?php endif;?>
                                <?php echo $html; ?>
                            </div>
                        </div>
                    <?php endforeach;?>

                </div><!-- .coda-slider -->
            </div><!-- .coda-slider-wrapper -->
        </div>
        <?php echo $this->getReviewsSummaryHtml($this->getProduct(), false, true); ?>
        <?php echo $this->getChildHtml('alert_urls') ?>
        <?php echo $this->getChildHtml('product_type_data') ?>
        <?php echo $this->getTierPriceHtml() ?>
        <?php echo $this->getChildHtml('extrahint') ?>

Если строка в этой позиции выводится правильно, получается правильный "1 Отзыв (ов) | Добавить отзыв "на странице.

Я включил код над строкой, поскольку он имеет отношение к этому вопросу.Как вы видите, я использую coda-слайдер, он работает угощение и производит 4 вкладки.Соответствующий XML-код:

            <block type="catalog/product_view_additional" name="product.info.additional" as="product_additional_data" />
            <block type="catalog/product_view_description" name="product.description" as="description" template="catalog/product/view/description.phtml">
                <action method="addToParentGroup"><group>detailed_info</group></action>
            </block>
            <block type="catalog/product_view_description" name="product.tips" as="tips" template="catalog/product/view/tips.phtml">
                <action method="addToParentGroup"><group>detailed_info</group></action>
            </block>
            <block type="catalog/product_view_description" name="product.delivery" as="delivery" template="catalog/product/view/delivery.phtml">
                <action method="addToParentGroup"><group>detailed_info</group></action>
            </block>
            <block type="review/product_view_list" name="product.reviews" as="reviews" template="catalog/product/view/reviews.phtml">
                <action method="addToParentGroup"><group>detailed_info</group></action>
            </block>
            <block type="catalog/product_view" name="product.info.addtocart" as="addtocart" template="catalog/product/view/addtocart.phtml"/>

Я хочу переместить код, который будет включен в одну из вкладок, созданную в XML-файле выше, с использованием "reviews.phtml", кодадля которого есть:

    <h2 class="title"><?php echo $this->__('Reviews') ?></h2>
    <?php $_items = $this->getReviewsCollection()->getItems();
    if( count( $_items ) ){
        // Once we've stored the reviews, we can loop through them and get the data we need from each
        foreach( $_items as $_review ){?>
            <p><strong><?php echo $this->htmlEscape( $_review->getTitle() );?></strong> by <?php echo $this->htmlEscape( $_review->getNickname() );?></p>
            <p class="reviewBody"><?php echo $this->htmlEscape( $_review->getDetail() ); ?> </p>
        <?php
        }
    }

    echo $this->getReviewsSummaryHtml($this->getProduct(), false, true);

    ?>

Теперь вот проблема, в этой позиции код выдает следующую ошибку и стек вызовов:

    Fatal error: Call to a member function assign() on a non-object in /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Review/Block/Product/View.php on line 67

    Call Stack:
        0.0010     632248   1. {main}() /home/default/littledickybird.co.uk/user/htdocs/1.6/index.php:0
        0.0090     667600   2. Mage::run() /home/default/littledickybird.co.uk/user/htdocs/1.6/index.php:81
        0.0340     887168   3. Mage_Core_Model_App->run() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/Mage.php:640
        0.6510    3469248   4. Mage_Core_Controller_Varien_Front->dispatch() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Model/App.php:347
        0.6610    3615704   5. Mage_Core_Controller_Varien_Router_Standard->match() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Controller/Varien/Front.php:176
        0.6680    3693584   6. Mage_Core_Controller_Varien_Action->dispatch() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php:250
        0.7280    4461864   7. Mage_Catalog_ProductController->viewAction() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Controller/Varien/Action.php:420
        0.7290    4477472   8. Mage_Catalog_Helper_Product_View->prepareAndRender() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Catalog/controllers/ProductController.php:132
        1.3449   14029888   9. Mage_Core_Controller_Varien_Action->renderLayout() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Catalog/Helper/Product/View.php:147
        1.3449   14031072  10. Mage_Core_Model_Layout->getOutput() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Controller/Varien/Action.php:391
        1.3449   14031152  11. Mage_Core_Block_Abstract->toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Model/Layout.php:529
        1.3449   14031952  12. Mage_Core_Block_Template->_toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:863
        1.3449   14031952  13. Mage_Core_Block_Template->renderView() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:286
        1.3470   14032496  14. Mage_Core_Block_Template->fetchView() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:272
        1.3479   14076336  15. include('/home/default/littledickybird.co.uk/user/htdocs/1.6/app/design/frontend/base/default/template/page/1column.phtml') /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:241
        1.4389   14679288  16. Mage_Core_Block_Abstract->getChildHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/design/frontend/base/default/template/page/1column.phtml:48
        1.4389   14679384  17. Mage_Core_Block_Abstract->_getChildHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:526
        1.4389   14679384  18. Mage_Core_Block_Abstract->toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:582
        1.4389   14679616  19. Mage_Core_Block_Text_List->_toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:863
        1.4389   14679792  20. Mage_Core_Block_Abstract->toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Text/List.php:43
        1.4389   14680024  21. Mage_Core_Block_Template->_toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:863
        1.4389   14680024  22. Mage_Core_Block_Template->renderView() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:286
        1.4399   14680160  23. Mage_Core_Block_Template->fetchView() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:272
        1.4409   14722936  24. include('/home/default/littledickybird.co.uk/user/htdocs/1.6/app/design/frontend/LDB_default/default/template/catalog/product/view.phtml') /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:241
        1.4589   14890792  25. Mage_Core_Block_Abstract->getChildGroup() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/design/frontend/LDB_default/default/template/catalog/product/view.phtml:57
        1.4679   14919344  26. Mage_Core_Block_Abstract->getChildHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:785
        1.4679   14919440  27. Mage_Core_Block_Abstract->_getChildHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:526
        1.4679   14919440  28. Mage_Core_Block_Abstract->toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:582
        1.4829   15243672  29. Mage_Review_Block_Product_View->_toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Abstract.php:863
        1.4829   15243912  30. Mage_Core_Block_Template->_toHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Review/Block/Product/View.php:47
        1.4829   15243912  31. Mage_Core_Block_Template->renderView() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:286
        1.4829   15244056  32. Mage_Core_Block_Template->fetchView() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:272
        1.4839   15286864  33. include('/home/default/littledickybird.co.uk/user/htdocs/1.6/app/design/frontend/LDB_default/default/template/catalog/product/view/reviews.phtml') /home/default/littledickybird.co.uk/user/htdocs/1.6/app/code/core/Mage/Core/Block/Template.php:241
        1.4849   15287504  34. Mage_Review_Block_Product_View->getReviewsSummaryHtml() /home/default/littledickybird.co.uk/user/htdocs/1.6/app/design/frontend/LDB_default/default/template/catalog/product/view/reviews.phtml:12

Я предполагаю, что это что-тосделать с тем фактом, что $ это теперь "Mage_Review_Block_Product_View_List", а не "Mage_Catalog_Block_Product_View", но я абсолютно не знаю, что с этим делать !!!

Пожалуйста, помогите!(и да, это довольно отчаянная просьба!) Любая помощь будет принята с благодарностью.

С уважением, Энди.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2011

Спасибо за публикацию ошибки и трассировки стека, это значительно упрощает отладку.

Быстрая проверка исходного кода показывает, что следующая строка не возвращает блок:

$this->getLayout()->getBlock('product_review_list.count')

Если вы посмотрите на любой файл layout/review.xml, вы увидите, что секция review_product_list содержит строку для создания этого недостающего блока.

<block type="core/template" name="product_review_list.count" template="review/product/view/count.phtml" />

Вы можете скопировать это в свой макет в той точке, где выхочу показать граф.Если вы не хотите видеть количество, тогда шаблон не нужен, подойдет любой блок с таким именем:

<block type="core/abstract" name="product_review_list.count" />
1 голос
/ 18 сентября 2011

Спасибо Clockworkgeek за его помощь, он указал мне правильный путь к поиску решения.

Его решение предоставило мне «1 Отзыв (ов)», но не «Добавить свой отзыв»".

В ходе расследования я обнаружил, что" Mage_Review_Block_Product_View_List "перезаписывает функцию getReviewsSummaryHtml, как определено в Mage_Catalog_Block_Product_Abstract.Похоже, одно отличие состоит в том, что он не вызывает шаблон «сводки».

Решением было по сути вывернуть XML наизнанку из:

<block type="review/product_view_list" name="product.reviews" as="reviews" template="catalog/product/view/reviews.phtml">
    <action method="addToParentGroup"><group>detailed_info</group></action>

to:

<block type="catalog/product_view" name="product.reviews" as="reviews" template="catalog/product/view/reviews.phtml">
    <action method="addToParentGroup"><group>detailed_info</group></action>
    <block type="review/product_view_list" name="product.reviews_list" as="reviewslist" template="catalog/product/view/reviewslist.phtml" />
</block>

Измените шаблон reviews.phtml на:

<h2 class="title"><?php echo $this->__('Reviews') ?></h2>
<?php
    echo $this->getReviewsSummaryHtml($this->getProduct(), false, true);
    echo $this->getChildhtml('reviewslist');
?>

и добавьте второй шаблон reviewslist.phtml:

<?php 
    $_items = $this->getReviewsCollection()->getItems();
    if( count( $_items ) ){
        // Once we've stored the reviews, we can loop through them and get the data we need from each
        foreach( $_items as $_review ){?>
            <p><strong><?php echo $this->htmlEscape( $_review->getTitle() );?></strong> by <?php echo $this->htmlEscape( $_review->getNickname() );?></p>
            <p class="reviewBody"><?php echo $this->htmlEscape( $_review->getDetail() ); ?> </p>
        <?php
        }
    }
?>

I затему вас есть доступ к правильному getReviewsSummaryHtml () в reviews.phtml и доступ к списку отзывов в reviewslist.phtml

Что ж, похоже, это работает, но я хотел бы прочитать любые комментарии к моему решению, особенно если выувидеть любые явные ошибки в моем подходе или узнать более эффективное / элегантное решение.

С уважением, Энди

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...