Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
14:49
16 ноя
#
?
написал:

Сейчас блок Рекомендуемые товары записан в файле product.tpl нашего шаблона так. Как ниже вывести еще блок Аксессуары?

{* рекомендуемые товары *}
<div style="display: block;">

    <h3>
        Рекомендуемые товары
    </h3>



    {* если есть рекомендуемые товары *}
    {if isset($product->related_products) && is_array($product->related_products) && !empty($product->related_products)}

        <div class="cat">
            <ul>



                {* перебираем товары *}
                {foreach $product->related_products as $p}

                    {* подключаем мини карточку товара *}
                    {include file = 'common/product-card-mini.tpl'
                             item = $p
                             hintable = false
                             noicon_hit = false
                             noicon_newest = false
                             noicon_actional = false
                             noicon_awaited = false}

                {/foreach}



            </ul>
        </div>



    {* иначе нет рекомендуемых товаров *}
    {else}

        <div class="message_notfound">
            Для этого товара нет рекомендуемых товаров!
        </div>

    {/if}

</div>
15:09
16 ноя
#
написал:

Надо в нужное место того же tpl-файла добавить аналогичный фрагмент кода, только в нем $product->related_products везде заменить на $product->accessory_products. Ведь в переменной $product, которая передается в шаблон страницы товара, поле related_products содержит массив записей о связанных товарах, а поле accessory_products - массив записей о дополнительных товарах (аксессуарах).

Для примера привожу записанный выше фрагмент с необходимыми исправлениями, я пометил их синим цветом.

{* дополнительные товары *}
<div style="display: block;">

    <h3>
        Аксессуары
    </h3>



    {* если есть дополнительные товары *}
    {if isset($product->accessory_products) && is_array($product->accessory_products) && !empty($product->accessory_products)}

        <div class="cat">
            <ul>



                {* перебираем товары *}
                {foreach $product->accessory_products as $p}

                    {* подключаем мини карточку товара *}
                    {include file = 'common/product-card-mini.tpl'
                             item = $p
                             hintable = false
                             noicon_hit = false
                             noicon_newest = false
                             noicon_actional = false
                             noicon_awaited = false}

                {/foreach}



            </ul>
        </div>



    {* иначе нет дополнительных товаров *}
    {else}

        <div class="message_notfound">
            Для этого товара нет аксессуаров!
        </div>

    {/if}

</div>


Вообще говоря, так как этот блок повторяется на странице уже дважды, отличаясь только текстом оглавления, именем поля переменной и текстом об отсутствии товаров, то идеальным стало бы вынести блок в отдельный модуль и дважды вызывать со страницы товара, но с разными входными параметрами. То есть сам блок поместить внутри папки шаблона в файл (модуль), например именованный как common/related-products.tpl и содержащий в себе следующее (синим помечены отличия от прежнего кода):

{* модуль: дополнительные товары                              *}
{*                                                            *}
{* входные параметры: $title = текст оглавления               *}
{*                    $items = массив записей о товарах       *}
{*                    $empty = текст об отсутствующих товарах *}

<div style="display: block;">

    <h3>
        {$title|default:'Без оглавления!'}
    </h3>



    {* если получен непустой массив товаров *}
    {if isset($items) && is_array($items) && !empty($items)}

        <div class="cat">
            <ul>



                {* перебираем товары *}
                {foreach $items as $p}

                    {* подключаем мини карточку товара *}
                    {include file = 'common/product-card-mini.tpl'
                             item = $p
                             hintable = false
                             noicon_hit = false
                             noicon_newest = false
                             noicon_actional = false
                             noicon_awaited = false}

                {/foreach}



            </ul>
        </div>



    {* иначе массив товаров пуст *}
    {else}

        <div class="message_notfound">
            {$empty|default:'Нет дополнительных товаров!'}
        </div>

    {/if}

</div>


Тогда в файле product.tpl в нужном месте пишем два вызова этого модуля, как было сказано, с разными входными параметрами:

  ...
  ...

  {* показываем блок рекомендуемых товаров *}
  {include file = 'common/related-products.tpl'
           title = 'Рекомендуемые товары'
           items = $product->related_products|default:false
           empty = 'Для этого товара нет рекомендуемых товаров!'}

  ...
  ...

  {* показываем блок аксессуаров *}
  {include file = 'common/related-products.tpl'
           title = 'Аксессуары'
           items = $product->accessory_products|default:false
           empty = 'Для этого товара нет аксессуаров!'}

  ...
  ...

Написание ответа

Перед публикацией рекомендуется использовать Предпросмотр, чтобы увидеть конечный вид сообщения.


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.