Почему опции товара не учитываются в старой цене?

Здравствуйте! <br/> <br/> На сайте цена и старая цена отображаются следующим образом: <br/> <br/> <pre><code>{if $price}
                                    &lt;div class="product__block-price mb-4"&gt;
                                        &lt;div class="product__price "&gt;{($_modx-&gt;resource.parent == 12) ? 'От' : '' } &lt;span class="msoptionsprice-cost msoptionsprice-{$_modx-&gt;resource.id}"&gt; {$price}&lt;/span&gt; {'ms2_frontend_currency' | lexicon}&lt;/div&gt;
                                        {if $old_price}
                                            &lt;div class="product__price old-price "&gt;&lt;span class="msoptionsprice-old-cost msoptionsprice-{$_modx-&gt;resource.id}"&gt;{$old_price}&lt;/span&gt; {'ms2_frontend_currency' | lexicon}&lt;/div&gt;
                                        {/if}
                                    &lt;/div&gt;
                                {/if}</code></pre> <br/> <br/> У новой цены учитываются опции, тогда как старая цена не включает их. Как можно это исправить?
  • 21 февраля 2025 г. 11:54
Ответы на вопрос 1
Для того чтобы старая цена учитывала опции товара, требуется изменить логику, которая определяет старую цену в вашем шаблоне. В текущем коде, старую цену ($old_price) вы, скорее всего, получаете без учета опций.

Если в вашем магазине используются опции (например, разные размеры или цвета), выясните, как у вас формируется старая цена. Возможно, она определяется как цена базового продукта, без применения дополнительных наценок или скидок от опций.

Вот возможные шаги для решения проблемы:

1. **Проверьте логику формирования цен**:
   Убедитесь, что старая цена ($old_price) формируется аналогично новой цене ($price) и учитывает опции. Возможно, в вашем коде потребуется добавить проверку на наличие выбранных опций и пересчитывать старую цену с их учетом.

2. **Корректировка в шаблоне**:
   Если вы можете получить старую цену с учетом опций, измените ваш шаблон следующим образом:

   ```smarty
   {if $price}
       <div class="product__block-price mb-4">
           <div class="product__price ">{($_modx->resource.parent == 12) ? 'От' : '' } <span class="msoptionsprice-cost msoptionsprice-{$_modx->resource.id}"> {$price}</span> {'ms2_frontend_currency' | lexicon}</div>
           {if $old_price}
               <div class="product__price old-price "><span class="msoptionsprice-old-cost msoptionsprice-{$_modx->resource.id}">{$old_price}</span> {'ms2_frontend_currency' | lexicon}</div>
           {/if}
       </div>
   {/if}
   ```

3. **Убедитесь, что старую цену можно получить с учетом опций**:
   Если у вас есть функция или метод для получения старой цены с учетом опций (например, `getOldPriceWithOptions($productId)`), используйте её, чтобы получить корректную старую цену:

   ```smarty
   {assign var="old_price" value=getOldPriceWithOptions($product.id)}
   ```

4. **Измените модель данных**:
   Если ваша система хранения данных не позволяет получать старую цену с учетом опций, вам нужно модифицировать логику, которая отвечает за обработку цен, чтобы эта информация появилась.

5. **Тестирование**:
   После внесения изменений протестируйте отображение цен на разных товарах с различными опциями, чтобы убедиться, что старая цена теперь корректно отображается.

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