Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


Recommended Posts

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

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

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

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


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

Link to comment
Share on other sites


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

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

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

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

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


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

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

Link to comment
Share on other sites


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

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

 

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

Link to comment
Share on other sites

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

 

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

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

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

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

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

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

Link to comment
Share on other sites


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

<?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

 

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

Link to comment
Share on other sites


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

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

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

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

Link to comment
Share on other sites


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

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

 

текст:

Но я уже это 

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

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

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

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

Link to comment
Share on other sites


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 %}

 

Link to comment
Share on other sites

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

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

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 нужно прописать чтоб опции выбирались....?

Edited by natalia8978
Link to comment
Share on other sites


  • 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
Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.