
Часто при разработке интернет-магазина возникает ситуация, когда некоторые товары надо положить в корзину с отличной от первоначальной цене. Давайте рассмотрим, как это сделать, используя для организации магазина на MODX Revo модуль minishop2 (ms2). Добавление товаров в корзину при использовании этого приложения происходит аяксом при указании у формы класса ms2_form. Внутри которой указываются параметры id товара и его количество (count). Изменить цену, указав, допустим, дополнительно параметр price не удастся.
Настройка ms2 для использования произвольной цены при добавлении в корзину.
Для переопределения цены товара при добавлении в корзину модуль ms2 использует специальный сниппет. Указать имя
которого нужно в системных параметрах приложения. А именно создать параметр по имени
ms2_price_snippet. Сниппет должен возвращать цену товара.
В нём доступны все параметры,
которые были переданы в форме. Допустим, мы указали, что новая цена будет в параметре "price", создав в форме
поле <input type="hidden" name="price" value="123"/>
.
Тогда код сниппета, который обрабатывает добавление новой цены, будет следующим:
if (isset($_REQUEST['price']) && !empty($_REQUEST['price']) ){
return intval($_REQUEST['price']);
}
return $product->get('price');
Важно
Сниппет модификатора цены применяется не только перед добавлением в корзину. Он также применяется при отображении товаров через сниппет msProduct. Так что надо быть осторожнее с использованием одноименных параметров. А лучше повесить дополнительный флаг в плагине перед добавлением в корзину.
PS: Обратите внимание, что изменить цену в ms2 при использовании плагина, отслеживающего событие msOnBeforeAddToCart не получится! В нём можно изменить всё, кроме цены и веса! Для цены и веса нужно создавать и прописывать в настройках отдельные сниппеты!
PS: PS: Если что-то не понятно, пишите вопросы в комментарии!