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

Вывод опций в Категории. Opencart 3


Recommended Posts

Приветствую.

Не могу нигде найти достойной инструкции о том как добавить в категорию и модули выбор опций для Opencart 3.

Для 1.5 все это без проблем решалось парой строчек кода максимум 5-10 минут работы , и я без труда это проделывала, а вот для тройки никак не получается, прошу вашей помощи или ткните носом в тему так как я ее так и не нашла...

Спасибо, и заранее благодарю за помощь.


PS: Модули не предлагать они мне не нужны, так как у меня задачи совсем иные...

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


4 хвилини назад, natalia8978 сказав:

Приветствую.

Не могу нигде найти достойной инструкции о том как добавить в категорию и модули выбор опций для Opencart 3.

Для 1.5 все это без проблем решалось парой строчек кода максимум 5-10 минут работы , и я без труда это проделывала, а вот для тройки никак не получается, прошу вашей помощи или ткните носом в тему так как я ее так и не нашла...

Спасибо, и заранее благодарю за помощь.


PS: Модули не предлагать они мне не нужны, так как у меня задачи совсем иные...

могу вывести, сделаю модификатором

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


13 минут назад, natalia8978 сказал:

Для 1.5 все это без проблем решалось парой строчек кода максимум 5-10 минут работы , и я без труда это проделывала, а вот для тройки никак не получается, прошу вашей помощи или ткните носом в тему так как я ее так и не нашла...

 

а с чем у вас проблема? если сами делали на 1.5, то я не вижу причины которая могла бы помешать сделать аналогичное на 3.х

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

21 минуту назад, Vetroff сказал:

 

а с чем у вас проблема? если сами делали на 1.5, то я не вижу причины которая могла бы помешать сделать аналогичное на 3.х

Да проблема что там все другое, а twig вообще меня в ступор ставит, я никогда в жизни с ним дела не имела....

Для 1.5. я всегда этой инструкцией пользовалась, но для тройки оно совсем не работает, здесь на форуме так же нашла для двойки инструкцию и она тоже не хочет,

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

Не хочут отображатся опции ни как....

Я сейчас делаю опции для блока рекомендуемые товары, вернее зделала клон рекоммендуемых, (с ними все ок) и в данный модуль теперь мучаюсь не могу никак вывести опции....

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


