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

Как вывести опции товара в категории OpenCart 1.5.*


gagra33332

Recommended Posts

открываем файл

catalog/controller/product/category.php

вместо (~215 строчка)

$this->data['products'][] = array(
'product_id'  => $result['product_id'],
'thumb'	   => $image,
'name'		=> $result['name'],
'model'	   => $result['model'],
'description' => $descr_plaintext,
'price'	   => $price,
'special'	 => $special,
'tax'		 => $tax,
'href'		=> $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])
);
вставляем

$product_options = array();
foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) {
if ($option['type'] == 'select' || $option['type'] == 'radio' || $option['type'] == 'checkbox') {
$option_value_data = array();

foreach ($option['option_value'] as $option_value) {
if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
$option_value_data[] = array(
'product_option_value_id' => $option_value['product_option_value_id'],
'option_value_id'		 => $option_value['option_value_id'],
'name'					=> $option_value['name'],
'price'				   => (float)$option_value['price'] ? $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))) : false,
'price_prefix'			=> $option_value['price_prefix']
);
}
}

$product_options[] = array(
'product_option_id' => $option['product_option_id'],
'option_id'		 => $option['option_id'],
'name'			  => $option['name'],
'type'			  => $option['type'],
'option_value'	  => $option_value_data,
'required'		  => $option['required']
);
} elseif ($option['type'] == 'text' || $option['type'] == 'textarea' || $option['type'] == 'file' || $option['type'] == 'date' || $option['type'] == 'datetime' || $option['type'] == 'time') {
$product_options[] = array(
'product_option_id' => $option['product_option_id'],
'option_id'		 => $option['option_id'],
'name'			  => $option['name'],
'type'			  => $option['type'],
'option_value'	  => $option['option_value'],
'required'		  => $option['required']
);
}
}

$this->data['products'][] = array(
'product_id'  => $result['product_id'],
'thumb'	   => $image,
'name'		=> $result['name'],
'model'	   => $result['model'],
'options'   => $product_options,
'description' => $descr_plaintext,
'price'	   => $price,
'special'	 => $special,
'tax'		 => $tax,
'href'		=> $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])
);
​затем открываем catalogviewthemeТЕМАtemplateproductcategory.tpl

и между циклом

<?php foreach ($products as $product) { ?>
в нужном месте вставляем

<?php if ($product['options']) { ?>
	<div class="options">
		<h2><?php echo $text_option; ?></h2>
		<br />
		<?php foreach ($product['options'] as $option) { ?>
		<?php if ($option['type'] == 'select') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <select name="option[<?php echo $option['product_option_id']; ?>]">
			<option value=""><?php echo $text_select; ?></option>
			<?php foreach ($option['option_value'] as $option_value) { ?>
			<option value="<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
			<?php if ($option_value['price']) { ?>
			(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
			<?php } ?>
			</option>
			<?php } ?>
		  </select>
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'radio') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <?php foreach ($option['option_value'] as $option_value) { ?>
		  <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" />
		  <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
			<?php if ($option_value['price']) { ?>
			(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
			<?php } ?>
		  </label>
		  <br />
		  <?php } ?>
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'checkbox') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <?php foreach ($option['option_value'] as $option_value) { ?>
		  <input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" />
		  <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
			<?php if ($option_value['price']) { ?>
			(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
			<?php } ?>
		  </label>
		  <br />
		  <?php } ?>
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'image') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
			<table class="option-image">
			  <?php foreach ($option['option_value'] as $option_value) { ?>
			  <tr>
				<td style="width: 1px;"><input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" /></td>
				<td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" /></label></td>
				<td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
					<?php if ($option_value['price']) { ?>
					(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
					<?php } ?>
				  </label></td>
			  </tr>
			  <?php } ?>
			</table>
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'text') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['option_value']; ?>" />
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'textarea') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <textarea name="option[<?php echo $option['product_option_id']; ?>]" cols="40" rows="5"><?php echo $option['option_value']; ?></textarea>
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'file') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <a id="button-option-<?php echo $option['product_option_id']; ?>" class="button"><span><?php echo $button_upload; ?></span></a>
		  <input type="hidden" name="option[<?php echo $option['product_option_id']; ?>]" value="" />
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'date') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['option_value']; ?>" class="date" />
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'datetime') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['option_value']; ?>" class="datetime" />
		</div>
		<br />
		<?php } ?>
		<?php if ($option['type'] == 'time') { ?>
		<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
		  <?php if ($option['required']) { ?>
		  <span class="required">*</span>
		  <?php } ?>
		  <b><?php echo $option['name']; ?>:</b><br />
		  <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['option_value']; ?>" class="time" />
		</div>
		<br />
		<?php } ?>
		<?php } ?>
	</div>
<?php } ?>
Змінено користувачем Fizik87
  • +1 4
Надіслати
Поділитися на інших сайтах


  • 3 weeks later...

