Вывод дополнительного контента — блоки, страницы, блог
Помимо товаров и категорий, в шаблонах Shop-Script можно выводить статические страницы, общие блоки, записи блога и промо-карты. Это позволяет создать полноценный сайт-магазин с информационным контентом.
Общие блоки (shared blocks)
Заголовок раздела «Общие блоки (shared blocks)»
Общие блоки — это фрагменты HTML/Smarty, которые создаются в Сайт → Страницы → Общие блоки и подключаются в любых шаблонах.
Типичные примеры: шапка сайта, подвал, баннер акции, блок доверия, счётчики аналитики.
Создание блока
Заголовок раздела «Создание блока»- Перейдите в Сайт → Страницы
- Переключитесь на вкладку Общие блоки
- Создайте блок с ID, например
promo_banner - Введите HTML-содержимое
Подключение в шаблоне
Заголовок раздела «Подключение в шаблоне»{* Подключить общий блок по ID *}{$wa->block("promo_banner")}
{* Передать параметры в блок *}{$wa->block("promo_banner", ['first' => 100, 'second' => 500])}Каждый переданный параметр доступен внутри блока как Smarty-переменная:
{* Внутри блока promo_banner *}{$sum = $first + $second}Итого: {$sum}Статические страницы магазина
Заголовок раздела «Статические страницы магазина»Страницы «Доставка и оплата», «О магазине», «Контакты» создаются в бекенде магазина и доступны через $shop_pages или хелпер $wa->shop->pages().
Вывод списка страниц в навигации
Заголовок раздела «Вывод списка страниц в навигации»{foreach $shop_pages as $page} <a href="{$page.url}">{$page.name}</a>{/foreach}Вывод страниц из приложения «Сайт»
Заголовок раздела «Вывод страниц из приложения «Сайт»»{$site_pages = $wa->site->pages()}{foreach $site_pages as $page} <a href="{$page.url}">{$page.name}</a>{/foreach}Получение конкретной страницы по ID
Заголовок раздела «Получение конкретной страницы по ID»{$about = $wa->site->page(5)}{if $about} <h2>{$about.name}</h2> <div>{$about.content}</div>{/if}Записи блога
Заголовок раздела «Записи блога»Если установлено приложение «Блог», его записи можно выводить в шаблонах магазина — например, на главной странице.
Последние записи из всех блогов
Заголовок раздела «Последние записи из всех блогов»{$posts = $wa->blog->posts(null, 3)}{if $posts}<section class="blog-section"> <h2>Блог магазина</h2> {foreach $posts as $post} <article class="blog-card"> <h3> <a href="{$post.link}">{$post.title}</a> </h3> <time>{$post.datetime|wa_date}</time> <p>{$post.text|strip_tags|truncate:150:'...'}</p> </article> {/foreach}</section>{/if}Записи из конкретного блога
Заголовок раздела «Записи из конкретного блога»{* Получить записи блога с ID=2, лимит 5 *}{$news = $wa->blog->posts(2, 5)}Информация о блоге
Заголовок раздела «Информация о блоге»{$blog = $wa->blog->blog(1)}<h2>{$blog.name}</h2><a href="{$blog.link}">Все записи</a>Промо-карты (баннеры)
Заголовок раздела «Промо-карты (баннеры)»
Промо-карты настраиваются в бекенде магазина (Магазин → Витрина → Промо) и доступны на главной странице через $promocards:
{if $promocards}<div class="promo-slider"> {foreach $promocards as $promo} <div class="promo-slide" style="background-color: {$promo.color}"> {if $promo.image} <img src="{$promo.image}" alt="{$promo.title|escape}"> {/if} <div class="promo-slide__content"> <h2>{$promo.title}</h2> {$promo.body} {if $promo.link} <a href="{$promo.link}" class="btn">Подробнее</a> {/if} {if $promo.countdown_datetime} <div class="countdown" data-until="{$promo.countdown_datetime}"> </div> {/if} </div> </div> {/foreach}</div>{/if}Получение промо-карт через хелпер
Заголовок раздела «Получение промо-карт через хелпер»Если нужно вывести промо-карты не только на главной:
{$promos = $wa->shop->promos('all', 3)}Наборы товаров
Заголовок раздела «Наборы товаров»На главной странице доступны предустановленные наборы:
{* Хиты продаж *}{if $bestsellers}<section class="product-set"> <h2>{$theme_settings.homepage_bestsellers_title|default:'Хиты продаж'}</h2> {foreach $bestsellers as $product} {include file="product-card.html" product=$product} {/foreach}</section>{/if}
{* Распродажа *}{if $onsale}<section class="product-set"> <h2>Распродажа</h2> {foreach $onsale as $product} {include file="product-card.html" product=$product} {/foreach}</section>{/if}Произвольный набор товаров
Заголовок раздела «Произвольный набор товаров»Вы можете вывести товары из любого списка, созданного в бекенде:
{* Вывод набора по ID *}{$gifts = $wa->shop->productSet(5, ['limit' => 8])}{if $gifts} {foreach $gifts as $product} {include file="product-card.html" product=$product} {/foreach}{/if}
{* Вывод товаров по тегу *}{$tagged = $wa->shop->products('tag/подарок', 0, 6)}
{* Вывод товаров из конкретной категории *}{$from_cat = $wa->shop->products('category/12', 0, 4)}Фотогалерея
Заголовок раздела «Фотогалерея»Если установлено приложение «Фото»:
{* Последние 6 фото из альбома с ID=3 *}{$photos = $wa->photos->photos('album/3', 'middle', 6)}{if $photos}<div class="gallery"> {foreach $photos as $photo} <a href="{$photo.thumb_big}"> <img src="{$photo.thumb_middle}" alt="{$photo.name|escape}" loading="lazy"> </a> {/foreach}</div>{/if}График работы магазина
Заголовок раздела «График работы магазина»{$schedule = $wa->shop->schedule()}{if $schedule}<div class="work-schedule"> <h3>Режим работы</h3> {foreach $schedule.current_week as $day} <div class="schedule-day {if !$day.work}day-off{/if}"> <span>{$day.name}</span> {if $day.work} <span>{$day.start_work} — {$day.end_work}</span> {else} <span>Выходной</span> {/if} </div> {/foreach}</div>{/if}Контактная информация
Заголовок раздела «Контактная информация»<div class="contacts"> <p>Магазин: {$wa->shop->settings('name')}</p> <p>Телефон: {$wa->shop->settings('phone')}</p> <p>Email: {$wa->shop->settings('email')}</p></div>Если магазин работает с несколькими валютами, в подвале можно вывести переключатель:
{if $currencies|count > 1}<div class="currency-switcher"> {foreach $currencies as $code => $cur} <a href="?currency={$code}" class="{if $code == $wa->shop->currency()}active{/if}"> {$cur.title} </a> {/foreach}</div>{/if}Страница всех отзывов
Заголовок раздела «Страница всех отзывов»По умолчанию отзывы отображаются только на страницах отдельных товаров. Чтобы собрать все отзывы на одной странице, нужна небольшая доработка.
Шаг 1. Создайте класс
Заголовок раздела «Шаг 1. Создайте класс»Создайте файл shopAllReviews.class.php в папке /wa-apps/shop/lib/classes/:
<?phpclass shopAllReviews{ public static function reviews($limit = 500, $offset = 0) { $product_reviews_model = new shopProductReviewsModel(); return $product_reviews_model->getList('*,is_new,contact,product,images', array( 'where' => array( 'review_id' => 0, 'status' => shopProductReviewsModel::STATUS_PUBLISHED ), 'limit' => $limit, 'offset' => $offset, 'escape' => true )); }}Шаг 2. Очистите кеш
Заголовок раздела «Шаг 2. Очистите кеш»Перейдите в Настройки → Системные и очистите кеш, чтобы система подхватила новый класс.

