Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Получить опции товаров в стандартном модуле featured OC3


 Поделиться

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

Подскажите пожалуйста как в opencart 3 в стандартном (базовом) модуле featured вывести опции товаров

В файл: modification\catalog\controller\extension\module\featured.php

добавил код:

$options = array();
foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) {
    if($option['required']){
        $product_option_value_data = array();
        foreach ($option['product_option_value'] as $option_value) {
            if (!$option_value['subtract'] || ($option_value['quantity'] >= 0)) {
                $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),
                    'quantity'                => $option_value['quantity'],
                    'price_prefix'            => $option_value['price_prefix']
                );
            }
        }
        $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']
        );
    }
}

Также в $data['products'][] = array(

добавил:

'options' => $options,

Для вывода в файле: template\extension\module\featured.twig

в карточку товара добавил код:

{% if product.options %}
    {% for option in product.options %}

    {% if option.type == 'radio' %}
            <div class="groupOptionWrap {% if option.required %} required {% endif %}">
                
                <div id="input-option{{ option.product_option_id }}" class='groupOptionElements'>
                    {% for option_value in option.product_option_value %}
                        {% if option_value.quantity == "0" %}
                            <div class="groupOption groupOptionDisable">
                                {{ option_value.name }}
                            </div>
                        {% else %}
                            <div class="groupOption">
                                {{ option_value.name }}
                            </div>
                        {% endif %}
                    {% endfor %}
                </div>
            </div>
        {% endif %}
    {% endfor %}
{% endif %}

Но это не сработало, просьба подсказать, если кто знает рабочий вариант

Весь код данного модуля:

<?php
    class ControllerExtensionModuleFeatured extends Controller {
        public function index($setting) {
    
            $this->load->language('extension/module/notify_when_available');
            $data['text_out_of_stock'] = $this->language->get('text_out_of_stock');
            $data['out_of_stock_show'] = $this->config->get('module_notify_when_available_stock');
            $data['out_of_stock_notify'] = $this->config->get('module_notify_when_available_notify');
            
            $this->load->language('extension/module/featured');
    
            $this->load->model('catalog/product');
    
            $this->load->model('tool/image');
    
            $data['products'] = array();
    
            if (!$setting['limit']) {
                $setting['limit'] = 4;
            }
    
            if (!empty($setting['product'])) {
    
    
            $lang = $this->config->get('config_language_id');
            $title = isset($setting['titles']['title'.$lang]) && $setting['titles']['title'.$lang] ? $setting['titles']['title'.$lang] : '';
    
            if (isset($title) && $title) {
                $data['heading_title'] = $title;
            }
    
            if (isset($setting['shuffle']) && $setting['shuffle']) {
                shuffle($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->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')), $this->session->data['currency']);
    
                    $data['priceInt'] = $this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'));
                
                        } else {
                            $price = false;
                        }
    
    
                    $specialSavings =0; 
                
                        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')), $this->session->data['currency']);
    
                    $data['specialInt'] = $this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax'));
                    $data['specialSavings'] = round((($data['priceInt']-$data['specialInt'])/$data['priceInt'])*100, 2);
                    $specialSavings = $data['specialSavings'];
                
                        } else {
                            $special = false;
                        }
    
                        if ($this->config->get('config_tax')) {
                            $tax = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price'], $this->session->data['currency']);
                        } else {
                            $tax = false;
                        }
    
                        if ($this->config->get('config_review_status')) {
                            $rating = $product_info['rating'];
                        } else {
                            $rating = false;
                        }
                        $options = array();
                        foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) {
                            if($option['required']){
                                $product_option_value_data = array();
                                foreach ($option['product_option_value'] as $option_value) {
                                    if (!$option_value['subtract'] || ($option_value['quantity'] >= 0)) {
                                        $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),
                                            'quantity'                => $option_value['quantity'],
                                            'price_prefix'            => $option_value['price_prefix']
                                        );
                                    }
                                }
                                $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']
                                );
                            }
                        }
                        $data['products'][] = array(
                            'product_id'  => $product_info['product_id'],
                            'quantity'  => $result['quantity'],
                            'quantity'  => $product_info['quantity'],
                            'quantity'  => isset($result['quantity']) ? $result['quantity'] : (isset($product_info['quantity']) ? $product_info['quantity'] : 1),
                            'attribute_groups' => $this->model_catalog_product->getProductAttributes($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('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
                            'price'       => $price,
                            'special'     => $special,
                            'specialSavings'     => $specialSavings,
                            'tax'         => $tax,
                            'rating'      => $rating,
                            'options' => $options,
                            'href'        => $this->url->link('product/product', 'product_id=' . $product_info['product_id'])
                        );

 

 

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


"не сработало" в каком виде?

модификаторы обновляли?

шаблон редактировали тот, который нужно?

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


51 минуту назад, openprice сказал:

"не сработало" в каком виде?

модификаторы обновляли?

шаблон редактировали тот, который нужно?

 

Модификаторы обновлял и кэш чистил. Шаблон выбран стандартный его и редактировал. Не сработало именно для данного модуля т е опции не выводятся ошибок opencarr не показывает. Пробовал для модуля недавно добавленные там работает и в категориях тоже работает

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


а это что за дичь такая ?

'quantity'  => $result['quantity'],
'quantity'  => $product_info['quantity'],
'quantity'  => isset($result['quantity']) ? $result['quantity'] : (isset($product_info['quantity']) ? $product_info['quantity'] : 1),
                            

 

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


15 минут назад, egor23 сказал:

а это что за дичь такая ?

а во такая!!!

 

6 часов назад, Alexandr15 сказал:

Не сработало именно для данного модуля т е опции не выводятся ошибок opencarr не показывает.

а кто этот код ваял? в массиве есть ключ=>значение. в принципе ошибки не покажет если даже есть 3 одинаковых ключа, но как тогда организовать поиск в массиве?

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

а это что за дичь такая ?

'quantity'  => $result['quantity'],
'quantity'  => $product_info['quantity'],
'quantity'  => isset($result['quantity']) ? $result['quantity'] : (isset($product_info['quantity']) ? $product_info['quantity'] : 1),
                            

 

Извиняюсь это может быть часть кода от другого модуля, чуть позже выложу код без доп. изменений

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


2 часа назад, Alexandr15 сказал:

это может быть часть кода от другого модуля

ну если это даже часть кода другого модуля, то от такого модуля надо избавляться и как можно быстрее ))))

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


18 часов назад, Alexandr15 сказал:

Подскажите пожалуйста как в opencart 3 в стандартном (базовом) модуле featured вывести опции товаров

В файл: modification\catalog\controller\extension\module\featured.php

добавил код:

туда то зачем ???? ну вы действительно не понимаете что делаете, зачем ломаете свой магазин

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

11 минут назад, Venter сказал:

ну вы действительно не понимаете что делаете, зачем ломаете свой магазин

ну человек хочет сам научиться, пусть пробует, на ошибках учатся.

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


2 часа назад, Venter сказал:

туда то зачем ???? ну вы действительно не понимаете что делаете, зачем ломаете свой магазин

 

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

 

Сам код прописывал по пути: catalog\controller\extension\module\featured.php 

 

Естественно после обновлял модификаторы и кэш чистил

 

 

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


Код без доп. модулей:  catalog\controller\extension\module\featured.php 

 

<?php
class ControllerExtensionModuleFeatured extends Controller {
    public function index($setting) {
        $this->load->language('extension/module/featured');

        $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->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')), $this->session->data['currency']);
                    } 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')), $this->session->data['currency']);
                    } else {
                        $special = false;
                    }

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

                    if ($this->config->get('config_review_status')) {
                        $rating = $product_info['rating'];
                    } else {
                        $rating = false;
                    }
            $options = array();
            foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) {
                if($option['required']){
                    $product_option_value_data = array();
                    foreach ($option['product_option_value'] as $option_value) {
                        if (!$option_value['subtract'] || ($option_value['quantity'] >= 0)) {
                            $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),
                                'quantity'                => $option_value['quantity'],
                                'price_prefix'            => $option_value['price_prefix']
                            );
                        }
                    }
                    $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']
                    );
                }
            }
                    $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('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
                        'price'       => $price,
                        'special'     => $special,
                        'tax'         => $tax,
                        'rating'      => $rating,
                        'options'      => $options,
                        'href'        => $this->url->link('product/product', 'product_id=' . $product_info['product_id'])
                    );
                }
            }
        }

        if ($data['products']) {
            return $this->load->view('extension/module/featured', $data);
        }
    }
}

 

Подскажите пожалуйста, что нужно исправить, добавить в данном коде чтобы вывести опции в модуле Рекомендуемые ?

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


12 часов назад, Alexandr15 сказал:

Подскажите пожалуйста, что нужно исправить, добавить в данном коде чтобы вывести опции в модуле Рекомендуемые ?

 

вот здесь посмотрите опции

$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('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
                        'price'       => $price,
                        'special'     => $special,
                        'tax'         => $tax,
                        'rating'      => $rating,
                        'options'      => $options   <-- вот здесь они $options это массив с опциями на сколько я понимаю
                    
                    );
                                                         
Проверить можно
                                                         
echo '<pre>'; print_r($data['products']); echo '</pre>';                                                        

 

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

19 часов назад, Venter сказал:

 

вот здесь посмотрите опции



$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('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
                        'price'       => $price,
                        'special'     => $special,
                        'tax'         => $tax,
                        'rating'      => $rating,
                        'options'      => $options   <-- вот здесь они $options это массив с опциями на сколько я понимаю
                    
                    );
                                                         
Проверить можно
                                                         
echo '<pre>'; print_r($data['products']); echo '</pre>';                                                        

 

 

 

Спасибо за совет

 

Проверил, массив с опциям пустой:

 

 [options] => Array
                (
                )

 

Если я правильно понимаю это значит, что не срабатывает цикл, только вот, что именно не так, не понятно

 

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


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

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

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

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

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

Войти

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

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

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

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

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