Автор Тема: Количество комбинации товара  (Прочитано 337 раз)

30 Мая 2014, 14:07:32
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
У меня в магазине вывод комбинаций товаров реализован картинками:



Хочу добавить следующее условие: если количество конкретной комбинации <= 0, то картинке добавляется стиль, который ее обесцвечивает.
Вопрос: как выглядит переменная количества товара конкретной комбинации?

Цена вопроса 5$.
30 Мая 2014, 14:39:17
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 13285
  • Репутация: +14557/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Шаблон product.tpl.
// Images
var img_prod_dir = '{$img_prod_dir}';
var combinationImages = new Array();

{if isset($combinationImages)}
{foreach from=$combinationImages item='combination' key='combinationId' name='f_combinationImages'}
combinationImages[{$combinationId}] = new Array();
{foreach from=$combination item='image' name='f_combinationImage'}
combinationImages[{$combinationId}][{$smarty.foreach.f_combinationImage.index}] = {$image.id_image|intval};
{/foreach}
{/foreach}
{/if}

combinationImages[0] = new Array();
{if isset($images)}
{foreach from=$images item='image' name='f_defaultImages'}
combinationImages[0][{$smarty.foreach.f_defaultImages.index}] = {$image.id_image};
{/foreach}
{/if}

..........

{if isset($images) && count($images) > 0}
<!-- thumbnails -->
<div id="views_block" class="clearfix {if isset($images) && count($images) < 2}hidden{/if}">
30 Мая 2014, 15:38:39
Ответ #2
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Шаблон product.tpl...

Насколько я понимаю, Это не то, что мне нужно.
Возможно не совсем корректно сформировал условие. Сейчас вывод комбинаций идет так:

<ul id="product_list_acc">
{foreach from=$combinationImages key=id_attribute item=prop_arr}
<li class="ajax_block_product" {if $combination.quantity <= 0} grayscale {/if}" id="attr_list_img_{$prop_arr[0].id_atr}" onclick="javascript:updateColorSelect({$prop_arr[0].id_atr});$('#wrapResetImages').show('slow');">
{assign var=imageIdsAtr value="`$product->id`-`$prop_arr[0].id_image`"}
<img src="{$link->getImageLink($product->link_rewrite, $imageIdsAtr, 'small')}" alt="{$prop_arr[0].legend|escape:'htmlall':'UTF-8'}" />
</li>
{/foreach}
</ul>

Где {if $combination.quantity <= 0} grayscale {/if} -  условие, которое я хочу задать. Переменная $combination.quantity поставлена для примера. Логика такая: количество комбинации <= 0, к картинке добавляется еще один стиль.
30 Мая 2014, 15:48:03
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86054
  • Репутация: +25403/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Руководство по Smarty - foreach

Цитировать
.first
Свойство first равно TRUE, если текущая итерация {foreach} - первая.

.index
index значение текущей итерации цикла и всегда начинается с 0.

.iteration
iteration содержит значение текущей итерации цикла и всегда начинается с единицы, в отличие от index. Это значение увеличивается на единицу с каждой следующей итерацией.

.total
total содержит общее количество итераций, которое пройдет данный цикл
{foreach from=$combinationImages key=id_attribute item=prop_arr name=imageAttr}
            {if $smarty.foreach.imageAttr.first}один класс{else}другой класс{/if}
31 Мая 2014, 12:07:13
Ответ #4
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если честно, нифига не понял  :(
31 Мая 2014, 12:44:28
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32999
  • Репутация: +26759/-0
    • Просмотр профиля
Что не понятного? Все как написал,"если количество конкретной комбинации <= 0, то картинке добавляется стиль, который ее обесцвечивает."
Количество определяется размером массива "combinationImages".
Для первого элемента ничего не добавляем, для всех последующих добавляется класс стилей "grayscale".
<ul id="product_list_acc">
{foreach from=$combinationImages key=id_attribute item=prop_arr name=imageAttr}
<li class="ajax_block_product" {if !$smarty.foreach.imageAttr.first}grayscale{/if}"