• Как на OpenCart 2.3 сделать рейтинг товаров как на Wildberries?

    lazuren
    @lazuren
    Смог смастерить вот это (OpenCart 3.0.3.2) :
    В контроллере catalog/controller/product/product.php
    После строки
    $data['rating'] = (int)$product_info['rating'];
    Вставляете
    // Expanded rating
                $this->load->model('catalog/review');
                $review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);
                $estimations = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id']);
    
                $one = 0;
                $two = 0;
                $three = 0;
                $four = 0;
                $five = 0;
                $rating_sum = 0;
    
                foreach ($estimations as $estimation){
                    ($estimation['rating'] == '1') && $one++;
                    ($estimation['rating'] == '2') && $two++;
                    ($estimation['rating'] == '3') && $three++;
                    ($estimation['rating'] == '4') && $four++;
                    ($estimation['rating'] == '5') && $five++;
    
                    $rating_sum += $estimation['rating'];
                }
    
                $data['expanded_rating'][] = array(
                    'one' => round((100/$review_total) * $one),
                    'two' => round((100/$review_total) * $two),
                    'three' => round((100/$review_total) * $three),
                    'four' => round((100/$review_total) * $four),
                    'five' => round((100/$review_total) * $five),
                    'rating' => round($rating_sum / $review_total, 1),
                    'total' => $review_total
                );

    Далее в файле
    catalog/view/theme/default/template/product/product.twig

    после строки
    <p>{% for i in 1..5 %}
                  {% if rating < i %}<span class="fa fa-stack"><i class="fa fa-star-o fa-stack-1x"></i></span>{% else %}<span class="fa fa-stack"><i class="fa fa-star fa-stack-1x"></i><i class="fa fa-star-o fa-stack-1x"></i></span>{% endif %}
                  {% endfor %} <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;">{{ reviews }}</a> / <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;">{{ text_write }}</a></p>
                <hr>

    Вставляете
    {% for rating in expanded_rating %}
                      <p>1 - {{ rating.one }}%</p>
                      <p>2 - {{ rating.two }}%</p>
                      <p>3 - {{ rating.three }}%</p>
                      <p>4 - {{ rating.four }}%</p>
                      <p>5 - {{ rating.five }}%</p>
                      <h3>Общий рейтинг - {{ rating.rating }}</h3>
                      <p>На основании {{ rating.total }} отзывов</p>
                  {% endfor %}
                  <hr>


    Получиться должно так
    5e98c4b75cc24861087497.png
    Ответ написан
    6 комментариев
  • OpenCart проверка страниц является ли она product?

    lazuren
    @lazuren
    А вот такая история работает даже с включенным ЧПУ
    Контроллер catalog/controller/common/header.php
    if (isset($this->request->get['product_id'])){
                $data['is_product_page'] =  'Страница продукта с ID - ' . $this->request->get['product_id'];
            }

    Вид
    catalog/view/theme/default/template/common/header.(twig/tpl)

    Выводите по ключу - is_product_page
    Ответ написан
    Комментировать
  • Как добавить Custom Field для категории и проверять вывод, Opencart?

    lazuren
    @lazuren
    Стандартными средствами OpenCart этого сделать нельзя. Но если самостоятельно, то я вижу это так.
    1. В таблицу category в базе данных добавляете новое поле
    2. Получаете это поле в админке, при сохранении записываете в него 0 или 1
    3. При выводе на главную страницу фильтруете если 1 показывать на главной, если 0 нет.
    Ответ написан
    2 комментария
  • Как достать динамическую информацию из массива?

    lazuren
    @lazuren
    Судя по всему это не массив, а объект.
    Каждый раз когда он создается или обновляется выводить значение по ключу.
    Object.member_id где Object - это название вашего объекта "массива" .
    Ответ написан
    1 комментарий
  • Как убрать index.php?route=common/home с главной? Opencart 3.0.1.0?

    lazuren
    @lazuren
    Вот этот бесплатный модификатор решает эту проблему
    Ответ написан
    Комментировать
  • Где можно редактировать обязательные поля у продукта?

    lazuren
    @lazuren
    для продукта есть обязательное поле Артикул.


    Изначально в OpenCart обязательное поле не Артикул, а Модель.

    Смотрел в admin/controller но там ничего!


    В функции validateForm() из контроллера admin/controller/catalog/product.php закомментируйте эти строки:
    if ((utf8_strlen($this->request->post['model']) < 1) || (utf8_strlen($this->request->post['model']) > 64)) {
    			$this->error['model'] = $this->language->get('error_model');
    		}


    А чтобы удалить красную звездочку рядом с полем, нужно в файле admin/view/template/catalog/recurring_form.twig
    Удалить класс required.
    <div class="form-group required">
                    <label class="col-sm-2 control-label" for="input-model">{{ entry_model }}</label>
                    <div class="col-sm-10">
                      <input type="text" name="model" value="{{ model }}" placeholder="{{ entry_model }}" id="input-model" class="form-control"/>
                      {% if error_model %}
                        <div class="text-danger">{{ error_model }}</div>
                      {% endif %}</div>
                  </div>
    Ответ написан
    Комментировать
  • Как задать свои Url в opencart (ocstore 3)?

    lazuren
    @lazuren
    1. Включаете SEO URL
    2. Указываете SEO URL для категории на нужном вам языке
    3. "Включаете" .htaccess
    4. Дизайн->SEO URL Указываете язык который стоит в системе по умолчанию


    Должно работать.
    Ответ написан
    Комментировать
  • Вывод информации про вес товара opencart 2x?

    lazuren
    @lazuren
    Попробуй "жестко" привести к нужному типу (float)$option_weight
    'weight'   => $this->weight->format(($product_info['weight'] + (float)$option_weight) * $product['quantity'], $product_info['weight_class_id'], $this->language->get('decimal_point'), $this->language->get('thousand_point'))
    Ответ написан
    Комментировать
  • Как называется поле в БД?

    lazuren
    @lazuren
    Пока заказ не оформлен стоимость доставки хранится в сессии, но после оформления сохраняется в таблице oc_order_total
    Ответ написан
    Комментировать
  • Как можно получить способ доставки в order_list?

    lazuren
    @lazuren
    В методе index контроллера order.php после строк -
    $data['orders'][] = array(
    				'order_id'   => $result['order_id'],
    				'name'       => $result['firstname'] . ' ' . $result['lastname'],
    				'status'     => $result['status'],
    				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
    				'products'   => ($product_total + $voucher_total),
    				'total'      => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
    				'view'       => $this->url->link('account/order/info', 'order_id=' . $result['order_id'], true),
    			);

    Вставляете -
    $totals = $this->model_account_order->getOrderTotals($result['order_id']);
    
                foreach ($totals as $total) {
                    if($total['code'] == 'shipping'){
                        $data['shipping'] = array(
                            'title' => $total['title'],
                            'value'  => $total['value'],
                        );
                    }
                }

    После этого в файле вида order_list получаете массив shipping с ключами title (название способа доставки) и value (сумма доставки)
    Ответ написан
    1 комментарий
  • Opencart, почему в каталоге и в похожих товаров цена имеет дополнительные 2 нуля?

    lazuren
    @lazuren
    Зайдите Система->Локализация->Валюта далее выбираете вашу валюту и в поле Количество знаков после запятой ставите 2
    Ответ написан
    Комментировать
  • Как скопировать меню и строку поиска в opencart с одной страницы на другую?

    lazuren
    @lazuren
    Вам нужно в контроллер catalog/controller/common/home.php перед
    $this->response->setOutput($this->load->view('common/home', $data));
    вставить вот этот код:
    $data['search'] = $this->load->controller('common/search');
    $data['menu'] = $this->load->controller('common/menu');
    Ответ написан
    3 комментария
  • Как для формы в контактах добавить загрузку файла, Opencart?

    lazuren
    @lazuren
    Не знаю какая у вас версия OpenCart, но в третей версии можно сделать так.
    в фале
    catalog/view/theme/default/template/information/contact.twig

    в нужном месте добавляете это код
    <div class="form-group{% if option.required %} required {% endif %}">
                <label class="control-label">{{ option.name }}</label>
                <button type="button" id="button-upload{{ option.product_option_id }}" data-loading-text="{{ text_loading }}" class="btn btn-default btn-block"><i class="fa fa-upload"></i> {{ button_upload }}</button>
                <input type="hidden" name="option[{{ option.product_option_id }}]" value="" id="input-option{{ option.product_option_id }}" />
              </div>

    JS в конце файла в теге <script></script>
    $('button[id^=\'button-upload\']').on('click', function() {
        var node = this;
    
        $('#form-upload').remove();
    
        $('body').prepend('<form enctype="multipart/form-data" id="form-upload" style="display: none;"><input type="file" name="file" /></form>');
    
        $('#form-upload input[name=\'file\']').trigger('click');
    
        if (typeof timer != 'undefined') {
          clearInterval(timer);
        }
    
        timer = setInterval(function() {
          if ($('#form-upload input[name=\'file\']').val() != '') {
            clearInterval(timer);
    
            $.ajax({
              url: 'index.php?route=tool/upload',
              type: 'post',
              dataType: 'json',
              data: new FormData($('#form-upload')[0]),
              cache: false,
              contentType: false,
              processData: false,
              beforeSend: function() {
                $(node).button('loading');
              },
              complete: function() {
                $(node).button('reset');
              },
              success: function(json) {
                $('.text-danger').remove();
    
                if (json['error']) {
                  $(node).parent().find('input').after('<div class="text-danger">' + json['error'] + '</div>');
                }
    
                if (json['success']) {
                  alert(json['success']);
    
                  $(node).parent().find('input').val(json['code']);
                }
              },
              error: function(xhr, ajaxOptions, thrownError) {
                alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
              }
            });
          }
        }, 500);
      });

    Все загруженные файлы можно будет найти в Система->Обслуживание->Внешние загрузки
    Важно: При использовании данного способа загруженные файлы будут обезличены и файл не прикрепится к сообщению из формы, а загрузится сразу.
    Ответ написан
    Комментировать
  • Белая страница при загрузке сайта OpenCart 3.0?

    lazuren
    @lazuren
    Вот тема с решением такой проблемы, надеюсь поможет!
    Ответ написан
    1 комментарий
  • Как авторизоваться по API?

    lazuren
    @lazuren Автор вопроса
    Я сам разобрался с данным вопросом. HTTP Заголовки запроссов и ответов должны содержать заголовок withCredentials
    Ответ написан
    Комментировать
  • Как в Opencart изменить текст который не перевелся на русский?

    lazuren
    @lazuren
    В админке зайдите в Система->Локализация->Возвраты->Причины возврата и переименуйте либо создайте актуальные причины для вашего магазина.
    Ответ написан
    Комментировать
  • Не обновляются товары в корзине, как решить?

    lazuren
    @lazuren
    1. Данные корзины хранятся в сессии, по этому вряд ли связано кешем.
    2. Загляните в файл catalog/controller/checkout/success.php есть ли там вот эти строчки:
    Код очистки сессии

    if (isset($this->session->data['order_id'])) {
    			$this->cart->clear();
    
    			unset($this->session->data['shipping_method']);
    			unset($this->session->data['shipping_methods']);
    			unset($this->session->data['payment_method']);
    			unset($this->session->data['payment_methods']);
    			unset($this->session->data['guest']);
    			unset($this->session->data['comment']);
    			unset($this->session->data['order_id']);
    			unset($this->session->data['coupon']);
    			unset($this->session->data['reward']);
    			unset($this->session->data['voucher']);
    			unset($this->session->data['vouchers']);
    			unset($this->session->data['totals']);
    		}


    3. И в целом, я думаю при создании функционала вашего сайта были существенно изменены файлы контроллеров движка, не всегда до конца понимая что за что отвечает. Просмотрите оригинальные файлы, возможно вы что-то упустили.
    Ответ написан
    1 комментарий
  • Как менять текст в ocStore?

    lazuren
    @lazuren
    Загляните вот в этот файл /catalog/language/ru-ru/common/footer.php
    Ответ написан
    3 комментария
  • Как изменить стиль модуля смены языков в OpenCart?

    lazuren
    @lazuren
    Я не знаю какая у вас тема, но в стандартной используется компонент bootstrap Dropdown menu.
    Попробуйте стилизовать их с помощью селектора :nth-child()
    Ответ написан
    Комментировать
  • Как можно удалить модуль из шаблона Journal2 в OpenCart v3?

    lazuren
    @lazuren
    Если он плотно интегрирован в тему, то сложно будет выпилить, а если как отдельный модуль, то смотрите скрин как его найти 5edd16f5d6242893261282.png

    Удаляете все файлы с таким названием, так же на забудьте удалить модификатор (если есть)

    Важно! Перед началом работы сделайте полный бэкап сайта и базы!
    Ответ написан
    2 комментария