Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


gagra33332
 Поделиться

Рекомендованные сообщения

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

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 недели спустя...

Тут надо кроме 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 недели спустя...

Не работает в 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 месяца спустя...
  • 5 месяцев спустя...

добился решения проблемы. Пишется индивидуально под магазин при условии что у всех товаров одинаковое кол-во опций

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

  • 9 месяцев спустя...

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

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

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

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

Ссылка на комментарий
Поделиться на других сайтах


  • 9 месяцев спустя...

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

Ссылка на комментарий
Поделиться на других сайтах


  • 2 месяца спустя...

Добрый день!

 

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

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

 

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

Ссылка на комментарий
Поделиться на других сайтах


  • 4 недели спустя...

Всем доброго времени суток. Попробую подкинуть довольно сложную задачку касательно опций. Есть интернет магазин, продаём химию. Есть несколько однотипных товаров, назовём их "смола". У каждого из этих товаров есть несколько фасовок (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 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.