Вывод отзывов на любой странице с пагинацией
В продолжении темы Вывод товаров на любой странице с пагинацией
В этот раз предлагаю решение вывода отзывов с пагинацией. Думаю много кому пригодится.
Решение не идеальное, не тестировал на lazy load, было бы неплохо если кто-нибудь дал обратную связь
В отличии от метода вывода товаров, этот более замороченный, так как необходимо добавить пользовательский класс. Учитывая это, стоит понимать что данный метод невозможно воспроизвести в облаке webasyst.
Создаём файл wa-apps/shop/lib/classes/shopCustom.class.php
Такого содержания:
<?php class shopCustom { public function reviews($limit = 10, $offset = 0) { $product_reviews_model = new shopProductReviewsModel(); return $product_reviews_model->getList('*,is_new,contact,product', array( 'where' => array( 'review_id' => 0, 'status' => shopProductReviewsModel::STATUS_PUBLISHED ), 'limit' => $limit, 'offset' => $offset, 'escape' => true )); } }
Далее, очищаем кеш в инсталлере. И ставим сам код вывода отзывов:
{if $wa->shop} {$rev_on_page = 15} {$page_count = ceil(count($wa->shop->reviews(500))/$rev_on_page)} {$curr_page = $smarty.get.page-1} {if $curr_page < 0}{$curr_page = 0}{/if} {$reviews = shopCustom::reviews($rev_on_page, $rev_on_page*$curr_page)} {foreach $reviews as $review} {include file=$wa->shop->themePath("ID ВАШЕЙ ТЕМЫ")|cat:"review.html" inline reply_allowed=false single_view=true review=$review} {/foreach} <div class="pagination"> {wa_pagination total=$page_count attrs=['class' => "menu-h"]} </div> {/if}
Указываем ID темы в коде, можно менять количество выводимых отзывов на странице, в строке {$rev_on_page = 15}
Если у вас более 500 отзывов, то укажите порог выше, в третьей строке
5 ответов
Хелпер здесь очень сомнителен и делает доп.запрос, если вы то же самое можете сделать без него через array_slice уже на основе имеющихся данных. Нечто вида:
Подскажите, как вывести комментарии к отзывам? $review.comments не выводит((
здесь можна использовать вместо метода $product_reviews_model->getList(...) метод getFullTree, например, в хелпере используем $product_reviews_model->getFullTree(...)
а на страничке отзывов reviews.html
но....если шаблон не предусматривает lazyload, то нада в скрипте добавления отзыва убирать конструкцию ?page=??
я сделал через костыль
по вашему способу получаю ошибку типа: Syntax Error in template..... unknown tag review_reviews...
Алексей, попробовал ваше решение.
Вылетает с ошибкой. Вот эта строка ему не нравится: