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

Не могу вывести опции на страници категорий


Recommended Posts

Добрый день друзя, сталкнулся с такой проблемкой, на странице категории хочу вывести при ховере на блок опцию этого элемента к примере размер. Добавляю в файл category.php cледиющие строки 

$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)), $this->session->data['currency']);
                        } 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->ave->cropsize($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']
                );
            }

 

На странице category.tpl вывоже следующие:

<?php foreach ($options as $option) { ?>
   <?php if ($option['type'] == 'checkbox') { ?>
     <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="checkbox">
        <label>
       <input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option_value['product_option_value_id']; ?>" />
        <?php if ($option_value['image']) { ?>
<img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" class="img-thumbnail" /> 
       <?php } ?>
      <?php echo $option_value['name']; ?>
     <?php if ($option_value['price']) { ?>(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
  <?php }
</label>
</div>
<?php } ?>
</div>
</div>
<?php } ?>
<?php } ?>

В результате на сайте ошибка:

Notice: Undefined variable: options in/home/c/cp82463/club_vld/public_html/catalog/view/theme/noraure/template/product/category.tpl

on line 103 Warning: Invalid argument supplied for foreach() in/home/c/cp82463/club_vld/public_html/catalog/view/theme/noraure/template/product/category.tplon line 103

Как решить не пойму, ведь $options я объявил в controller, кто знает подскажите буду очень признателен!

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


mirfox,

opencart 2.2. С помощью плагинов не хотелось бы выводить. Объявляю я перед:  

        $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($this->config->get('config_theme') . '_product_description_length')) . '..',
                    'price'       => $price,
                    'special'     => $special,
                    'tax'         => $tax,
                    'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
                    'rating'      => $result['rating'],
                    'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
                );
            }

Причем не понимаю я того что, удаляю весь код в category.php и старница все равно стабильно работает

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


3 минуты назад, Alan8 сказал:

Причем не понимаю я того что, удаляю весь код в category.php и старница все равно стабильно работает

Обновите кэш модификаторов.

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

Скрытый текст

$data['products'][] = array(
                    'options'      => $options,

 И зря вы выкинули проверку

Скрытый текст

<?php if ($product['options']) { ?>
                         <?php foreach ($product['options'] as $option) { ?>

ведь бывают товары без опций.

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


jaffagold, Все равно пишет Undefined variable: options in catalog/view/theme/noraure/template/product/category.tpl

on line 103 

Warning: Invalid argument supplied for foreach() in public_html/catalog/view/theme/noraure/template/product/category.tpl on line 103

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


Параллельно делаю тоже, что и Вы. Вот ошибка 1.

$data['options'] = array();
            foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) {

foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) {

 

2. Везде меняем $data['options'] на $options

 

3. 

$data['products'][] = array(
	'options'       => $options,
...

 

 

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

Короче разобрался как выводить, делаю вот так, в контроллере добавляю следующие:

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'],

$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;
}
}

и в масив 
 

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


Добавить

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

Далее в categoty.tpl добавляю следующие:

В цикле <?php foreach ($products as $product) { ?>

<?php if ($product['options']) { ?>
                                    <?php foreach ($product['options'] as $option) { ?>
                                    <!-- Код опции, можно взять из product.tpl. Например для Select -->
                                    <?php if ($option['type'] == 'checkbox') { ?>
                                      <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="checkbox">
                                              <label>
                                              <input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option_value['product_option_value_id']; ?>" />
                                              <?php if ($option_value['image']) { ?>
                                              <img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" class="img-thumbnail" /> 
                                              <?php } ?>
                                              <?php echo $option_value['name']; ?>
                                              <!-- <?php if ($option_value['price']) { ?> -->
                                              <!-- (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>) -->
                                              <?php } ?>
                                              </label>
                                            </div>
                                            <?php } ?>
                                          </div>
                                        </div>
                                        <?php } ?>
                                     
                                    <?php } ?>
                                    <?php } ?> 

И все работает нормально! Но есть один минус, это работает при выключенном фильтре. Если же включаю фильтр то сново пишет Undefined variable: options

 

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


  • 1 month later...

У фильтра свой контроллер, он получает массив с товарами из другой модели или из той же, но контроллер все равно другой, в нем нет кода запроса опций. Не забывайте про оптимизацию, если товаров и опций будет много, то будет тормозить. А чтобы добавить товар в корзину с выбранной опцией, то измените стандартную javascript функцию addToCart.

 

И убедительная просьба, используйте кнопочку "Код" в редакторе форума.

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

  • 3 years later...

Объясните чайнику. Код сайта не правился еще ни разу. Поэтому нужно разжевать "по буквам".

Также не выводятся опции на страницу сайта. Через админку все растраивается. Опции в каталоге есть. В товарах все опции добавляются, но на самом сайте категорично не хотят выводиться. Вижу их только в админке при редактировании товара и все. Я так понимаю, что какая-то проблема в коде. Где именно и что исправить не понимаю. Даже почитав данную тему, вопрос совсем не решен.

Opencart 1.5.6.4.

Миллион плюсов в карму, тому человеку, который тыкнет меня носом в каких конкретно папках в корне сайте и в каких файлах, что нужно подредактировать. 

 

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


5 минут назад, Jane123456 сказал:

Объясните чайнику. Код сайта не правился еще ни разу. Поэтому нужно разжевать "по буквам".

Также не выводятся опции на страницу сайта. Через админку все растраивается. Опции в каталоге есть. В товарах все опции добавляются, но на самом сайте категорично не хотят выводиться. Вижу их только в админке при редактировании товара и все. Я так понимаю, что какая-то проблема в коде. Где именно и что исправить не понимаю. Даже почитав данную тему, вопрос совсем не решен.

Opencart 1.5.6.4.

Миллион плюсов в карму, тому человеку, который тыкнет меня носом в каких конкретно папках в корне сайте и в каких файлах, что нужно подредактировать. 

 

В настройках опции включены

Безымянный.jpg

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


В 10.12.2020 в 18:24, Jane123456 сказал:

Объясните чайнику. Код сайта не правился еще ни разу. Поэтому нужно разжевать "по буквам".

Также не выводятся опции на страницу сайта. Через админку все растраивается. Опции в каталоге есть. В товарах все опции добавляются, но на самом сайте категорично не хотят выводиться. Вижу их только в админке при редактировании товара и все. Я так понимаю, что какая-то проблема в коде. Где именно и что исправить не понимаю. Даже почитав данную тему, вопрос совсем не решен.

Opencart 1.5.6.4.

Миллион плюсов в карму, тому человеку, который тыкнет меня носом в каких конкретно папках в корне сайте и в каких файлах, что нужно подредактировать. 

 

catalog\controller\product

 

Здесь такой код 


    public function getProductOptions($product_id) {
        $product_option_data = array();

        $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order");

        foreach ($product_option_query->rows as $product_option) {
            if ($product_option['type'] == 'select' || $product_option['type'] == 'radio' || $product_option['type'] == 'checkbox' || $product_option['type'] == 'image') {
                $product_option_value_data = array();

                $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order");

                foreach ($product_option_value_query->rows as $product_option_value) {
                    $product_option_value_data[] = array(
                        'product_option_value_id' => $product_option_value['product_option_value_id'],
                        'option_value_id'         => $product_option_value['option_value_id'],
                        'name'                    => $product_option_value['name'],
                        'image'                   => $product_option_value['image'],
                        'quantity'                => $product_option_value['quantity'],
                        'subtract'                => $product_option_value['subtract'],
                        'price'                   => $product_option_value['price'],
                        'price_prefix'            => $product_option_value['price_prefix'],
                        'weight'                  => $product_option_value['weight'],
                        'weight_prefix'           => $product_option_value['weight_prefix']
                    );
                }

                $product_option_data[] = array(
                    'product_option_id' => $product_option['product_option_id'],
                    'option_id'         => $product_option['option_id'],
                    'name'              => $product_option['name'],
                    'type'              => $product_option['type'],
                    'option_value'      => $product_option_value_data,
                    'required'          => $product_option['required']
                );
            } else {
                $product_option_data[] = array(
                    'product_option_id' => $product_option['product_option_id'],
                    'option_id'         => $product_option['option_id'],
                    'name'              => $product_option['name'],
                    'type'              => $product_option['type'],
                    'option_value'      => $product_option['option_value'],
                    'required'          => $product_option['required']
                );                
            }
        }

        return $product_option_data;
    }

 

 

Какая может быть ошибка в коде, если опции не выводятся на страницу товара?

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


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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