Тут надо кроме view и controller, ковырять ещё и model у product.php и переносить нужные функции в category.php

А может и нет... уже три дня на самом деле парюсь с этой проблемой... давай вместе чтоли разбираться)

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


А может и нет... уже три дня на самом деле парюсь с этой проблемой... давай вместе чтоли разбираться)

Есть решение для вывода атрибута
Надіслати
Поділитися на інших сайтах

выдрал значения опций прямо из базы данных в category.tpl. Все отображается, все замечательно, но вот проблема - такие товары не покупаются((( надо как то править яваскрипт.

В продукт.тпл скрипт срабатывает по по айди кнопки.. в категории.тпл кнопок будет много так что фишка с айди не проканает. надо, походу, переделывать яваскрипт из продукт.тпл, научить его принимать параметры option_id и product_id..

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


выдрал значения опций прямо из базы данных в category.tpl. Все отображается, все замечательно, но вот проблема - такие товары не покупаются((( надо как то править яваскрипт.

В продукт.тпл скрипт срабатывает по по айди кнопки.. в категории.тпл кнопок будет много так что фишка с айди не проканает. надо, походу, переделывать яваскрипт из продукт.тпл, научить его принимать параметры option_id и product_id..

как всё сложно...

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


я готового не видел, например.. думаю сам справлюсь.. только пока времени нету((

http://www.opencart.com/index.php?route=extension/extension/info&extension_id=4091&filter_search=product%20options&sort=e.date_modified&order=DESC
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Не работает в 1.5.1.3

Все прекрасно работает.

К выше написанному надо добавить:

в catalog/controller/product/category.php

$this->data['text_option'] = $this->language->get('text_option');
можно сразу за
$this->data['heading_title'] = $category_info['name'];
и в catalog/language/category/russian/product/category.php примерно следущее:

$_['text_option']	    = 'Опции:';
  • +1 1
Надіслати
Поділитися на інших сайтах


  • 2 months later...
  • 5 months later...
  • 9 months later...

Аналогичная ситуация: нужно реализовать вывод опций в категориях. Опция - одна, но только в некоторых категориях.

К примеру, Кольца, браслеты, цепочки - у них есть размер. У подвесок, серьг - нет.

Нужно значении опции просто вывести текстом через запятую. Обязательно только тех, которые есть в наличии.

post-28122-0-34078000-1379935950_thumb.jpg

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


  • 9 months later...

Ребятки, отличное решение, но! ))) После всего опции не идут в корзину. Не отображаются в ней, как если бы со страницы товара. Что делать? Подскажите пожалуйста.

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


  • 2 months later...

Добрый день!

 

Прошу помощи в вопросе выведения опции в категории (каталоге). Интересует вариант "Своими руками", а НЕ покупка модуля.

Приведенный в начале темы вариант по какой-то причине не работает и утверждает, что в 195 строке надо поставить ')'.

 

Версия Опенкарт 1.5.6 - http://lapti.maren.ga/

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


  • 4 weeks later...

Всем доброго времени суток. Попробую подкинуть довольно сложную задачку касательно опций. Есть интернет магазин, продаём химию. Есть несколько однотипных товаров, назовём их "смола". У каждого из этих товаров есть несколько фасовок (1.8кг,3кг,5,10,20) в каждую из фасовок входит товар + тара для него (второй товар), все это интегрировано с 1С 8.3. с учетом по характеристикам. Теперь собственно сам вопрос, или даже несколько. Берём любой продукт из этой категории, пусть будет "Смола 1" и присваиваем ей эти опции (1.8, 3, 5, 10, 20) На каждую из этих опций необходимо изменить цену (то есть добавить определенную стоимость), на каждую фасовку прибавка к цене тоже своя т.к. тара на разные фасовки стоит по разному. То есть если совсем подробно - 1) 1 Кг смолы стоит 100 рублей. Покупатель выбирает фасовку 1.8 кг. Соответственно он должен будет заплатить 190 рублей (180 рублей - 1.8 кг смолы, = 10 рублей за тару). Как это сделать в рамках одного товара - понятно и никаких вопросов нет. Но таких смол в ассортименте около 100, все они имеют разную стоимость, т.е. невозможно задать общий для этих смола параметр (например при фасовке 1.8 кг - + 90 рублей), так как некоторые смолы стоят 1300 рублей за килограмм, соответственно 1.8 кг такой смолы 2340 рублей + стоимость тары 10 рублей. Решений два штуки : 1) Вручную вбивать стоимость каждой смолы и убить пару суток и кучу нервов. 2)Задать в опциях формулу типа (p * f+t = price) , где p - цена за 1 кг товара, f - фасовка (например 1.8, 3, 5 кг), t - цена тары (например 10 рублей). То есть (100 * 1.8 +10 = 190) . Есть ли готовые модули (т.к. Я не думаю, что одни мы используем опции не для выбора цвета трусов и размера вибраторов) ? Есть ли отважный человек, готовый все это написать? 

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


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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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