Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Вывод опций товара в Категории. Opencart 2


Recommended Posts

Нашел тему на форуме, ггде указано решение этот проблемы для версии 1.5. Попробывал применить для версии 2, но выходит ошибка
Если гделать все как написано в этот теме, то получается икой измененый код в category.php
 

//кусок кода, который выищил из product.php
				$data['options'] = array();
				foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) {
					$product_option_value_data = array();

					foreach ($option['product_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') ? 'P' : false));
							} else {
								$price = false;
							}

							$product_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']
							);
						}
					}

					$data['options'][] = array(
						'product_option_id'    => $option['product_option_id'],
						'product_option_value' => $product_option_value_data,
						'option_id'            => $option['option_id'],
						'name'                 => $option['name'],
						'type'                 => $option['type'],
						'value'                => $option['value'],
						'required'             => $option['required']
					);
				}//конец куска кода
				
				//Код из темы на форуме
				$options = $this->model_catalog_product->getProductOptions($result['product_id']);
				
				$data['products'][] = array(	
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
					'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']), // добавляем атрибуты
					'price'       => $price,
					'options'     => $options,
					'special'     => $special, //Код из темы на форуме
					'tax'         => $tax,
					'rating'      => $result['rating'],
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				);
			}

И вот икие ошибки вылезают
 

Notice: Undefined index: product_id in /var/www/u0079664/public_html/burzhuy.org/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 263
Notice: Undefined index: product_id in /var/www/u0079664/public_html/burzhuy.org/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 263
Notice: Undefined index: product_id in /var/www/u0079664/public_html/burzhuy.org/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 263
Notice: Undefined index: product_id in /var/www/u0079664/public_html/burzhuy.org/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 263
Notice: Undefined index: product_id in /var/www/u0079664/public_html/burzhuy.org/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 263
Notice: Undefined index: product_id in /var/www/u0079664/public_html/burzhuy.org/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 263
Notice: Undefined index: product_id in /var/www/u0079664/public_html/burzhuy.org/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 263

Если код из product.php запихнуть под массив
 

				//Код из темы на форуме
				$options = $this->model_catalog_product->getProductOptions($result['product_id']);
				
				$data['products'][] = array(	
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
					'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']), // добавляем атрибуты
					'price'       => $price,
					'options'     => $options,
					'special'     => $special, //Код из темы на форуме
					'tax'         => $tax,
					'rating'      => $result['rating'],
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				);
			}
			
			//кусок кода, который выищил из product.php
				$data['options'] = array();
				foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) {
					$product_option_value_data = array();

					foreach ($option['product_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') ? 'P' : false));
							} else {
								$price = false;
							}

							$product_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']
							);
						}
					}

					$data['options'][] = array(
						'product_option_id'    => $option['product_option_id'],
						'product_option_value' => $product_option_value_data,
						'option_id'            => $option['option_id'],
						'name'                 => $option['name'],
						'type'                 => $option['type'],
						'value'                => $option['value'],
						'required'             => $option['required']
					);
				}//конец куска кода

То получается только вот икая ошибка
 

Notice: Undefined index: product_id in /var/www/u0079664/public_html/burzhuy.org/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 283

В category.tpl  у меня икой код
 

