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

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


Recommended Posts

Подскажите пожалуйста как в 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
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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