Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Связанные опции.


7up

Recommended Posts

Да, было бы хорошо реализовать все это в админке конечно. Тогда каждый смог бы пользоваться как модулем...

У меня такой необходимости нет, я все товары редактирую в 1с и после выгружаю, т.е. в админку практически заходить не нужно. Да и ума не хватит такое реализовать :)

Мой метод уже потерпел несколько изменений :) Пока пришел у нужному....

Сейчас значение опций хранится в виде:

большая:зеленая:красивая

большая:зеленая:не красивая

большая:красная:красивая

большая:красная:не красивая

маленькая:синяя:красивая

маленькая:красная:красивая

таким образом при выборе "большая" получаем на выбор только "зеленая" и "красная", а при выборе "маленькая" получаем только "синяя" и "красная" и далее соответственно.....

у каждого такого набора свой option_id и своя цена, размер, вес и т.д. и самое главное свой остаток на складе. Цена меняется динамически.

вот как-то так:

Изображение

ну и картинки товара меняются в зависимости от выбранного варианта.

правда приходится хранить для одного товара много картинок :( но тут думаю другого варианта быть не может...

Надіслати
Поділитися на інших сайтах


да, в магазе все эти аттрибуты (Количество, Вычитать со склада, Цена, Баллы, Вес) можно присвоить только конкретной опции.

вот что пришло в голову: создать сущность Группа опций товара, у которой и будут эти аттрибуты. опции конкретного товара буду добавляться не товару, а этой группе.

например товар: пиждак

группа: синий_48 (кол-во 10, вычитать "да", цена 500, баллы 0, вес 0.5)

опции: цвет синий, размер 48.

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

А не подскажет ли кто, как сделать, что бы во всех товарах где присутствует эта опция она вычиталась в нужном количестве?

Я так подозреваю надо править где-то в моделе, строчку обращения к базе для вычитания quantity в таблице product_option_value, т.е. что-то тива везде в product_option_value где option_id равен этой опции сделать -"количество"

Надіслати
Поділитися на інших сайтах


В /catalog/model/checkout/order.php

нашел строки, которые отвечают за вычитание количества:

foreach ($order_product_query->rows as $order_product) {

$this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'");

$order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product['order_product_id'] . "'");

foreach ($order_option_query->rows as $option) {

$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");

}

}

и вроде все понятно, вместо

WHERE product_option_value_id = '" . (int)$option['product_option_value_id']. "'

поставить бы

WHERE option_value_id = '" . (int)$option['option_value_id']."'

но в таком варианте работать отказывается

когда ручками ставлю: WHERE option_value_id = '247' то все как положено, везде где опция с id 247 вычитается.

т.е. (int)$option['option_value_id'] = 0 :(

спрашивается, как правильно взять это значение.

Заранее спасибо.

P.S.

Прошлое сообщение проглючило, форум вставил не корректно, как удалить не знаю....

Надіслати
Поділитися на інших сайтах


Проблема с вычитанием опций решена слегка изменив запрос:

$order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option JOIN product_option_value ON order_option.product_option_value_id = product_option_value.product_option_value_id WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product['order_product_id'] . "'");

foreach ($order_option_query->rows as $option) {

$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE option_value_id = '" . (int)$option['option_value_id']. "' AND subtract = '1'");

}

}

Может кто грамотный проверить, не будет ли такой запрос давать нагрузку на базу или что еще? Заранее спасибо.

P.S.

Оказалось движек не может учитывать количество опций на остатки при продаже. т.е. если осталось 5шт этой опции, а ввести количество товара при покупке 10, то в базу записывается значение -5 :( т.е. проверка на остаток делается только для товара. Надеюсь в следующих версиях добавят....

Надіслати
Поділитися на інших сайтах


Тоже сейчас актуальная тема.

Я решил попробовать связать добавив в опции и в карточку товара поле "родительская опция".

в таблицу базы product_option_value добавил поле product_parent_option_value_id.

В модели продукта в функции public function getProductOptions($product_id) {

.........................

foreach ($product_option_value_query->rows as $product_option_value) {
	 $product_option_value_data[] = array(
	  'product_option_value_id' => $product_option_value['product_option_value_id'],
	  'option_value_id'		 => $product_option_value['option_value_id'],
	  'name'					=> $product_option_value['name'],
	  'image'				   => $product_option_value['image'],
	  'quantity'				=> $product_option_value['quantity'],
	  'subtract'				=> $product_option_value['subtract'],
	  'price'				   => $product_option_value['price'],
	  'price_prefix'			=> $product_option_value['price_prefix'],
	  'points'				  => $product_option_value['points'],
	  'points_prefix'		   => $product_option_value['points_prefix'],	
	  'weight'				  => $product_option_value['weight'],
	  'weight_prefix'		   => $product_option_value['weight_prefix'],
	  'product_parent_option_value_id' => $product_option_value['product_parent_option_value_id'],
	 );
	}
В контоллере продукта после $product_options = $this->model_catalog_product->getProductOptions($result['product_id']);

foreach ($product_option['product_option_value'] as $product_option_value) {
	   $option_value_data[] = array(
		'product_option_value_id' => $product_option_value['product_option_value_id'],
		'option_value_id'		 => $product_option_value['option_value_id'],
		'name'					=> $product_option_value['name'],
		'price'				   => (float)$product_option_value['price'] ? $this->currency->format($product_option_value['price'], $this->config->get('config_currency')) : false,
		'price_prefix'			=> $product_option_value['price_prefix'],
		'product_parent_option_value_id' => $product_option_value['product_parent_option_value_id'],
и в виде продукта

.........
	   <?php foreach ($product_option['product_option_value'] as $product_option_value) { ?>
			  <tbody id="option-value-row<?php echo $option_value_row; ?>">
				<tr>
	  <td class="left">сюда еще не придумал как получать родительскую опцию по product_parent_option_value_id</td>
	
				  <td class="left"><select name="product_option[<?php echo $option_row; ?>][product_option_value][<?php echo $option_value_row; ?>][option_value_id]">
					</select>
					<input type="hidden" name="product_option[<?php echo $option_row; ?>][product_option_value][<?php echo $option_value_row; ?>][product_option_value_id]" value="<?php echo $product_option_value['product_option_value_id']; ?>" /></td>
и там же при добавлении новой строки

function addOptionValue(option_row) {
html  = '<tbody id="option-value-row' + option_value_row + '">';
html += '  <tr>';
html += '	<td class="left"></td>';
html += '	<td class="left">сюда хочу вывести список с вариантами родительской опции выбранной в предыдущей закладке - пока не хватает ума как это сделать</td>';
html += '	<td class="right"><input type="text" name="product_option[' + option_row + '][product_option_value][' + option_value_row + '][quantity]" value="" size="3" /></td>';

У меня к каждому цвету идет размер.

В итоге имею первая закладка с опциями цветов.

Вторая закладка РАЗМЕР с родительским полем цвет и опцией размер.

Пока только наброски ....

Изображение

Надіслати
Поділитися на інших сайтах


У меня к каждому цвету идет размер.

В итоге имею первая закладка с опциями цветов.

Вторая закладка РАЗМЕР с родительским полем цвет и опцией размер.

Пока только наброски ....

Интересное решение, но в таком случае не получится делать загрузку из эксель например :( или переделывать модуль импорта/экспорта.

Я уже вроде довел до версии пререлиз :) могу выслать коды, попробуете.

Надіслати
Поділитися на інших сайтах


Интересное решение, но в таком случае не получится делать загрузку из эксель например :( или переделывать модуль импорта/экспорта.

Я уже вроде довел до версии пререлиз :) могу выслать коды, попробуете.

да, там много что переделывать: модель заказа, карточку товара в каталоге, импорт как уже сказали.

Пришлите пожалуйста ... или здесь присоедините.

Надіслати
Поділитися на інших сайтах


да, там много что переделывать: модель заказа, карточку товара в каталоге, импорт как уже сказали.

Пришлите пожалуйста ... или здесь присоедините.

А куда слать то?

Попытался прикрепить к теме файл, не получилось, или я не внимательный или у меня еще не тот статус на форуме :)

А планируете делать, что бы связь опций была в три уровня? У меня, например, фасон:цвет:размер все зависит друг от друга, мучился, другого решения, не меняя базу, не смог найти. К тому же основной целью ставил - не менять базу, контролер и модель магазина, что бы можно было легко обновляться! посему 95% у меня это изменение в темплейте и 5% в одном файлике модели (для вычитания опций со склада)

Надіслати
Поділитися на інших сайтах


Я тут с файлами тоже не понимаю... ну давайте на [email protected].

По поводу изменений даже не знаю что сказать.

Я себе поставил версионный контроль через него и обновляю.

На счет трех опции. Как я расчитываю должно получится так:

Завожу Фасон, затем Цвет с родителем Фасон, затем Размер с родителем Цвет.

То есть можно сколько угодно опций.

И потом математические операции:

снимаем единицу с размера, с родителя, с родителя родителя.

Как-то так.

Надіслати
Поділитися на інших сайтах


Легко все импортируется из екселя только я пользуюсь своим экспортом из csv фаилов его можно подкручивать и заполнять что угодно, любые поля бд, могу помочь с этим. Мне нужно только две опции связать чтоб учитывать количество цветоразмера, помогите плиз.

Надіслати
Поділитися на інших сайтах


Легко все импортируется из екселя только я пользуюсь своим экспортом из csv фаилов его можно подкручивать и заполнять что угодно, любые поля бд, могу помочь с этим. Мне нужно только две опции связать чтоб учитывать количество цветоразмера, помогите плиз.

Ну у вас получается видимо пока два варианта решения, либо sergiosinicin либо 7up :) оба я так понимаю не особо сложны в реализации...

А какой именно модуль CSV используете? CSV IMPORT PRO?

Надіслати
Поділитися на інших сайтах


А какой именно модуль CSV используете? CSV IMPORT PRO?

Модуль написал под свои потребности и уже не один а штук 20 есть проработанная идея как сделать импорт под любой прайс но грамотная реализация MVC и ООП пока для меня недоступна)) Надо модуль чтоб опции затягивал не проблема или еще что угодно короче но нужен прайс плюс на основе названия делаю сео урл и можно не только экспортировать но и просто обновлять цены короче прайс в студию)))
Надіслати
Поділитися на інших сайтах


