Русская сборка OpenCart 4.1.0.0 - Релиз

Тема в разделе "Новости и объявления", создана пользователем Romans, 17 янв 2025.

  1. smagluk

    smagluk Пользователь

    Сообщения:
    42
    Симпатии:
    5
    Ошибка в OC 4.1.0.0. rs .
    В разделе Продажи-Заказы-Заказ при нажатии кнопки "Подтвердить" статус заказа изменяется на "аннулированный" всегда. Но перед этим добавляется еще один статус "Ожидание" . Статус заказа можно изменить только нижней кнопкой "Добавить" в историю .
    Вторая ошибка: Кнопка/ссылка "распечатать список доставки" на ней вообще всегда висит class="btn btn-info disabled". при любом статусе заказа. Если убрать disabled , то нормально открывается печатная форма заказа.
    Третья ошибка: Не закрываются модальные окна по кнопке "Подтвердить".

    Решение для первой ошибки.
    Найдите в файле catalog/model/checkout/order.php метод editOrder и закомментируйте строку:


    Код:
     // 1. Void the order first
            $this->addHistory($order_id, $this->config->get('config_void_status_id'));


    Она самая первая. Это удалит добавление строки с "Аннулирование".

    В файле admin/view/template/sale/order_info.twig найдите обработчик #button-confirm. Внутри него строка сбора данных. Измените её, включив элемент #input-order-status

    data: $('#form-customer, #form-cart, #form-shipping-address, #form-shipping-method, #form-payment-address, #form-payment-method, #collapse-order form, #form-comment, #input-order-id, #input-order-status').serialize(),

    Пропущен элемент #input-order-status



    Решение для второй ошибки.

    Шаг 1. Добавьте переменную shipping_code в метод info()
    Откройте файл admin/controller/sale/order.php и найдите метод info() (начинается примерно со строки 270). Внутри этого метода после блока, который обрабатывает способ доставки (там где заполняются shipping_method_name, shipping_method_code и т.д.), добавьте следующую строку:

    php
    // Shipping method
    if (!empty($order_info['shipping_method'])) {
    $data['shipping_method_name'] = $order_info['shipping_method']['name'];
    $data['shipping_method_code'] = $order_info['shipping_method']['code'];
    $data['shipping_method_cost'] = $order_info['shipping_method']['cost'];
    $data['shipping_method_tax_class_id'] = $order_info['shipping_method']['tax_class_id'];
    } else {
    $data['shipping_method_name'] = '';
    $data['shipping_method_code'] = '';
    $data['shipping_method_cost'] = '';
    $data['shipping_method_tax_class_id'] = 0;
    }
    // Добавляем переменную shipping_code для шаблона (используется для блокировки кнопки)
    $data['shipping_code'] = !empty($order_info['shipping_method']['code']) ? $order_info['shipping_method']['code'] : '';


    Или поменять admin/view/template/sale/order_info.twig
    <a href="{{ shipping }}" target="_blank" data-bs-toggle="tooltip" title="{{ button_shipping_print }}" class="btn btn-info{% if not shipping_method_code %} disabled{% endif %}"><i class="fa-solid fa-truck"></i></a>


    Там пропущено _method_ в shipping_method_code

    Решение для третьей ошибки.
    Необходимо добавить в файле admin/view/template/sale/order_info.twig в обработчики отправки форм для модальных окон. Для каждого из них в разделе if (json['success']) { добавьте строку закрытия соответствующего модального окна.
    $('#modal-shipping-address').modal('hide');


     
    Последнее редактирование: 30 мар 2026
    Ravilr нравится это.
  2. AlkatraZ

    AlkatraZ Новичок

    Сообщения:
    25
    Симпатии:
    14
    Свежие новости "из подземелья" :)

    Наконец то сдвинулась с мертвой точки разработка OpenCart 4.x.x.x
    Правда пока не знаю, какой номер версии будет, или 4.1.0.4 как планировалось, или (что логичнее) 4.2.0.0, но главное не это, а то, что работа идет и возможно в скором времени будет новая оф. версия с исправлениями, полностью совместимая с 4.1.0.3.

    Горячая тема с обсуждением: https://github.com/opencart/opencart/discussions/15300
    PR, который я по согласованию сейчас готовлю и который включает много фиксов и улучшений: https://github.com/opencart/opencart/pull/15315

    Надеюсь, в скором времени все таки выйдет стабильная версия.
     
  3. Ravilr

    Ravilr Специалист

    Сообщения:
    4.212
    Симпатии:
    1.450
    Хорошо подмечено :D
     
  4. AlkatraZ

    AlkatraZ Новичок

    Сообщения:
    25
    Симпатии:
    14
    Всем привет!
    Буду благодарен, если подскажете кто автор маленького трюка по запоминанию последней папки где находились в менеджере картинок админки. Хочу применить в OC++ и нужно кинуть ссылку на автора.

    admin/controller/common/filemanager.php

    PHP:
            // Запоминае последней директории
            
    if (!isset($this->request->get['directory'])
                && !isset(
    $this->request->get['page'])
                && isset(
    $this->session->data['start_file_manager'])) {
                
    $this->request->get['directory'] = $this->session->data['directory_file_manager'] ?? null;
                
    $this->request->get['page'] = $this->session->data['page_file_manager'] ?? null;
            } else {
                
    $this->session->data['directory_file_manager'] = $this->request->get['directory'] ?? null;
                
    $this->session->data['page_file_manager'] = $this->request->get['page'] ?? null;
            }
     
  5. Ravilr

    Ravilr Специалист

    Сообщения:
    4.212
    Симпатии:
    1.450
    кто то из авторов русской сборки :) Но если укажешь *russia*..... сразу получите бан на гитхаб !! Так что берите как есть, если войдет в оригинал, меньше работы по адаптации будет.
     
  6. AlkatraZ

    AlkatraZ Новичок

    Сообщения:
    25
    Симпатии:
    14
    Не думаю...
    У OpenCart один из модераторов из Москвы, в анкете указано, никто его не банит.
     
  7. smagluk

    smagluk Пользователь

    Сообщения:
    42
    Симпатии:
    5
    Заголовок: Баг с валидацией имени и фамилии на кириллице в OpenCart 4.1.0.0

    Всем привет!

    Хочу поделиться найденным багом в OpenCart версии 4.1.0.0. При регистрации или редактировании профиля, если использовать кириллицу в полях «Имя» и «Фамилия», система некорректно вычисляет длину строки, что может приводить к ошибкам валидации.

    Причина:Проверка длины выполняется стандартной PHP-функцией strlen(), которая считает байты, а не символы. Для кириллицы (в кодировке UTF-8) один символ может занимать 2 байта, из-за чего длина строки определяется неверно.

    Решение:Необходимо заменить функцию strlen() на mb_strlen() с указанием кодировки.

    Что делать:Откройте файл: system/helper/validation.phpНайдите функцию oc_validate_length и замените строку:

    return strlen(trim($string)) >= $minimum && strlen(trim($string)) <= $maximum;
    на
    return mb_strlen(trim($string),'UTF-8') >= $minimum && strlen(trim($string)) <= $maximum;
     
    Ravilr нравится это.