У меня возникла реальная проблема с Пользовательскими параметрами, которые включают тип цены "процент".
В продуктах Simple процентные пользовательские опции работают как положено, но в Configurable или Bundled окончательная цена определяется исходя из базовой цены, а не базовой цены + дополнительных опций (что диктуют бизнес-требования):
Config/Bundle Product
base price = $1000
option 1 + $100
option 2 + 5%
_____________________________
= $1150 (instead of $1155);
Я не смог найти ничего, что касалось бы этой большой проблемы.
Я нашел и реализовал этот ответ, но $finalPrice
, возвращенный в Mage_Catalog_Model_Product_Type_Price -> _applyOptionsPrice
, неправильно оценивает базовую цену + дополнительную плату за пользовательские параметры. Кроме того, во внешнем интерфейсе в Products.Options
решение также не включает базовую цену в расчет. Я предполагаю, что исправление предназначено для предыдущих версий magento (у меня v1.11).
Я подозреваю, что стратегия исправления правильная, но это очень сложный обмен, и я не совсем понимаю, что нужно изменить, чтобы решить эту проблему.
Любые мысли будут приветствоваться.
Ваше здоровье
обновить
У меня был небольшой успех на внешнем интерфейсе (получение javascript для правильного обновления значений опций и цен). Эти изменения, однако, не записываются в ценовую модель. Например, когда корзина отправляется на рендеринг, окончательная цена включает не полностью загруженную цену, а процент от исходного товара:
Вот что у меня есть на серверной части (что не меняет никакого поведения. Я отмечу, что я только что скопировал их в каталог app/local atm, но я переопределю их должным образом, как только я разработаю эту логику .
Mage_Catalog_Model_Product_Type_Price
public function getFinalPrice($qty=null, $product)
{
//... aggregate tier and special pricing, then apply custom options
$finalPrice = $product->getData('final_price');
$finalPrice = $this->_applyOptionsPrice($product, $qty, $finalPrice);
return max(0, $finalPrice);
}
protected function _applyOptionsPrice($product, $qty, $finalPrice)
{
if ($optionIds = $product->getCustomOption('option_ids')) {
$basePrice = $finalPrice;
foreach (explode(',', $optionIds->getValue()) as $optionId) {
if ($option = $product->getOptionById($optionId)) {
$confItemOption = $product->getCustomOption('option_'.$option->getId());
$group = $option->groupFactory($option->getType())
->setOption($option)
->setConfigurationItemOption($confItemOption);
// grab option value based on finalprice
$finalPrice += $group->getOptionPrice($confItemOption->getValue(), $finalPrice);
}
};
}
Mage::log('base price :'.$basePrice.' final price :'.$finalPrice);
return $finalPrice;
}
Насколько я могу судить, в Mage_Catalog_Model_Product_Type_Configurable_Price и Mage_Catalog_Model_Product_Type_Grouped_Price нечего переопределять, потому что каждый из них вызывает Parent::getFinalPrice
для определения значений на каждом этапе...
Остается вопрос: как изменить модели ценообразования, чтобы они соответствовали пользовательскому варианту, основанному на процентах??
50 баллов тому, кто поможет мне разобраться с этим. ...
Любой?