Модуль написал под свои потребности и уже не один а штук 20 есть проработанная идея как сделать импорт под любой прайс но грамотная реализация MVC и ООП пока для меня недоступна)) Надо модуль чтоб опции затягивал не проблема или еще что угодно короче но нужен прайс плюс на основе названия делаю сео урл и можно не только экспортировать но и просто обновлять цены короче прайс в студию)))

В смысле прайс в студию? :) Вид из которого импортировать в магазин? :)

Мне просто промежуток в виде экселя между 1с и магазином не совсем нравится :( Да и каждый раз заливать всю базу магазина только ради обновления цены как-то не то. Пытаюсь сейчас работать на прямую с базой из 1с, что бы нажал кнопочку "обновить цены" обновились цены, а нажал "обновить остатки" обновились остатки и т.д.

Хорошо бы, если модуль загружал в базу только отдельные данные, заранее указанные.... Вроде есть модификация импорт/экспорт ексель, который не стирает все данные при загрузке, а только обновляет... но она как-то не корректно работает :(

Надіслати
Поділитися на інших сайтах


Случаем не этот велосипед тут активно изобретается? :)

http://www.opencart....tension_id=5214

Да, похоже тот самый, но бесплатный :)

Хотя если учитывать то, что в поисках решения мне даже пришлось купить OpenStock за 25у.е. то 35у.е. - это мелочи :)

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

Интересно как в этом модуле устроено хранение в базе? Видимо как было описано выше, просто доп. колонка с айди опции от которой она зависит...

P.S

К тому же этот модуль был добавлен 29го февраля, когда я уже по полной тестировал свое решение :)))) Мне напомнило то время, когда я ждал выхода опенкарта 1,5 и не начинал на 1,4 ничего, вот так вот всегда, нужно ждать, а не действовать :(

Надіслати
Поділитися на інших сайтах


Пишу более понятно сделать обновление ценостатков это еще легче просто нужен фаил который вы будете затягивать в магазин в csv формате с разделителем запятые(на самом деле ;) можно не целый а просто 10 позиций чтоб видеть структуру и что вы хотите с ним делать (обновлять цены остатки наличие .....) вот и все

Надіслати
Поділитися на інших сайтах


Пишу более понятно сделать обновление ценостатков это еще легче просто нужен фаил который вы будете затягивать в магазин в csv формате с разделителем запятые(на самом деле ;) можно не целый а просто 10 позиций чтоб видеть структуру и что вы хотите с ним делать (обновлять цены остатки наличие .....) вот и все

спасибо, теперь всё стало на свои места :ugeek:
Надіслати
Поділитися на інших сайтах

спасибо, теперь всё стало на свои места :ugeek:

Не знаю что там у Вас встало или стало, но бесполезно флудить еще и не в своей теме не есть хорошо, писал я не Вам а 7UP-у и тем кому это нужно, создайте тему и срите в ней сколько влезет. Я уже не в тему пишу но я хоть spambot и то что я пишу интересно создателю темы (как я понимаю) и хоть как то относится к ней. Не заставляйте людей читать 100500 страниц бреда иначе кнопка жалоба будет нажиматься на против дальнеших ваших мегасодержательных постов лично мной и всеми сознательными людьми.
Надіслати
Поділитися на інших сайтах


Случаем не этот велосипед тут активно изобретается? :)

http://www.opencart....tension_id=5214

Почти как у меня.

Хорошая наводка, хоть javascript в демке подсмотреть можно

Надіслати
Поділитися на інших сайтах


Не знаю что там у Вас встало или стало, но бесполезно флудить еще и не в своей теме не есть хорошо, писал я не Вам а 7UP-у и тем кому это нужно, создайте тему и срите в ней сколько влезет. Я уже не в тему пишу но я хоть spambot и то что я пишу интересно создателю темы (как я понимаю) и хоть как то относится к ней. Не заставляйте людей читать 100500 страниц бреда иначе кнопка жалоба будет нажиматься на против дальнеших ваших мегасодержательных постов лично мной и всеми сознательными людьми.

кол-во полезной информации в твоих постах этой темы(как впрочем и моих) равно нулю.

но я пожалуй перестану, а то вдруг не дай Бог, кто-нибудь нажмет эту кнопку

Надіслати
Поділитися на інших сайтах

  • 1 month later...

To sergiosinicin:

Получилось ли у вас реализовать ваш метод? :)

Я вот столкнулся с проблемкой, сильно растет база, а именно таблица product_option_value. Получается что для каждого товара в этой таблице создается строчка с вариантом опции, в итоге всего на 136 товаров у меня 5454 строк в этой таблице :( Интересно, а есть какое-то иное решение для такого вида опций....

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.