Tramp1357 05 ноября 2014 0 1
Добрый день.
В магазине есть возможность задавать размеры товара и от этого зависит его цена.
Для занесения в корзину правильной цены я слегка изменил процессор
/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. Как такое может быть? Может, я что-то упустил?
1 комментарий
Fi1osof1
Fi1osof 06 ноября 2014г в 00:55 #
Смотри, ты устанавливаешь свою цену, но потом вызываешь parent::beforeSet(). А там: https://github.com/Fi1osof/ShopModxBox/blob/master/core/components/billing/processors/mgr/orders/products/create.class.php#L66. То есть опять устанавливается цена.
Или вызывает после parent::beforeSet(), или в beforeSave() переноси.
Tramp13571
Tramp1357 06 ноября 2014г в 01:04 #
так я в нем и подправил.

class modMgrOrdersProductsCreateProcessor extends modObjectCreateProcessor{
...


Согласен, не совсем правильно лезть в то, что есть, но я для теста, по-быстрому вписал.

Кстати, подумай о подобной доработке - значение цены не брать из sm_price напрямую, а в метод вынести. Тогда при наследовании достаточно getPrice (например) переопределить - и цена по-другому считаться будет.
Tramp13571
Tramp1357 06 ноября 2014г в 01:10 #
да, я в топике написал
billing/mgr/orders/products/create,
а надо было
/core/billing/processors/mgr/orders/products/create
:)
Fi1osof1
Fi1osof 06 ноября 2014г в 01:14 #
В итоге, решился вопрос или нет? На вид у тебя вроде все ОК
Fi1osof1
Fi1osof 06 ноября 2014г в 01:15 #
Согласен, не совсем правильно лезть в то, что есть, но я для теста, по-быстрому вписал.
Да в целом это все ОК. Как я и говорил много раз - это заготовка для индивидуальных разработок. Разворачиваешь, быстро пробуешь что-то свое сделать, если не растет кокс - сбрасываешь и экономишь время. Если растет - то развиваешь как свой проект индивидуальный.
Tramp13571
Tramp1357 06 ноября 2014г в 01:15 #
нет, и не могу понять. вроде верно все - а в базe sm_price все равно пишется
Fi1osof1
Fi1osof 06 ноября 2014г в 01:52 #
Блин, проверь все последовательно, в каждом процессоре от самого основного, выведи значения перед сохранением. Должно все работать, просто где-то у тебя скорее всего логическая ошибка.
Tramp13571
Tramp1357 06 ноября 2014г в 02:27 #
Нашел :)
у меня из формы цена передавалась(!).
Вредно много по ночам сидеть. все, теперь работает.
Fi1osof1
Fi1osof 06 ноября 2014г в 06:55 #
Блин, с фронта подобные данные передавать - злое зло. Но это многое объясняет:)
Кстати, спасибо за багрепорт! Я конечно очень стараюсь следить за секурностью, но здесь вот пропустил возможность переопределить цену товара извне. Вот багфикс. Добавь себе в код, а новая сборка выйдет уже с этим багфиксом. И сейчас топик краткий напишу.
Tramp13571
Tramp1357 06 ноября 2014г в 10:49 #
Блин, с фронта подобные данные передавать - злое зло

да сам понимаю. ведь любую цену подставить можно :)
Fi1osof1
Fi1osof 06 ноября 2014г в 10:52 #
ведь любую цену подставить можно :)
Уже нет:)
Fi1osof1
Fi1osof 06 ноября 2014г в 01:54 #
Перечитай еще раз внимательно этот топик.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.