Курс цен производителей
Всем привет. Делаю курс цен от производителя. Нужно к ценам умножать курс от производителя для price и old_price, если производитель у товара не указан, то выводить глобальный курс, который создан в системных настройках. Не самый изящный способ использовал. Добавил новое поле `curs` в таблицу ms2_vendors изменения в файлах модели, схемы и extjs, чтобы добавить новое поле с курсом пересчёта и установил на эти файлы CHMOD 444, чтоб при обновлении эти файлы не затёрлись.
Затем написал плагин:
CursPrice и повесил на события msOnGetProductPrice, msOnChangeInCart, msOnAddToCart и msOnRemoveFromCart.
Код плагина:
Вот такая форма у страницы с товаром:
/site.ru/core/components/minishop2/model/minishop2/msvendor.class.php
/site.ru/core/components/minishop2/model/schema/minishop2.mysql.schema.xml
/site.ru/assets/components/minishop2/js/mgr/settings/vendor/grid.js
/site.ru/assets/components/minishop2/js/mgr/settings/vendor/window.jsЗатем написал плагин:
CursPrice и повесил на события msOnGetProductPrice, msOnChangeInCart, msOnAddToCart и msOnRemoveFromCart.
Код плагина:
<?php
switch ($modx->event->name) {
case 'msOnGetProductPrice': case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
$curs_global = $modx->getOption('ms2_curs_global');
$curs_global_enable = $modx->getOption('ms2_curs_global_enable');
$product = $modx->getObject('msProduct', $data['id']);
$curs = $product->get('vendor.curs');
$old_price = $product->get('old_price');
// Подключаем массив значений по ссылке - так удобнее
if (!isset($modx->event->returnedValues['old_price'])) {
$modx->event->returnedValues['old_price'] = $old_price;
}
$old_price = & $modx->event->returnedValues['old_price'];
$values = & $modx->event->returnedValues;
if($curs_global_enable != 1) {
// Удваиваем цену:
$values['price'] = $price * $curs;
$old_price = $old_price * $curs;
} else {
$values['price'] = $price * $curs_global;
$old_price = $old_price * $curs_global;
}
//exit(var_dump($old_price));
break;
}Вот такая форма у страницы с товаром:
<form class="variants ms2_form count" method="post">
<input type="hidden" name="id" value="{$_modx->resource.id}"/>
<input type="hidden" name="count" value="1"/>
<input type="hidden" name="options" value="[]">
<ul class="feature">
{if $model != ''}
<li>
<span class="feature-title">Модель:</span>
<span>{$model}</span>
</li>
{/if}
{if $vendor != ''}
<li>
<span class="feature-title">Производитель:</span>
<span>[[!+vendor.name]]</span>
</li>
{/if}
{if $lenght != ''}
<li>
<span class="feature-title">Длина (см.):</span>
<span>{$lenght} </span>
</li>
{/if}
{if $width != ''}
<li>
<span class="feature-title">Ширина (см.):</span>
<span>{$width} </span>
</li>
{/if}
{if $height != ''}
<li>
<span class="feature-title">Высота (см.):</span>
<span>{$height}</span>
</li>
{/if}
{if $made_in != ''}
<li>
<span class="feature-title">Страна:</span>
<span>{$made_in}</span>
</li>
{/if}
{if $guarantee != ''}
<li>
<span class="feature-title">Гарантия:</span>
<span>{$guarantee}</span>
</li>
{/if}
</ul>
<div class="price clearfix">
<span id="price">{$price}</span> руб
{if $old_price != 0}
<span class="old"><strike>{$old_price}</strike></span> руб
{/if}
</div>
<div class="submit">
<button
class="quickview"
name="ms2_action"
type="submit"
value="cart/add"
data-click
data-quickview-mode="modal"
data-data-action="snippet"
data-data-element="!msCart"
data-dialog-title="Товары в корзине:"
data-dialog-buttons='{
"title":"Оформить заказ","label":"Продолжить покупки"
}'>Купить</button>
</div>
</form>Используется Quickview при клике на кнопку Купить и сразу добавляется товар в это модальное окно. Нужно чтобы при нажатии на кнопку Купить в корзину товар клался с уже изменённой ценой. Комментарии: 10
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Разве не можно, поменять цену через сниппет?
Примерно так:
и создаем плагин:
и
Может можно добраться до старой цены через $data
setTVValue — запись нового значения