Шаг 3. Создайте страницу отзывов
Заголовок раздела «Шаг 3. Создайте страницу отзывов»Перейдите в Магазин → Витрина → Страницы и создайте новую страницу «Отзывы».

На вкладке HTML вставьте код:
{$rev_on_page = 10}{$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 = shopAllReviews::reviews($rev_on_page, $rev_on_page*$curr_page)}
<div class="full-review">{foreach $reviews as $review} <div class="full-review-item"> <div class="full-review-item__leftside"> <a href="{$review.product_url}"> <img src="{$review.product_url_crop_small|replace:'48x48':'200x0'}" alt="{$review.product.name|escape}"> </a> </div> <div class="full-review-item__rightside"> <div class="full-review-item__username">{$review.author.name}</div> <div class="full-review-item__date"> {$review.datetime|wa_datetime:'humandatetime'} </div> {if $review.title} <div class="full-review-item__title">{$review.title}</div> {/if} {if $review.text} <div class="full-review-item__description">{$review.text}</div> {/if} {if !empty($review.images)} <div class="full-review-item__images"> {foreach $review.images as $_image} <a href="{$_image.url_0|escape}" target="_blank"> <img src="{$_image.url_2|escape}" alt="{$_image.description|escape}"> </a> {/foreach} </div> {/if} </div> </div>{/foreach}
{wa_pagination total=$page_count attrs=['class' => 'r-pagination']}</div>Параметр $rev_on_page задаёт количество отзывов на одной странице. Пагинация добавляется автоматически через {wa_pagination}.