<?php if ($options) { ?>
            <hr>
            <h3><?php echo $text_option; ?></h3>
            <?php foreach ($options as $option) { ?>
            <?php if ($option['type'] == 'radio') { ?>
            <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>">
              <label class="control-label"><?php echo $option['name']; ?></label>
              <div id="input-option<?php echo $option['product_option_id']; ?>">
                <?php foreach ($option['product_option_value'] as $option_value) { ?>
                <div class="radio">
                    <input type="radio" id="radio<?php echo $option_value['product_option_value_id']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>"  name="option[<?php echo $option['product_option_id']; ?>]"  />
						  <label for="radio<?php echo $option_value['product_option_value_id']; ?>"><span></span>
						  <?php echo $option_value['name']; ?>
						  </label>                        
                    <?php if ($option_value['price']) { ?>
                    (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
                    <?php } ?>
                </div>
                <?php } ?>
              </div>
            </div>
            <?php } ?>
            <?php } ?>
            <?php } ?>

Как решить эту проблему?

Link to comment
Share on other sites


Link to comment
Share on other sites


  • 7 months later...

Бесплатный вариант для версии 2.0.3 - проверено: 

controller -> category.php

 

1. После: 

$this->load->language('product/category');

Добавить: 

$this->load->language('product/product');

2. После: 

$data['button_grid'] = $this->language->get('button_grid');

Добавить:

$data['text_select'] = $this->language->get('text_select');

3. Перед

$data['products'][] = array(
'product_id'  => $result['product_id'],
Добавить 
// Function Products Options in category


$json = array();


if (isset($this->request->post['product_id'])) {
$product_id = $this->request->post['product_id'];
} else {
$product_id = 0;
}


$this->load->model('catalog/product');


$product_info = $this->model_catalog_product->getProduct($product_id);


if ($product_info) {


$options = array();


foreach ($this->model_catalog_product->getProductOptions($product_info['product_id']) as $option) {
$product_option_value_data = array();


foreach ($option['product_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') ? 'P' : false));
} else {
$price = false;
}


$product_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']
);
}
}


$options[] = array(
'product_option_id'    => $option['product_option_id'],
'option_value'         => $product_option_value_data,
'option_id'            => $option['option_id'],
'name'                 => $option['name'],
'type'                 => $option['type'],
'value'                => $option['value'],
'required'             => $option['required']
);


$options['product_id'] = $product_info['product_id'];
$options['name'] = $product_info['name'];
} 


if (!$json) {
$json = $options;
}
}


// END Function

 

 

и в масив 

$data['products'][] = array(

Добавить

'options'   => $this->model_catalog_product->getProductOptions($result['product_id']), // Add option to $result products.

Для вывода необходимых опций в шаблоне нужно добавить.

template->product->category.tpl

В цикле  <?php foreach ($products as $product) { ?> в нужном Вам месте добавьте след.

<?php if ($product['options']) { ?>
<?php foreach ($product['options'] as $option) { ?>
    <!-- Код опции, можно взять из product.tpl. Например для Select -->
                     <?php if ($option['type'] == 'select') { ?>
            <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>">
              <label class="control-label" for="input-option<?php echo $option['product_option_id']; ?>"><?php echo $option['name']; ?></label>
              <select name="option[<?php echo $option['product_option_id']; ?>]" id="input-option<?php echo $option['product_option_id']; ?>" class="form-control">
                <option value=""><?php echo $text_select; ?></option>
                <?php foreach ($option['product_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>
            <?php } ?>
<!-- Конец кода опции Select -->
<?php } ?>
<?php } ?> 

 

P.S.: ^ Данные метод лишь выводит необходимые опции, но не привязывает их к кнопке "Добавить в корзину". Для привязки к кнопке нужно изменять саму кнопку, например как в product.tpl, липотому что ковырять функцию add.cart в шаблоне категории. Дальше сами.

 

  • +1 2
Link to comment
Share on other sites


  • 6 months later...

 

Бесплатный вариант для версии 2.0.3 - проверено: 

controller -> category.php

 

1. После: 

$this->load->language('product/category');

Добавить: 

$this->load->language('product/product');

2. После: 

$data['button_grid'] = $this->language->get('button_grid');

Добавить:

$data['text_select'] = $this->language->get('text_select');

3. Перед

$data['products'][] = array(
'product_id'  => $result['product_id'],
Добавить 
// Function Products Options in category


$json = array();


if (isset($this->request->post['product_id'])) {
$product_id = $this->request->post['product_id'];
} else {
$product_id = 0;
}


$this->load->model('catalog/product');


$product_info = $this->model_catalog_product->getProduct($product_id);


if ($product_info) {


$options = array();


foreach ($this->model_catalog_product->getProductOptions($product_info['product_id']) as $option) {
$product_option_value_data = array();


foreach ($option['product_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') ? 'P' : false));
} else {
$price = false;
}


$product_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']
);
}
}


$options[] = array(
'product_option_id'    => $option['product_option_id'],
'option_value'         => $product_option_value_data,
'option_id'            => $option['option_id'],
'name'                 => $option['name'],
'type'                 => $option['type'],
'value'                => $option['value'],
'required'             => $option['required']
);


$options['product_id'] = $product_info['product_id'];
$options['name'] = $product_info['name'];
} 


if (!$json) {
$json = $options;
}
}


