Jump to content
Sign in to follow this  
faceoff

Опции товара, рассчет стоимости.

Recommended Posts

Добрый день. Подскажите в каком файле идет рассчет окончательной стоимости товара с учетом его опций (+ -) к основной цене?

Спасибо.

Share this post


Link to post
Share on other sites

Сами опции задаются на странице товара product.tpl , а итог мы видим либо в корзине либо в оформление заказа

Можно в принципе установить модуль который будет изменять цену в зависимости от выбранных опций, прямо на странице с товаром...

Share this post


Link to post
Share on other sites

Т. е. сам рассчет цена+опция идет в корзине? Какой файл отвечает за это, не смог найти.

Share this post


Link to post
Share on other sites

Вы лучше скажите что Вам конкретно надо сделать. ото я не могу сориентироваться...

Share this post


Link to post
Share on other sites

Я хочу сделать, чтобы была возможность помимо + - сделать еще вариант =, чтобы мне не высчитывать на сколько это у меня дороже стоит товар или дешевле, а просто прописывать цену.

Share this post


Link to post
Share on other sites

Ааа понял, я тоже хотел такое сделать (такая функция кстати есть в virtuemart магазине), но у меня ничего не вышло, смог только добавить внешние изменения в админку, но реально они не работали.

Там просто надо много файлов, менять в том числе и php, вот если вы знаете php то я могу попробовать найти все файлы где нужно вносить изменения.

Share this post


Link to post
Share on other sites

Вот я как раз php и ищу, потому что внешнюю часть я тоже сделал :)

Share this post


Link to post
Share on other sites

Вам нужно воспользоваться программой Agent Ransack - эта прога может искать по названиям файлов и по тексту написанному в самих файлах. Т.е. она быстро и удобно сканирует пока не найдет ваш запрос. Скачать можете с оф сайта.

Мне лично она выдала вот такие результаты:

Изображение

Share this post


Link to post
Share on other sites

Я хочу сделать, чтобы была возможность помимо + - сделать еще вариант =, чтобы мне не высчитывать на сколько это у меня дороже стоит товар или дешевле, а просто прописывать цену.

+ и - покзывают отклонения от основной цены

поэтому "=" там ненужно. = это нулевое отклонение.

Share this post


Link to post
Share on other sites

+ и - покзывают отклонения от основной цены

поэтому "=" там ненужно. = это нулевое отклонение.

думаю имеется ввиду возможность задать цену сразу, без расчетов

Share this post


Link to post
Share on other sites

думаю имеется ввиду возможность задать цену сразу, без расчетов

Да, именно это я и хочу сделать.

Share this post


Link to post
Share on other sites

для версии 1.5.3

при редактировании цены у опции укажите =, например

=100

тогда двиг сам посчитает и укажет + или -

