Александр Марков
5 нояб. 2014 г., 20:49

Изменяемая цена на shopmodxbox

Добрый день. В магазине есть возможность задавать размеры товара и от этого зависит его цена. Для занесения в корзину правильной цены я слегка изменил процессор /core/billing/processors/mgr/orders/products/create:
public function beforeSet(){ ... // Устанавливаем значение цены и валюты // В дальнейшем в этом месте можно будет вклиниться с переопределением цен $this->object->fromArray(array( 'price' => $this->getPrice($product), 'currency_id' => $product->get('sm_currency'), )); return parent::beforeSet(); } protected function getPrice($product){ return 1; //в рабочей версии предполагается на основании определенных данных // сформировать и вернуть цену. для теста пока возвращаю 1. }
Проблема в том, что почему-то в корзину все равно попадает цена sm_price. Как такое может быть? Может, я что-то упустил?
Смотри, ты устанавливаешь свою цену, но потом вызываешь parent::beforeSet(). А там: https://github.com/Fi1osof/ShopModxBox/blob/master/core/components/billing/processors/mgr/orders/products/create.class.php#L66. То есть опять устанавливается цена. Или вызывает после parent::beforeSet(), или в beforeSave() переноси.
так я в нем и подправил.
class modMgrOrdersProductsCreateProcessor extends modObjectCreateProcessor{ ...
Согласен, не совсем правильно лезть в то, что есть, но я для теста, по-быстрому вписал.
Кстати, подумай о подобной доработке - значение цены не брать из sm_price напрямую, а в метод вынести. Тогда при наследовании достаточно getPrice (например) переопределить - и цена по-другому считаться будет.
да, я в топике написал billing/mgr/orders/products/create, а надо было /core/billing/processors/mgr/orders/products/create :)
В итоге, решился вопрос или нет? На вид у тебя вроде все ОК
Согласен, не совсем правильно лезть в то, что есть, но я для теста, по-быстрому вписал.
Да в целом это все ОК. Как я и говорил много раз - это заготовка для индивидуальных разработок. Разворачиваешь, быстро пробуешь что-то свое сделать, если не растет кокс - сбрасываешь и экономишь время. Если растет - то развиваешь как свой проект индивидуальный.
нет, и не могу понять. вроде верно все - а в базe sm_price все равно пишется
Блин, проверь все последовательно, в каждом процессоре от самого основного, выведи значения перед сохранением. Должно все работать, просто где-то у тебя скорее всего логическая ошибка.
Перечитай еще раз внимательно этот топик.
Нашел :) у меня из формы цена передавалась(!). Вредно много по ночам сидеть. все, теперь работает.
Блин, с фронта подобные данные передавать - злое зло. Но это многое объясняет:) Кстати, спасибо за багрепорт! Я конечно очень стараюсь следить за секурностью, но здесь вот пропустил возможность переопределить цену товара извне. Вот багфикс. Добавь себе в код, а новая сборка выйдет уже с этим багфиксом. И сейчас топик краткий напишу.
Блин, с фронта подобные данные передавать - злое зло
да сам понимаю. ведь любую цену подставить можно :)
ведь любую цену подставить можно :)
Уже нет:)

Добавить комментарий