Как вывести диапазон зачеркнутых цен?

Добрый день. Может кто знает как можно вывести диапазон зачеркнутых цен?

Вот пример:

Вот мои наработки по коду:

{if $p.min_price != $p.max_price}
<span class="price price-from">
<span>{($p.min_price)}</span> <span><small> - </small>{shop_currency($p.max_price)}</span>
</span>
<br>
{*<span>{($p.compare_min_price)}</span> <span><small> - </small>{shop_currency($p.compare_max_price)}</span>*}
{else}
<span>{shop_currency($p.price)}</span>
<br>
{if $p.compare_price > 0} <s>{shop_currency($p.compare_price)}</s>{/if} 
{/if}

1 ответ

  • 1
    replicant 1 июня 2020 17:14 #

    Не существует никакого compare_max_price. В массиве продукта действительно есть min_price и max_price, а с зачеркнутой ценой сложнее. Ниже приведена структура данных, которая вам нужна для получения необходимых старых цен артикулов compare_price.

    В этом примере будет так:
    Цена: 400 (артикул по-умолчанию)
    Диапазон цен: 300 - 450
    Старые цены: 350 - 550

    'product' => shopProduct object {
    *data => array(
    'id' => '150',
    
    'price' => '400.0000',
    'compare_price' => '450.0000',
    'min_price' => '300.0000',
    'max_price' => '450.0000',
    ),
    
    'skus' => array(
    153 => array(
      'id' => '153',
      'product_id' => '150',
      'price' => '400',
      'compare_price' => '450',
    ),
    154 => array(
      'id' => '154',
      'product_id' => '150',
      'price' => '300',
      'compare_price' => '350',
    ),
    155 => array(
      'id' => '155',
      'product_id' => '150',
      'price' => '450',
      'compare_price' => '550',
    ),

    Надо брать все старые цены (compare_price) всех артикулов товара, лепить из них новый массив, сортировать его по цене и выбирать максимальное и минимальное значение, которые и показывать.

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

    Либо же надо брать граничные артикулы, которым соответствуют значениям min_price и max_price и брать их compare_price как первое и второе значение для границ, но, может опять же оказаться так, что эта пара не будет соответствовать максимально большому и минимально низкому значению старых цен для граничных актуальных цен, если есть артикул, у которого зачеркнутая цена окажется больше, но новая меньше в силу большей скидки.

    Вероятность разрыва логической цепочки мала, но всё же есть. Однако бояться этого не стоит. Тут уже надо смотреть по коду какой из двух вариантов будет лучше получаться.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите