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

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


 Погделиться

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

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

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


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

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

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

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

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

Войти

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

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

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

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

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