Opencart 3 получить вариант продукта в представлении «Последний продукт»

Я изменяю тему OpenCart по умолчанию и хочу получить параметры продукта на последней странице просмотра продукта.

Я скопировал этот код со страницы просмотра продукта:

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

 {% for option in 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>
{% endfor %}
{% endif %}

Я скопировал этот код в catalog/controller/extention/module/latest.php

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

    foreach ($this->model_catalog_product->getProductOptions($this->request->get['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']
                );
            }
        }

        $data['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']
        );
    }

и я получаю

 Undefined index: product_id in F:\xampp\htdocs\*\catalog\controller\extension\module\latest.php

В параметре foreach

$this->request->get['product_id'])

Вышеуказанный product_id это Undefined. Есть предложения?


person Community    schedule 17.12.2017    source источник
comment
вам нужно вызвать модель, которая извлекает продукт, как это делается в контроллере продукта.   -  person imox    schedule 17.12.2017
comment
@imox я сделал это, приятель, вот откуда проблемы с неопределенным индексом   -  person    schedule 17.12.2017
comment
может помочь вам, не видя помощника кода   -  person imox    schedule 18.12.2017
comment
@imox я отредактировал свой пост и включил код, который я скопировал в модель! Если это может помочь вам!   -  person    schedule 18.12.2017
comment
попробуйте это как URL: yoursite/latest.php&product_id=231 (идентификатор продукта, который действительно существует) и посмотрите результат   -  person imox    schedule 18.12.2017
comment
@imox Последние товары появляются только на главной странице магазина! Вот где я хочу добавить опцию с цветами каждого продукта.   -  person    schedule 18.12.2017
comment
Вы хотите показать только варианты? Или опции должны быть доступны для выбора?   -  person DigitCart    schedule 18.12.2017
comment
Я изменяю тему Opencart по умолчанию. Надеюсь, вы работаете над копией?   -  person Paul Feakins    schedule 18.12.2017
comment
@digicart я хочу показать только варианты, чтобы пользователь мог видеть цвета продукта!   -  person    schedule 18.12.2017
comment
@paulfeakins я работаю над темой по умолчанию на локальном хосте, есть ли проблема, что я не использую копию?   -  person    schedule 18.12.2017
comment
Да, вы никогда не должны изменять саму тему по умолчанию, вы должны скопировать и переименовать ее и работать с копией темы.   -  person Paul Feakins    schedule 19.12.2017


Ответы (1)


Вот страницы, которые вы должны заменить

каталог\представление\тема\по умолчанию\шаблон\расширение\модуль\latest.twig

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

каталог\контроллер\расширение\модуль\latest.php

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

        $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/latest', $data);
        }
    }
}

Результат

person Prasant Kumar    schedule 18.12.2017
comment
Я сделал изменения, которые вы предложили! Теперь я не получаю ошибку Undefined, но все еще в последнем модуле интерфейса я ничего не вижу! И я не получаю никаких ошибок, какие-либо мысли? - person ; 18.12.2017
comment
Привет, я снова обновил файл catalog\view\theme\default\template\extension\module\latest.twig. Пожалуйста, скопируйте и замените снова. Спасибо - person Prasant Kumar; 18.12.2017
comment
Я скопировал ваши изменения, но в интерфейсе все равно ничего нет! - person ; 18.12.2017
comment
Поскольку вы изменили файл .twig, вам необходимо обновить тему в бэкэнде, войдя в систему с правами администратора. Затем в правом верхнем углу страницы панели инструментов есть значок настройки. Нажмите на нее, откроется всплывающее окно.. Вы должны нажать кнопку обновления там... и затем проверить на передней странице.. Спасибо - person Prasant Kumar; 19.12.2017
comment
@Prajant jena кеш и т. д. отключены, приятель! Я пытался обновить его, но никаких изменений! - person ; 19.12.2017
comment
Я уже использовал этот код на своем локальном хосте и получил результат. Пожалуйста, отправьте данные аутентификации администратора вашего сайта, я проверю их. - person Prasant Kumar; 19.12.2017
comment
Я добавил изображение результата последнего модуля, пожалуйста, проверьте. Спасибо - person Prasant Kumar; 19.12.2017
comment
Я ведь работаю! Сначала не знаю, в чем была проблема, но теперь все в порядке! Спасибо большое дружище ты супер - person ; 20.12.2017
comment
есть ли способ сделать то же самое для результатов поиска и категорий? Я имею в виду просто получить вариант продукта в результатах поиска и когда пользователь нажимает на категорию? - person ; 20.12.2017
comment
Да Тот же код, который вы можете добавить в контроллер поиска и категорий и страницы просмотра. Спасибо - person Prasant Kumar; 22.12.2017