Index: admin/model/catalog/product.php
===================================================================
--- admin/model/catalog/product.php	(revision 44:90e85bd8f0dc)
+++ admin/model/catalog/product.php	(revision 44+:90e85bd8f0dc+)
@@ -40,6 +40,15 @@
				
					 if (isset($product_option['product_option_value'])) {
						 foreach ($product_option['product_option_value'] as $product_option_value) {
+							if(strlen($product_option_value['price']) > 0 && $product_option_value['price'][0] == '=') {
+								$option_price = (float)$data['price'] - (float)substr($product_option_value['price'], 1);
+								if($option_price < 0) {
+									$product_option_value['price'] = -$option_price;
+									$product_option_value['price_prefix'] = "+";
+								} else {
+									$product_option_value['price_prefix'] = "-";
+								}
+							}
							 $this->db->query("INSERT INTO " . DB_PREFIX . "product_option_value SET product_option_id = '" . (int)$product_option_id . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', option_value_id = '" . (int)$product_option_value['option_value_id'] . "', quantity = '" . (int)$product_option_value['quantity'] . "', subtract = '" . (int)$product_option_value['subtract'] . "', price = '" . (float)$product_option_value['price'] . "', price_prefix = '" . $this->db->escape($product_option_value['price_prefix']) . "', points = '" . (int)$product_option_value['points'] . "', points_prefix = '" . $this->db->escape($product_option_value['points_prefix']) . "', weight = '" . (float)$product_option_value['weight'] . "', weight_prefix = '" . $this->db->escape($product_option_value['weight_prefix']) . "'");
						 }
					 }
@@ -173,6 +182,15 @@
				
					 if (isset($product_option['product_option_value'])) {
						 foreach ($product_option['product_option_value'] as $product_option_value) {
+							if(strlen($product_option_value['price']) > 0 && $product_option_value['price'][0] == '=') {
+								$option_price = (float)$data['price'] - (float)substr($product_option_value['price'], 1);
+								if($option_price < 0) {
+									$product_option_value['price'] = -$option_price;
+									$product_option_value['price_prefix'] = "+";
+								} else {
+									$product_option_value['price_prefix'] = "-";
+								}
+							}
							 $this->db->query("INSERT INTO " . DB_PREFIX . "product_option_value SET product_option_value_id = '" . (int)$product_option_value['product_option_value_id'] . "', product_option_id = '" . (int)$product_option_id . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', option_value_id = '" . (int)$product_option_value['option_value_id'] . "', quantity = '" . (int)$product_option_value['quantity'] . "', subtract = '" . (int)$product_option_value['subtract'] . "', price = '" . (float)$product_option_value['price'] . "', price_prefix = '" . $this->db->escape($product_option_value['price_prefix']) . "', points = '" . (int)$product_option_value['points'] . "', points_prefix = '" . $this->db->escape($product_option_value['points_prefix']) . "', weight = '" . (float)$product_option_value['weight'] . "', weight_prefix = '" . $this->db->escape($product_option_value['weight_prefix']) . "'");
						 }
					 }

Share this post


Link to post
Share on other sites

у меня немного по другому - тогда еще скидки можно учесть.

Только я не тестировал.

мне выдает Undefined variable: option_value_query in /home/a/ateliervru/artfabric/public_html/vqmod/vqcache/vq2-system_library_cart.php on line 180Notice: Trying to get property of non-object in /home/a/ateliervru/artfabric/public_html/vqmod/vqcache/vq2-system_library_cart.php on line 180

Если добавляешь товар без опции.

И после того как добавишь 1 товар с опцией =, все другие товары добавляются с такой же ценой )

Share this post


Link to post
Share on other sites

мне выдает Undefined variable: option_value_query in /home/a/ateliervru/artfabric/public_html/vqmod/vqcache/vq2-system_library_cart.php on line 180Notice: Trying to get property of non-object in /home/a/ateliervru/artfabric/public_html/vqmod/vqcache/vq2-system_library_cart.php on line 180

Если добавляешь товар без опции.

И после того как добавишь 1 товар с опцией =, все другие товары добавляются с такой же ценой )

Подправил. Если что, вечером гляну еще раз.

Share this post


Link to post
Share on other sites

Подправил. Если что, вечером гляну еще раз.

PHP Parse error: syntax error, unexpected T_ISSET, expecting '(' in /home/a/ateliervru/artfabric/public_html/vqmod/vqcache/vq2-system_library_cart.php on line 180

Share this post


Link to post
Share on other sites

вы сначала все файлы из vqmod папки удалите (временно) а потом ошибку смотрите, ото он некорректно отображает, пишет что ошибка во vqmod а её там и в помине нет...

Share this post


Link to post
Share on other sites

Т.е. у вас все работает?

Я проверяю, делаю исправления, поэтому код меняется.

Теперь вроде все.

Попробуйте.

Edited by sergiosinicin

Share this post


Link to post
Share on other sites

Я проверяю, делаю исправления, поэтому код меняется.

Теперь вроде все.

Попробуйте.

Возможно я кэш не почистил, сейчас работает добавление с опцией =. Но есть другой глюк, если этот же товар без опции добавить, то у него будет такая же цена как с опцией :)

Share this post


Link to post
Share on other sites

Теперь при добавлении первого товара с опцией =, все последующие добавляются с 0 ценой

Не могу повторить ошибку. А можно скриншот или подробнее?

А ... у меня радио кнопки, у вас наверное чекбоксы. Сейчас посмотрю.

Edited by sergiosinicin
  • +1 1

Share this post


Link to post
Share on other sites

Не могу повторить ошибку. А можно скриншот или подробнее?

А ... у меня радио кнопки, у вас наверное чекбоксы. Сейчас посмотрю.

Да, чекбоксы :)

Share this post


Link to post
Share on other sites

А на версию 1.5.13 не будете делать?

Share this post


Link to post
Share on other sites

А на версию 1.5.13 не будете делать?

Не знаю. Не работает?

Share this post


Link to post
Share on other sites

Да, чекбоксы :)

Допустим есть товар и у него 2 опции со знаком =.

При покупке я ставлю оба чекбокса и в корзине это 2 отдельные позиции или одна позиция как сумма двух?

Здесь выложил.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.