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

Вывод опций товара в Категории. 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 } ?>

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

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


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


  • 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 3
Надіслати
Поділитися на інших сайтах


  • 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 что то не сработало (

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


  • 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);
			}
		}
	}
}

 

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


  • 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 ? работает?

 

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


  • 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)

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

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


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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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