Перейти к содержанию
Frunky

[Решено?..] Опции товара в Категориях

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

Доброго времени суток!
Прошу помощи,уже не знаю что делать. В общем нужно сделать так, чтобы опции товара(вес) выводились в категориях и напротив каждой опции была кнопка "Купить",либо,Чтобы цена или вес были кликабельны.
Купил https://opencartforum.com/files/file/634-опции-товара-в-категориях-product-options-in-category/

Однако при закачке xml файла куда положено никаких изменений не происходит(делал все по инструкции). Сам Автор уже давно не заходил и,мне кажется, поддержки данного модуля уже не будет.Тема не стандартная - Ancart(ocshop 1.5.6.4). Также находил похожие темы на форуме,все что там описывается - пробовал, но там выходят php ошибки.

Надеюсь на Вашу помощь. Спасибо.

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


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

Какого рода помощь? Расписать что и куда? 

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


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

Можно сделать такое, но дорого.

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


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

Какого рода помощь? Расписать что и куда? 

Да,нужно расписать что и куда. Я знаю,что работать надо с category.php и category.tpl, а сам вывод опции брать с product.php и product,tpl, пробовал копировать то,что относится к опциям,но все безуспешно.Единственное,что получил так это ошибки в хедере.

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


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

Помощь в таком случае может быть только одного плана.Показываете, что сделано и в чём затык.А разжёвывать с нуля , что и куда здесь никто не будет.

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


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

Извиняюсь за долгий ответ.
В общем, я взял часть кода из catalog/controller/product.php

$this->data['options'] = array();

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

					foreach ($option['option_value'] as $option_value) {
						if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
							if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
								$price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
							} else {
								$price = false;
							}

							$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'],
								'image'                   => $this->model_tool_image->resize($option_value['image'], 50, 50),
								'price'                   => $price,
								'price_prefix'            => $option_value['price_prefix']
							);
						}
					}

					$this->data['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') {
					$this->data['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']
					);						
				}
			}

и вставил в catalog/contoller/category.php перед
 

$this->data['products'][] = array(

Далее изменил вид шаблона категории. Из Catalog/view/theme/Ancart(так называется тема)/template/product/product.tpl взял часть кода
 

      <?php if ($options) { ?>
      <div class="options">
        <h2><?php echo $text_option; ?></h2>
        <br />
        <?php foreach ($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 />
          <input type="button" value="<?php echo $button_upload; ?>" id="button-option-<?php echo $option['product_option_id']; ?>" class="button">
          <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 } ?>

И добавил в catalog/view/theme/ancart/template/product/category.tpl после
 

      <div class="price">
        <?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
        <?php } ?>
        <?php if ($product['tax']) { ?>
        <br />
        <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
        <?php } ?>
      </div>
      <?php } ?>
      <div class="cart">
        <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" />
      </div>
      <div class="wishlist"><a onclick="addToWishList('<?php echo $product['product_id']; ?>');"><?php echo $button_wishlist; ?></a></div>
      <div class="compare"><a onclick="addToCompare('<?php echo $product['product_id']; ?>');"><?php echo $button_compare; ?></a></div>
    </div>
    <?php } ?>

Результат: 445de09b9436e95226c6b1922f2f43c1.png

в хедере.А сами категории ни капельки не изменились. 
Нужен примерно такой вид: e0d53ca8fef1228be4476267f6a64f23.png

Но его я думаю добьюсь сам,главное,чтобы выводились опции товара под самим товаром.Бонусы были бы не лишними.Заранее Спасибо.

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


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

catalog/controller/product/category.php

 

перед

'special'     => $special,

добавить

'options'         => $options,

перед

$this->data['products'][] = array(

это

$options = $this->model_catalog_product->getProductOptions($result['product_id']);

в тплку вывести

 

<div class="category-options">
<?php if ($product['options']) { ?>
<div class="options" id="option_<?php echo $product['product_id']; ?>"> 
<?php foreach ($product['options'] as $option) { ?>
<?php if ($option['type'] == 'radio') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <?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']; ?>
 <i></i>
 </label>
<?php } ?>
</div>
<?php } ?>
<?php if ($option['type'] == 'select') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <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']; ?>
</option>
<?php } ?>
 </select>
</div>
<?php } ?>
<?php if ($option['type'] == 'checkbox') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <?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']; ?>
 <i></i>
 </label>


 <?php } ?>
</div>
<?php } ?>
<?php if ($option['type'] == 'image') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
<table class="option-image">
 <?php foreach ($option['option_value'] as $option_value) { ?>
 <tr class="image_options">
<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']; ?>" /> 
  <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>" data-title="<?php echo $option_value['name']; ?>"><img src="/image/<?php echo $option_value['image']; ?>"  alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" />
                         <i></i>
 </td>
 </tr>
 <?php } ?>
</table>
</div>
<?php } ?>
<?php if ($option['type'] == 'text') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['option_value']; ?>" />
</div>
<?php } ?>
<?php if ($option['type'] == 'textarea') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <textarea name="option[<?php echo $option['product_option_id']; ?>]" cols="18" rows="2"><?php echo $option['option_value']; ?></textarea>
</div>
<?php } ?>
<?php if ($option['type'] == 'file') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <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>
<?php } ?>
<?php if ($option['type'] == 'date') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['option_value']; ?>" class="date" />
</div>
<?php } ?>
<?php if ($option['type'] == 'datetime') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['option_value']; ?>" class="datetime" />
</div>
<?php } ?>
<?php if ($option['type'] == 'time') { ?>
<div id="option-<?php echo $option['product_option_id']; ?>" class="option">
 <b><?php echo $option['name']; ?>:</b><br style="margin-bottom: 6px;" />
 <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['option_value']; ?>" class="time" />
   </div>
<?php } ?> 
   <?php } ?> 
</div>
 <?php } ?>
           </div>

 

ну и не забываем в скрипт добавить новый класс

html += '  <div class="category-options">' + $(element).find('.category-options').html() + '</div>';
  • +1 1

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


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

Только кнопки купить для каждой не будет...

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


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

Это да)))))) Так же как и бонусов...

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


Ссылка на сообщение
Поделиться на другие сайты
Tom, Спасибо большущее!!!Выручили И главное оперативно-то как!

А как сделать так, что бы по клику на опцию(чекбокс) происходило добавление товара в корзину? Я примерно представляю что это реализуется через яваскрипт. нужно в опцию добавить функцию onclick в ,допустим, 

 <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>

или 

 <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']; ?>" />

?Еще раз спасибо

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


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

Так здесь же все ответы
 


и скрипт и кнопка))))

 

А это бонусы

Бонусы: <?php echo $option_value['points']; ?>

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


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

Круто! Все получилось!Только вот проблема.Допустим у нас 4 опции( 2 кг. 4 кг. 6 кг и 8 кг.) цена соответственно везде разная,но ,если кликнуть на любую опцию , цена выбирается стандартная. Как с этим быть?

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


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

Это уже немного больше,чем "помочь"......

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


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

Да,я немного приборзел. Спасибо большое еще раз за помощь)

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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