UMIhelp
Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: asbezrukov от 15 Марта 2013, 15:13:26
-
В стандартных шаблонах при добавлении опции "составное" к товару, происходит сложение суммы товара и "опции". Например, как в стандартном шаблоне, купить проигрыватель с возможностью вида отделки...
Но сейчас столкнулся с проблемой, что необходимо не сложить стоимость товара и "опцию", а умножить.
Например: на рынке продают золотую проволку, везде указывается цена за 1 погонный метр. Но магазин не торгует в розницу по метражу, а продает ее бухтами ( для олигархов :D ), причем разной намотки. Т.е. покупатель когда пытается купить, то ему предлагается выбрать бухту в зависимости от намотки. (это и есть опция на которую надо умножить цену за 1кв.м.)
Подскажите пожалуйста, где можно изменить функцию сложения "опции" и цены товара на умножение.
Спасибо. Надеюсь, не я первый с такой задачей столкнулся.
-
фактически у вас получается есть опция (бухта), в которой есть цена которую надо вывести на сайте и цена по которой надо считать?
Если так, то посмотрите в сторону добавления поля цена для вывода как дополнительное поле к выбранному справочнику, который используется при создании опционного свойства
-
фактически у вас получается есть опция (бухта), в которой есть цена которую надо вывести на сайте и цена по которой надо считать?
Опция "бухта" - это метраж, т.е. кол-во метров в бухте. При добавлении пользователя в корзину проволоки, за определенную стоимость, ему предлагается выбрать размер бухты(под размером подразумевается длина проволоки). Вот пример, чтобы было понятно, http://stsgeo.ru/geotekstil/lavsangeo/geotekstil_dornit_igloprobivnoj1/ (выбирайте в таблице 600 Лавсан) только реализован не на проволоке, а на геотекстиле, но смысл один и тотже. Надо умножить цену товара на опцию (метраж) чтобы получить сумму, которая пойдет в корзину.
-
видимо я не совсем понял вопрос, у вас есть товар(проволока) и есть вариации поставок данного товара(бухта 100 метров,бухта 200 метров и т.д.) у каждой вариации есть цена за погонный метр. Например покупая бухту в 100 метров мы платим по 12 рублей за метр, а покупая бухту в 200 метров мы платим по 14 рублей за метр.... так?
Если да, то нам нужна возможность создать товар и вариации бухт, которыми он продается. При этом, в графе стоимости данной вариации вы указываете необходимо цену за бухту. При этом в модуле шаблонов данных находите справочник который вы используете для опционного поля и довте там поле цена за метр, который и будете выводить на сайте
Правда при этом если вы будете в другом товаре использовать вариацию бухта 100 метров, то у нее будет такое же значение цены за метр как и в других местах где она используется
-
Извините, за мою назойливость, и за то что сразу не правильно изложил.
Есть товар у которого цена привязана к единице измерения (например: погонный метр, квадратный метр и т.п.). Но этот товар привязан к кол-ву (бухта, рулон, и т.п.), так как его продать можно только в этом виде.
Для этого случая как раз и подходит "опция" к товару, но только надо чтобы значение "опции" не прибавлялось к стоимости товара, а умножалась.
В нашем случае в опциях указываю кол-во (метров, погон.метров или кв.м.), которое будет умножаться на цену.
Ранее я пробовал указать в опциях число "стоимость" (рулона, бухты и т.д.), но тогда пришлось цену у товара делать равную нулю (т.к. к ней прибавляется число из опции), не буду говорить про видимость на странице этой цены ))). Но ведь, это начало геморроя, ведь когда менялась цена у товара (метр, метр погонный, кв. метр. и т.п.), то приходится изменять число в опциях у каждого товара. Это не выход.
А выход есть, если при добавлении товара в корзину, не прибавлялась "опция" к "цене" товара, а умножалась. Это возможно?
-
видимо я не совсем понял вопрос, у вас есть товар(проволока) и есть вариации поставок данного товара(бухта 100 метров,бухта 200 метров и т.д.) у каждой вариации есть цена за погонный метр. Например покупая бухту в 100 метров мы платим по 12 рублей за метр, а покупая бухту в 200 метров мы платим по 14 рублей за метр.... так?
Нет у каждой вариации цена одна и таже.
-
ага, значит это я намудрил с пониманием вопроса... тогда у вас скорее всего 2 пути...
1. вы правите ядро в файле /classes/modules/emarket/classes/orders/items/optioned.php , в функции public function getItemPrice()...
Там есть строчка
$price += (float) $optionPrice;
меняйте её на
$price = $price * (float) $optionPrice;
При этом надо помнить что при обновлении этот файл перезаписывается, так что вам надо помнить об этой доделке и после обновления восстанавливать эти правки.
2. вы пишите свой макрос (или может даже модуль) который делает все тоже самое что и в emarket модуле, но с вашей правкой насчет умножения опционной цены Ппо трудозатратам - это абсолютно не вариант, но зато при обновлении ничего перезаписываться в этом коде не будет
3. Ждем когда umi добавят возможность переназначать функции ядра при этом не боясь потерять свой код при обновлении и радуемся.
4. еще есть варианты когда вы играетесь со скрытым полем int, которое можно использовать как поле в котором указывается количество (очень близко к вашей теме), но к сожалению много вам про него не расскажу, так как в таком варианте я его не использовал.
5. еще можно отказаться от опционных полей и написать свой вариант выпадающего списка. И написать кастом вариант функции emarket basket(), который будет просчитывать цену умноженную на количество (заданное в каком-то вами созданном доп поле, какого-нибудь вами подключенного справочника) и передавать его в корзину как вам надо. При все прелести этого варианта у вас опять же проблема, что система не считая ваши поля опционным, будет класть в корзину один товар с разными бухтами, как один и тот же товар (то есть этим вопросом вам тоже придется озаботиться)
P.S. я бы остановился на первом варианте и как-то для себя и для будущих разработчиков задокументировал, что именно надо изменить и где, если запускалось обновление системы...
-
Спасибо большое! все работает по 1 способу. 5 вариант тоже хорош. будем над ним думать.