gagra33332

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

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

gagra33332    5

Как вывести опции товара в категории OpenCart 1.5.*, подскажите пожалуйста как реализовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
gagra33332    5

Подскажите или помогите реализовать заплачу 500 руб.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Fizik87    149

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Patch    0

помогите пожалуйста осуществить это в 1.5.1.3, очень надо!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
CrazyFrog    1

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
CrazyFrog    1

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
milus    135

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

Есть решение для вывода атрибута

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
CrazyFrog    1

Есть решение для вывода атрибута

Не, с атрибутами попроще будет... никто не пробовал на других версиях поставить опции в каталог?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Patch    0

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
CrazyFrog    1

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
CrazyFrog    1

ни у кого так и не получилось? может проще скинуться на готовый модуль?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Patch    0

ни у кого так и не получилось? может проще скинуться на готовый модуль?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
CrazyFrog    1

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

http://www.opencart.com/index.php?route=extension/extension/info&extension_id=4091&filter_search=product%20options&sort=e.date_modified&order=DESC

Поделиться сообщением


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

Не работает в 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']	    = 'Опции:';

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
putnik    13

А как в ocstore 1.5.3.1 это реализовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
foruss    9

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
dvi3001    7

Дайте ссылку на сайт кто реализовал. Посмотреть как всё выглядит!?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
JoeKLD    0

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
underline    148

Зачем нужен vQmod? без него никак?

Можете прописать все ручками.

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
tux255    0

Добрый день!

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5tein    0

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу