Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Погделиться

Рекомендованные сообещёния

Добрый гдень друзя, силкнулся с икой проблемкой, на страниэто категории хочу вывести при ховере на блок опцию этого элемени к примере размер. Добавляю в файл 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 месяц спустя...

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

 

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

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

  • 3 года спустя...

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

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

Opencart 1.5.6.4.

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

 

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


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

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

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

Opencart 1.5.6.4.

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

 

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

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


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

 

 

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

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


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

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

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