// END Function

 

 

и в масив 

$data['products'][] = array(

Добавить

'options'   => $this->model_catalog_product->getProductOptions($result['product_id']), // Add option to $result products.

Для вывода необходимых опций в шаблоне нужно добавить.

template->product->category.tpl

В цикле  <?php foreach ($products as $product) { ?> в нужном Вам месте добавьте след.

<?php if ($product['options']) { ?>
<?php foreach ($product['options'] as $option) { ?>
    <!-- Код опции, можно взять из product.tpl. Например для Select -->
                     <?php if ($option['type'] == 'select') { ?>
            <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>">
              <label class="control-label" for="input-option<?php echo $option['product_option_id']; ?>"><?php echo $option['name']; ?></label>
              <select name="option[<?php echo $option['product_option_id']; ?>]" id="input-option<?php echo $option['product_option_id']; ?>" class="form-control">
                <option value=""><?php echo $text_select; ?></option>
                <?php foreach ($option['product_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>
            <?php } ?>
<!-- Конец кода опции Select -->
<?php } ?>
<?php } ?> 

 

P.S.: ^ Данные метод лишь выводит необходимые опции, но не привязывает их к кнопке "Добавить в корзину". Для привязки к кнопке нужно изменять саму кнопку, например как в product.tpl, липотому что ковырять функцию add.cart в шаблоне категории. Дальше сами.

 

 

На 2.1.0.2.1 что то не срилиило (

Link to comment
Share on other sites


  • 1 year later...
В 01.02.2016 в 18:42, gancsta сказал:

Бесплатный вариант для версии 2.0.3 - проверено: 

controller -> category.php

 

  Показать контент

1. После: 


$this->load->language('product/category');

Добавить: 


$this->load->language('product/product');
  Показать контент

2. После: 


$data['button_grid'] = $this->language->get('button_grid');

Добавить:


$data['text_select'] = $this->language->get('text_select');
  Показать контент

3. Перед


$data['products'][] = array(
'product_id'  => $result['product_id'],
Добавить 
  Показать контент


// Function Products Options in category


$json = array();


if (isset($this->request->post['product_id'])) {
$product_id = $this->request->post['product_id'];
} else {
$product_id = 0;
}


$this->load->model('catalog/product');


$product_info = $this->model_catalog_product->getProduct($product_id);


if ($product_info) {


$options = array();


foreach ($this->model_catalog_product->getProductOptions($product_info['product_id']) as $option) {
$product_option_value_data = array();


foreach ($option['product_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') ? 'P' : false));
} else {
$price = false;
}


$product_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']
);
}
}


$options[] = array(
'product_option_id'    => $option['product_option_id'],
'option_value'         => $product_option_value_data,
'option_id'            => $option['option_id'],
'name'                 => $option['name'],
'type'                 => $option['type'],
'value'                => $option['value'],
'required'             => $option['required']
);


$options['product_id'] = $product_info['product_id'];
$options['name'] = $product_info['name'];
} 


if (!$json) {
$json = $options;
}
}


// END Function

 

 

и в масив 


$data['products'][] = array(

Добавить


'options'   => $this->model_catalog_product->getProductOptions($result['product_id']), // Add option to $result products.

Для вывода необходимых опций в шаблоне нужно добавить.

template->product->category.tpl

В цикле  <?php foreach ($products as $product) { ?> в нужном Вам месте добавьте след.

  Показать контент

<?php if ($product['options']) { ?>
<?php foreach ($product['options'] as $option) { ?>
    <!-- Код опции, можно взять из product.tpl. Например для Select -->
                     <?php if ($option['type'] == 'select') { ?>
            <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>">
              <label class="control-label" for="input-option<?php echo $option['product_option_id']; ?>"><?php echo $option['name']; ?></label>
              <select name="option[<?php echo $option['product_option_id']; ?>]" id="input-option<?php echo $option['product_option_id']; ?>" class="form-control">
                <option value=""><?php echo $text_select; ?></option>
                <?php foreach ($option['product_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>
            <?php } ?>
<!-- Конец кода опции Select -->
<?php } ?>
<?php } ?> 

 

P.S.: ^ Данные метод лишь выводит необходимые опции, но не привязывает их к кнопке "Добавить в корзину". Для привязки к кнопке нужно изменять саму кнопку, например как в product.tpl, липотому что ковырять функцию add.cart в шаблоне категории. Дальше сами.

 


Как сгделать тоже самое, только в модуле рекомендуемые (в моем случае карусель рекомендуемых), вот код модуля

 

<?php
class ControllerModuleFeaturedcarusel extends Controller {
	public function index($setting) {
		static $module = 0;
		$this->load->language('module/featuredcarusel');
if ($setting['displaytitle'] == '1') {
$data['heading_title'] = $setting['name'];
} else {
	$data['heading_title'] = false;
}
$data['class'] = $setting['class'];
$data['items'] = $setting['items'];
$data['prodview'] = $setting['prodview'];
$this->document->addStyle('catalog/view/javascript/jquery/owl-carousel/owl.carousel.css');
$this->document->addStyle('catalog/view/javascript/jquery/owl-carousel/featuredcarusel.css');
$this->document->addScript('catalog/view/javascript/jquery/owl-carousel/owl.carousel.min.js');


		$data['text_tax'] = $this->language->get('text_tax');
		$data['text_more'] = $this->language->get('text_more');

		$data['button_cart'] = $this->language->get('button_cart');
		$data['button_wishlist'] = $this->language->get('button_wishlist');
		$data['button_compare'] = $this->language->get('button_compare');

		$this->load->model('catalog/product');

		$this->load->model('tool/image');

		$data['products'] = array();

		if (!$setting['limit']) {
			$setting['limit'] = 4;
		}

		if (!empty($setting['product'])) {
			$products = array_slice($setting['product'], 0, (int)$setting['limit']);

			foreach ($products as $product_id) {
				$product_info = $this->model_catalog_product->getProduct($product_id);

				if ($product_info) {
					if ($product_info['image']) {
						$image = $this->model_tool_image->resize($product_info['image'], $setting['width'], $setting['height']);
					} else {
						$image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']);
					}

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

					if ((float)$product_info['special']) {
						$special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
					} else {
						$special = false;
					}

					if ($this->config->get('config_tax')) {
						$tax = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price']);
					} else {
						$tax = false;
					}

					if ($this->config->get('config_review_status')) {
						$rating = $product_info['rating'];
					} else {
						$rating = false;
					}

					$data['products'][] = array(
						'product_id'  => $product_info['product_id'],
						'thumb'       => $image,
						'name'        => $product_info['name'],
						'description' => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
						'price'       => $price,
						'special'     => $special,
						'tax'         => $tax,
						'rating'      => $rating,
						'href'        => $this->url->link('product/product', 'product_id=' . $product_info['product_id'])
					);
				}
			}
		}
$data['module'] = $module++;
		if ($data['products']) {
			if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/featuredcarusel.tpl')) {
				return $this->load->view($this->config->get('config_template') . '/template/module/featuredcarusel.tpl', $data);
			} else {
				return $this->load->view('default/template/module/featuredcarusel.tpl', $data);
			}
		}
	}
}

 

Link to comment
Share on other sites


  • 4 weeks later...
В 01.02.2016 в 18:42, gancsta сказал:

Бесплатный вариант для версии 2.0.3 - проверено: 

controller -> category.php

 

  Показать контент

1. После: 


$this->load->language('product/category');

Добавить: 


$this->load->language('product/product');
  Показать контент

2. После: 


$data['button_grid'] = $this->language->get('button_grid');

Добавить:


$data['text_select'] = $this->language->get('text_select');
  Показать контент

3. Перед


$data['products'][] = array(
'product_id'  => $result['product_id'],
Добавить 
  Показать контент


// Function Products Options in category


$json = array();


if (isset($this->request->post['product_id'])) {
$product_id = $this->request->post['product_id'];
} else {
$product_id = 0;
}


$this->load->model('catalog/product');


$product_info = $this->model_catalog_product->getProduct($product_id);


if ($product_info) {


$options = array();


foreach ($this->model_catalog_product->getProductOptions($product_info['product_id']) as $option) {
$product_option_value_data = array();


foreach ($option['product_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') ? 'P' : false));
} else {
$price = false;
}


$product_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']
);
}
}


$options[] = array(
'product_option_id'    => $option['product_option_id'],
'option_value'         => $product_option_value_data,
'option_id'            => $option['option_id'],
'name'                 => $option['name'],
'type'                 => $option['type'],
'value'                => $option['value'],
'required'             => $option['required']
);


$options['product_id'] = $product_info['product_id'];
$options['name'] = $product_info['name'];
} 


if (!$json) {
$json = $options;
}
}


