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

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

  1. Ravilr

    Ravilr Специалист

    Сообщения:
    4.221
    Симпатии:
    1.451
  2. art994

    art994 Новичок

    Сообщения:
    26
    Симпатии:
    0
    получается у меня в сборке будет встроена проверка через этот сервис?
     
  3. Ravilr

    Ravilr Специалист

    Сообщения:
    4.221
    Симпатии:
    1.451
    Нет. Это просто статья, чтобы не устанавливали все подряд.
     
  4. art994

    art994 Новичок

    Сообщения:
    26
    Симпатии:
    0
    я думаю устанавливают варез из за того, что хочется начать своё дело. а средств нет, потом покупают нормально.
     
  5. art994

    art994 Новичок

    Сообщения:
    26
    Симпатии:
    0
    я последний раз сидел на ocstore 2.3 был очень хороший. на 4 версии что то очень мало решений, вообще всё плохо?
     
  6. Ravilr

    Ravilr Специалист

    Сообщения:
    4.221
    Симпатии:
    1.451
    Не все совсем плохо, много решение на opencart.com но все же намного меньше чем для предыдущих версий конечно.
     
  7. art994

    art994 Новичок

    Сообщения:
    26
    Симпатии:
    0
    а какая сейчас рекомендуемая версия? чтобы нормально все работало
     
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    4.221
    Симпатии:
    1.451
    От 3.0.3.8 до 3.0.4.1 в зависимости от шаблона, модулей итд.
     
    art994 нравится это.
  9. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    879
    Симпатии:
    241
    Возможно уже кто то писал!
     

    Вложения:

    Ravilr нравится это.
  10. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.535
    Симпатии:
    246
    А что не так :)
     
  11. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    879
    Симпатии:
    241
    Точка лишняя. Синтаксическая ошибка.
     
  12. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    879
    Симпатии:
    241
    Хотя конечно не удивлюсь если в контексте опенкарт это не баг а фитча ))))
     
  13. vrndorog

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

    Сообщения:
    36
    Симпатии:
    5
    Здравствуйте. файл - catalog/checkout/register.php строка 101 (
    $data['shipping_custom_field'] = $this->session->data['shipping_address']['custom_field'];) Из-за этого кастомные поля пустые при загрузке страницы, хотя эти значения хранятся в сессии).
    Было бы правильно - $data['shipping_custom_field'] = $this->session->data['shipping_address']['custom_field']['address'];
    Или в Twig вместо
    shipping_custom_field[custom_field.custom_field_id]
    сделать
    shipping_custom_field.address[custom_field.custom_field_id]
    С другими кастомными полями, возможно, также.
    Если не ошибаюсь, эта ошибка из версии в версию давно качует.
     
  14. Ravilr

    Ravilr Специалист

    Сообщения:
    4.221
    Симпатии:
    1.451
    Если качует, значит не ошибка а фича :) Пока у Даниеля упор на орфографию, французский язык, php doc , но не исправление ошибок и выпуск стабильной версии. :(
    Тут нужно все проверять, если так, то можно и в русской сборке исправить, но пока запрос на кастомные поля слабый, и на 4х тоже.
     
  15. vrndorog

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

    Сообщения:
    36
    Симпатии:
    5
    Что касается гостевого заказа, то все кастомные поля обрабатываются одинаково: их значения записываются в сессию, но не выводятся. Может в этом и причина того, что "пока запрос на кастомные поля слабый"
     
  16. World-Web

    World-Web Пользователь

    Сообщения:
    58
    Симпатии:
    11
    Возникла проблема с формированием SEO ЧПУ.

    Когда в таблицу seo_url "Категория" занесена позже карточки продукта (или когда редактируем категорию и сохраняем). В таблице seo_url создаются новые записи категории и они уже становятся ниже записей карточек товара.

    \catalog\controller\startup\seo_url_ru.php файл формирует ссылки для карточки товара в Категориях.
    Получается что ссылка формируется после данных манипуляций "product/category", а должна "category/product". Сортировка в данном файле идет по "sort_order".
    Код:
    $sort_order = [];
    foreach ($paths as $key => $value) {
         $sort_order[$key] = $value['sort_order'];
    }
    
    array_multisort($sort_order, SORT_ASC, $paths);
    
    Строчка:
    Код:
    $sort_order[$key] = $value['sort_order']; - сортирует по "sort_order".
    Если поменять на сортировку "key"
    Код:
    $sort_order[$key] = $value['key']; - сортирует по "key".
    Сортировка уже идет по алфавиту в данном случае:
    path - это категории
    product_id - это карточки товара

    Это вопрос правильного формирования ссылок товара в Категориях исправляет. Но не решает проблемы, если в дальнейшем поменяется key -> path на другое значение по сортировке алфавита после "product_id" - например "rank" сортировка пойдет тогда иначе:

    product_id - это карточки товара
    rank - это категории

    Для этого решения тогда лучше прописать правило сортировки формирования ссылок:
    Код:
    private const SEO_URL_PRIORITIES = [
         'path' => 1,
         'manufacturer_id' => 2,
         'product_id' => 3
    ];
    
    А также изменить код сортировки:
    Код:
    $sort_order = [];
    foreach ($paths as $key => $value) {
         $sort_order[$key] = self::SEO_URL_PRIORITIES[$value['key']] ?? PHP_INT_MAX;
    }
    
    array_multisort($sort_order, SORT_ASC, $paths);
    
    Полный код как должен выглядеть:
    Код:
        /**
         * Rewrite
         *
         * @param string $link
         *
         * @return string
         */
        private const SEO_URL_PRIORITIES = [
         'path' => 1,
         'manufacturer_id' => 2,
         'product_id' => 3
        ];  
        public function rewrite(string $link): string {
            $url_info = parse_url(str_replace('&', '&', $link));
    
            // Создайте URL-адрес
            $url = '';
    
            if ($url_info['scheme']) {
                $url .= $url_info['scheme'];
            }
    
            $url .= '://';
    
            if ($url_info['host']) {
                $url .= $url_info['host'];
            }
    
            if (isset($url_info['port'])) {
                $url .= ':' . $url_info['port'];
            }
    
            parse_str($url_info['query'], $query);
    
            // Начните изменять URL-запрос на путь
            $paths = [];
    
            // Разобрать запрос на отдельные части
            $parts = explode('&', $url_info['query']);
    
            foreach ($parts as $part) {
                $pair = explode('=', $part);
    
                if (isset($pair[0])) {
                    $key = (string)$pair[0];
                }
    
                if (isset($pair[1])) {
                    $value = (string)$pair[1];
                } else {
                    $value = '';
                }
    
                $index = $key . '=' . $value;
    
                if (!isset($this->data[$index])) {
                    $this->data[$index] = $this->model_design_seo_url->getSeoUrlByKeyValue((string)$key, (string)$value);
                }
    
                if ($this->data[$index]) {
                    $paths[] = $this->data[$index];
    
                    unset($query[$key]);
                }
            }
           
            $sort_order = [];
            foreach ($paths as $key => $value) {
                $sort_order[$key] = self::SEO_URL_PRIORITIES[$value['key']] ?? PHP_INT_MAX;
            }
    
            array_multisort($sort_order, SORT_ASC, $paths);
    
            // Построить путь
            $url .= str_replace('/index.php', '', $url_info['path']);
    
    
            // Исключение из урль чтобы небыло пустот и / .
            if ($this->short_routes) {
                $excludedVal = ['ru-ru', 'common/home', 'product/product', 'product/category', 'product/manufacturer.info', 'information/information'];
            } else {
                $excludedVal = ['ru-ru', 'common/home'];
            }
    
            foreach ($paths as $result) {
                if (!in_array($result['value'], $excludedVal, true)) {
                    $url .= '/' . $result['keyword'];
                }
            }
    
            // На случай когда приходит роут без чпу, домен закрываем слешем
            if (count($paths) === 1) $url .= '/';
    
    
            // Перестройте URL-запрос
            if ($query) {
                $url .= '?' . str_replace(['%2F'], ['/'], http_build_query($query));
            }
    
            return $url;
        }
     
    Последнее редактирование: 19 июн 2025
  17. Ravilr

    Ravilr Специалист

    Сообщения:
    4.221
    Симпатии:
    1.451
    Так и должно быть. В 4х для товаров идет сначала префикс роута а потом все остальное. Но то что выше тоже не верно. На основе порядка сортировки все работает, просто когда создается товар или категория то порядок сортировки ставится по умолчанию 0 для seo_url. Посмотрите в редакторе Дизайн - SEO URL

    Если нужно изменить порядок, то нужно категории создавать порядком сортировки например -2 , тогда название категории встанет в начало.

    А по хорошему должен быть маневр, товары должны создаваться с порядком 2 например, а категории 0. Тогда можно будет роут product поставить как 1 и будет как хотите.
     
    World-Web нравится это.
  18. World-Web

    World-Web Пользователь

    Сообщения:
    58
    Симпатии:
    11
    Когда создается товар или категория то порядок сортировки ставится по умолчанию 0 в столбец sort_order для таблицы seo_url.
    В админ панели нельзя указать какой порядок указывать в данный столбец. Что вызывает очень много неудобств. Заходить в Дизайн -> SEO URL и править "0" на "-2".
    Вариант да рабочий, но не удобный для обычных пользователей.

    А при последующем редактировании и сохранении категории значения опять возвращаются на "0".
     
    Последнее редактирование: 19 июн 2025
  19. World-Web

    World-Web Пользователь

    Сообщения:
    58
    Симпатии:
    11
    У кого сбиваются Категории в таблице seo_url вот простое решение.
    При добавлении новых категорий запись в таблице seo_url вносится нормально столбцы "keyword" и "value":
    Создали.png
    Но стоит только в созданной категории нажать сохранить кнопку (например внесли изменения в категорию). Все данные в категориях сбиваются, а именно "keyword" и "value":
    После редактирования.png Соответственно ссылки перестают правильно выполнять свою функцию.

    Простое и быстрое решение это заменить два файла в админ папке (если папку admin переименовали, то соответственно в ту папку которую переименовали):
    \admin\controller\catalog\category.php
    \admin\model\catalog\category.php
    zip файл данных файлов прилагаю.

    P.S. Данные файлы взяты из OpenCart 4.1.0.3 скаченные с сайта opencart.com

    После того как заменили файлы следует удалить испорченные записи в таблице seo_url в MySQL, или через админ панель в "Дизайн->SEO URL":
    seo_url.png
    После того как удалили: Зайдите в каждую Категорию через админ панель и просто нажмите "Сохранить". Сформируется правильная запись в таблице seo_url. При следующем сохранении категории записи в таблицу seo_url будут корректно записываться.

    Кто собирается пользоваться данной версией OpenCart 4.1.0.0 вот быстрый путь решения.
     

    Вложения:

    • admin.zip
      Размер файла:
      8,2 КБ
      Просмотров:
      10
    PMax и Ravilr нравится это.
  20. Ravilr

    Ravilr Специалист

    Сообщения:
    4.221
    Симпатии:
    1.451
    А Вы не поторопились? В итоге с каким порядком сортировки создаются записи seourl ? По коду я не вижу, чтобы порядок сортировки изменился или задавался явно.

    А для тех кому не нравится (как и мне) такой вид ссылок, то можно включить в настройках сокращенный вид и будет без product