Контролер мой счас 

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

        $this->load->model('catalog/product');

        $this->load->model('tool/image');

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

        $filter_data = array(
            'sort'  => 'p.date_added',
            'order' => 'DESC',
            'start' => 0,
            'limit' => $setting['limit']
        );

        $results = $this->model_catalog_product->getProducts($filter_data);

        if ($results) {
            foreach ($results as $result) {
                if ($result['image']) {
                    $image = $this->model_tool_image->resize($result['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($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                } else {
                    $price = false;
                }

                if ((float)$result['special']) {
                    $special = $this->currency->format($this->tax->calculate($result['special'], $result['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)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
                } else {
                    $tax = false;
                }

                if ($this->config->get('config_review_status')) {
                    $rating = $result['rating'];
                } else {
                    $rating = false;
                }

                $options = array();

                foreach ($this->model_catalog_product->getProductOptions($result['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->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'],
                        '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'  => $result['product_id'],
                    'options'     => $options,
                    'thumb'       => $image,
                    'name'        => $result['name'],
                    'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['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,
                    'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])
                );
            }

            return $this->load->view('extension/module/orderswatch', $data);
        }
    }
}

И шаблон

<h3>{{ heading_title }}</h3>
<div class="row"> {% for product in products %}
  <div class="product-layout col-lg-3 col-md-3 col-sm-6 col-xs-12">
    <div class="product-thumb transition">
      <div class="image"><a href="{{ product.href }}"><img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}" class="img-responsive" /></a></div>
      <div class="caption">
        <h4><a href="{{ product.href }}">{{ product.name }}</a></h4>
        <p>{{ product.description }}</p>
        {% if product.rating %}
        <div class="rating">{% for i in 1..5 %}
          {% if product.rating < i %} <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span> {% else %} <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span> {% endif %}
          {% endfor %}</div>
        {% endif %}
        {% if product.price %}
        <p class="price"> {% if not product.special %}
          {{ product.price }}
          {% else %} <span class="price-new">{{ product.special }}</span> <span class="price-old">{{ product.price }}</span> {% endif %}
          {% if product.tax %} <span class="price-tax">{{ text_tax }} {{ product.tax }}</span> {% endif %} </p>
        {% endif %} 

        {% if product.options %}
         <hr>
         <h3>{{ text_option }}</h3>

         {% for option in product.options %}

          {% if option.type == 'select' %}
          <div class="form-group{% if option.required %} required {% endif %}">
          <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label>
          <select name="option[{{ option.product_option_id }}]" id="input-option{{ option.product_option_id }}" class="form-control">
          <option value="">{{ text_select }}</option>
          {% for option_value in option.product_option_value %}
          <option value="{{ option_value.product_option_value_id }}">{{ option_value.name }}
          {% if option_value.price %}
          ({{ option_value.price_prefix }}{{ option_value.price }})
           {% endif %} </option>
           {% endfor %}
          </select>
        </div>
        {% endif %}
        {% endfor %}
        {% endif %}        
        </div>
      <div class="button-group">
        <button type="button" onclick="cart.add('{{ product.product_id }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button>
        <button type="button" data-toggle="tooltip" title="{{ button_wishlist }}" onclick="wishlist.add('{{ product.product_id }}');"><i class="fa fa-heart"></i></button>
        <button type="button" data-toggle="tooltip" title="{{ button_compare }}" onclick="compare.add('{{ product.product_id }}');"><i class="fa fa-exchange"></i></button>
      </div>
    </div>
  </div>
  {% endfor %} </div>

А на деле так  https://prnt.sc/sey12b

 

Что ему еще надо?

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


Меня смущает $product_info в контроллере, замените на $result

а так вроде все правильно. Кеш шаблона, модифкаторов сбрасывали?

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

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

Меня смущает $product_info в контроллере, замените на $result

а так вроде все правильно. Кеш шаблона, модифкаторов сбрасывали?

Кеш чистила, $product_info заменяла... все без изменений...:-?

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


опции у вас именно селектом?

 

вот ваш код в модуле новинок (последний товар с опциями), все в порядке

https://oc3.zencode.us/

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

2 минуты назад, Vetroff сказал:

опции у вас именно селектом?

 

текст:

Но я уже это 

{% if option.type == 'select' %}

Уже сменила на 

{% if option.type == 'text' %}

Но к сожалению ошибка не в етом так как все равно не хочет...

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


14 минут назад, natalia8978 сказал:

{% if option.type == 'text' %}

 

вместе с блоком, надеюсь? )

         {% if option.type == 'text' %}
            <div class="form-group{% if option.required %} required {% endif %}">
              <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label>
              <input type="text" name="option[{{ option.product_option_id }}]" value="{{ option.value }}" placeholder="{{ option.name }}" id="input-option{{ option.product_option_id }}" class="form-control" />
            </div>
            {% endif %}

 

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

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

И так что нужно чтоб опции отображались в сопутствующих товарах:

1. контролер catalog/controller/product/product.php

Находим код:

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

и сразу над ним пишем так:

                $options = array();

                foreach ($this->model_catalog_product->getProductOptions($result['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->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'],
                        'product_option_value' => $product_option_value_data,
                        'option_id'            => $option['option_id'],
                        'name'                 => $option['name'],
                        'type'                 => $option['type'],
                        'value'                => $option['value'],
                        'required'             => $option['required']
                    );
                }	

2. Шаблон catalog/view/theme/default/template/product/product.twig

точный вывод зависит от шаблона но где то во внутрь после строчек:

      {% if products %}
      <h2 class="home-heading text-center">{{ text_related }}<span class="head-bottom"></span></h2>
      <div class="pro-nepr row thummargin">
        <div id="related" class="owl-carousel owl-theme">
        {% for product in products %}

Обычно перед кнопкой покупки, добавляем код:

{% if product.options %}
         {% for option in product.options %}
          {% if option.type == 'text' %}
            <div class="form-group{% if option.required %} required {% endif %}">
              <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label>
              <input type="text" name="option[{{ option.product_option_id }}]" value="{{ heading_title }}" placeholder="{{ option.name }}" id="input-option{{ option.product_option_id }}" class="form-control" />
            </div>
        {% endif %}
        {% endfor %}
{% endif %} 

Собственно все, теперь опции красиво отображаются в всех сопутствующих товарах...

Обратите внимание что в примере только опция вида текст:

          {% if option.type == 'text' %}
            <div class="form-group{% if option.required %} required {% endif %}">
              <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label>
              <input type="text" name="option[{{ option.product_option_id }}]" value="{{ heading_title }}" placeholder="{{ option.name }}" id="input-option{{ option.product_option_id }}" class="form-control" />
            </div>
        {% endif %}

но по аналогии можно и любую другую или же все виды опций вывести, мне же нужен был именно текст...

В общем как оказалось все легко и просто, но тут для меня и закончились радостные эмоции...

 

Дело в том что отобразить опции я то отобразила но при клике по кнопке купить происходит следующее:

Если в товаре опция не обязательная, то товар падает просто в корзину, но без выбранной опции, ну а если опция обязательная то соответственно бросает на страницу данного товара....

 

То есть опция не выбирается.

 

Я понимаю что проблема в javascript и самой кнопке, то есть нужно изменить кнопку ее вызов а так же добавить соответствующий код javascript , но вот какой код ума не приложу, нашла куча примеров в интернете но все они для 2 или 1.5 ветки, а для моей третьей версии ничего нету....

 

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

Змінено користувачем natalia8978
Надіслати
Поділитися на інших сайтах


  • 8 months later...
В 13.05.2020 в 00:25, natalia8978 сказал:

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

И так что нужно чтоб опции отображались в сопутствующих товарах:

1. контролер catalog/controller/product/product.php

Находим код:


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

и сразу над ним пишем так:


                $options = array();

                foreach ($this->model_catalog_product->getProductOptions($result['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->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'],
                        'product_option_value' => $product_option_value_data,
                        'option_id'            => $option['option_id'],
                        'name'                 => $option['name'],
                        'type'                 => $option['type'],
                        'value'                => $option['value'],
                        'required'             => $option['required']
                    );
                }	

2. Шаблон catalog/view/theme/default/template/product/product.twig

точный вывод зависит от шаблона но где то во внутрь после строчек:


      {% if products %}
      <h2 class="home-heading text-center">{{ text_related }}<span class="head-bottom"></span></h2>
      <div class="pro-nepr row thummargin">
        <div id="related" class="owl-carousel owl-theme">
        {% for product in products %}

Обычно перед кнопкой покупки, добавляем код:


{% if product.options %}
         {% for option in product.options %}
          {% if option.type == 'text' %}
            <div class="form-group{% if option.required %} required {% endif %}">
              <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label>
              <input type="text" name="option[{{ option.product_option_id }}]" value="{{ heading_title }}" placeholder="{{ option.name }}" id="input-option{{ option.product_option_id }}" class="form-control" />
            </div>
        {% endif %}
        {% endfor %}
{% endif %} 

Собственно все, теперь опции красиво отображаются в всех сопутствующих товарах...

Обратите внимание что в примере только опция вида текст:


          {% if option.type == 'text' %}
            <div class="form-group{% if option.required %} required {% endif %}">
              <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label>
              <input type="text" name="option[{{ option.product_option_id }}]" value="{{ heading_title }}" placeholder="{{ option.name }}" id="input-option{{ option.product_option_id }}" class="form-control" />
            </div>
        {% endif %}

но по аналогии можно и любую другую или же все виды опций вывести, мне же нужен был именно текст...

В общем как оказалось все легко и просто, но тут для меня и закончились радостные эмоции...

 

Дело в том что отобразить опции я то отобразила но при клике по кнопке купить происходит следующее:

Если в товаре опция не обязательная, то товар падает просто в корзину, но без выбранной опции, ну а если опция обязательная то соответственно бросает на страницу данного товара....

 

То есть опция не выбирается.

 

Я понимаю что проблема в javascript и самой кнопке, то есть нужно изменить кнопку ее вызов а так же добавить соответствующий код javascript , но вот какой код ума не приложу, нашла куча примеров в интернете но все они для 2 или 1.5 ветки, а для моей третьей версии ничего нету....

 

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

Наталья, добрый день!

Скажите, пожалуйста, у вас всё-таки получилось опции корректно вывести?

Сейчас эта проблема интересует... в интернете, даже в англоязычном почти нет информации... :)

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


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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

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

Important Information

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