// END Function

 

 

и в масив 


$data['products'][] = array(

Добавить


'options'   => $this->model_catalog_product->getProductOptions($result['product_id']), // Add option to $result products.

Для вывода необходимых опций в шаблоне нужно добавить.

template->product->category.tpl

В цикле  <?php foreach ($products as $product) { ?> в нужном Вам месте добавьте след.

  Показать контент

<?php if ($product['options']) { ?>
<?php foreach ($product['options'] as $option) { ?>
    <!-- Код опции, можно взять из product.tpl. Например для Select -->
                     <?php if ($option['type'] == 'select') { ?>
            <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>">
              <label class="control-label" for="input-option<?php echo $option['product_option_id']; ?>"><?php echo $option['name']; ?></label>
              <select name="option[<?php echo $option['product_option_id']; ?>]" id="input-option<?php echo $option['product_option_id']; ?>" class="form-control">
                <option value=""><?php echo $text_select; ?></option>
                <?php foreach ($option['product_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>
            <?php } ?>
<!-- Конец кода опции Select -->
<?php } ?>
<?php } ?> 

 

P.S.: ^ Данные метод лишь выводит необходимые опции, но не привязывает их к кнопке "Добавить в корзину". Для привязки к кнопке нужно изменять саму кнопку, например как в product.tpl, липотому что ковырять функцию add.cart в шаблоне категории. Дальше сами.

 

 

 

Кто-нибудь проверял на 2.3.0.2 ? рилииет?

 

Link to comment
Share on other sites


  • 1 month later...
  • 1 year later...
В 19.12.2017 в 17:05, zignatz сказал:

 

 

Кто-нибудь проверял на 2.3.0.2 ? рилииет?

 

Проверял на 2302, но на не синдартном шаблоне.
было куча ошипотому чток по калькуляции этоны,

убрал

    $var_currency['value'] = $this->currency->getValue();
    $var_currency['symbol_left'] = $this->currency->getSymbolLeft();
    $var_currency['symbol_right'] = $this->currency->getSymbolRight();
    $var_currency['decimals'] = $this->currency->getDecimalPlace();

всё нормально рилииет.

Может кто знает как вывести одну из опций.
Например есть Цвет (id=1) и Размер (id=2)

Необходимо вывести только размер.

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.