Как работает автоматическое определение языка в Опенкарт

- Posted in Opencart by

Для начала давайте разберёмся, как это всё устроено в браузерах и этих наших интернетах.

  1. Человек в настройках браузера обычно имеет возможность указать один или несколько языков, которые он понимает и предпочитает. Ищите в настройках что-то вроде "Preferred languages" (предпочитаемые языки). В браузерах попроще, с прицелом на чайников и минимумом настроек, локаль может браться системная или быть вшита в локализованный софт (без возможности настройки пользователем).

  2. Браузер отдаёт эту информацию сайтам в HTTP-заголовках Accept-Language при всех запросах. Этим он сообщает сайтам: если есть контент на одном из языков из моего списка - дайте мне его! (Если нет для первого - давайте для следующего по списку; если вообще ничего нет - давайте что там у вас есть по умолчанию). Варианты, которые встречаются у посетителей ваших сайтов, можно найти в Google Analytics, Яндекс.Вебмастер, Awstats, Piwik и других подобных системах веб-аналитики. Что отдаёт ваш браузер сайтам, вы можете увидеть в инструментах разработчика, посмотрев на HTTP-заголовки.

  3. Сайт может анализировать или игнорировать эти заголовки, реагируя на указанные предпочтения или нет.

Теперь Опенкарт. Мне кажется, 9 из 10 пользователей этого движка понятия не имеют, что это за строчка в описании языка в админке со всякими ru, ru-ru, uk, uk_UA и т.п. Теперь догадываетесь?

Это - простой список локалей, которые браузер может передать в заголовках. И на которые мы имеем возможность среагировать (админ магазина, движок). Если у нового пользователя опенкарт язык сайта ещё не выбран (и не записан в куках), то Опенкарт смотрит на HTTP-заголовки Accept-Language. И сравнивает их с тем, что мы понаписали в админке для русского, украинского и других языков.

Поскольку браузеры обычно дают выбирать языки и локали из списка, а не прописывать их вручную, то там чаще всего будет код языка или языка и региона. Например: ru, ru-ru, ru-RU, ru_ru, ru_RU. В Украине бывает uk (украинский язык), ru_UA, uk_UA. Ну и ru-UA, uk-UA до кучи.

Обычно локаль указывается с подчёркиванием "_", но жёстких стандартов по этому поводу кажется нет. И нередко можно встретить минус, тире или как там его правильно называть в типографике: "-". То же самое касается регистра символов в коде страны. Надо прописать все возможные комбинации, так как Опенкарт не приводит их к нижнему регистру при сравнении (смотрел на версии 2.1.0.2 - думаю, в остальных так же).

Итого: у вас в опенкарт админке в настройке языка должен быть список языков/локалей, которые могут запросить браузеры ваших посетителей (смотрите логи и аналитику и подстраивайтесь под своих посетителей). И этой настройкой вы определяете, какой язык им отдать при первом посещении вашего сайта ("угадать" его предпочтения).

Надеюсь, вам стала понятней эта внутренняя кухня автоматического определения языка.

И ещё очень хочется верить, что люди перестанут творить дурдом с выдачей языка по местоположению (GeoIP). Потому что француз, понимающий французский и английский (что указано в его браузерах на его ноутбуке) и который путешествует по миру, совсем не обрадуется, если ему будут выдавать контент на языке страны интернет-кафе.

Шаблоны в Опенкарт 2.3 переводят с PHP на движок Twig

- Posted in Opencart by

Начиная с версии 2.3, Опенкарт переключит стандартный шаблонный движок с PHP на формат Twig-препроцессора. Обычный PHP обещают тоже оставить: если у файлов шаблонов расширение .tpl - используется PHP для рендеринга, если .twig - то шаблонный движок Twig.

Про версию 2.2

- Posted in Opencart by

Мы начали адаптировать модули под эту версию, но стали натыкаться на массу изменений, которые теперь возвращаются авторами опенкарт назад, на исходные позиции. Мы боремся-боремся с нововведением и глюками, а потом заглядываем в репозиторий и видим, что там это тоже обнаружили и вернули как было в 2.1.x... То есть это какая-то экспериментальная версия-выброс, решения из которой дальше не пойдут. В итоге мы решили заморозить все работы по адаптации для 2.2 в надежде дождаться нормальной версии.

Первые обзоры Opencart 2.2

- Posted in Opencart by

Оперативненько! Появились первые годные обзоры Opencart v2.2.0.0:

С версии 2.2 опенкарт будет использовать Composer

- Posted in Opencart by

Просматривал лог коммитов и случайно заметил появление и потерю папки "vendor".

Штоооооооооо? Composer в опенкарте????

И таки да, в корне есть composer.json:

{
    "name": "opencart/opencart",
    "type": "project",
    "description": "OpenCart",
    "keywords": ["opencart", "ecommerce", "framework", "opensource"],
    "homepage": "http://www.opencart.com",
    "license": "GPL-3.0+",
    "require": {
        "cardinity/cardinity-sdk-php": "^1.0",
        "braintree/braintree_php" : "3.2.0",
        "leafo/scssphp": "0.0.12",
        "php": ">=5.4.0"
    }
}

В install.txt:

COMPOSER OR NOT TO COMPOSER From version 2.2 composer has been added to aid developers who want to use composer libraries. 2 versions of OpenCart will become available, one compiled and one non-compiled (composer.json only - no files in vendor folder). We STRONGLY advise leaving the vendor folder outside of the webroot - so files cannot be accessed directly. Composer installing is extremely simple - https://getcomposer.org

Что в переводе на русский значит: начиная с версии 2.2, в опенкарт добавлен Composer для тех, кто понимает. Будет доступно 2 версии Опенкарт: одна скомпиленная (со всеми нужными либами), другая - только с composer.json (для тех, кто пользуется composer-ом).

Поразительно.

James Allsup делает своё дело. Осталось отстранить Даниэля от разработки, и будет всем счастье.

Отправка копий вопроса с сайта всем админам магазина

- Posted in Opencart by

Оказалось, в Opencart 2 на странице обратной связи (information/contact) письмо отсылается только на главный email (владельцу магазина). Если какие-то адреса для дополнительных оповещений в админке заполнены - здесь они всё равно игнорируются.

Это неудивительно, поскольку в опенкарт функционал дублируется. Здесь - тупо забыли про дополнительные адреса.

Чтобы исправить, надо открыть файл catalog/controller/information/contact.php. В самой первой функции этого файла (public function index()) будет виден кусок кода отправки почты:

$mail = new Mail($this->config->get('config_mail'));
$mail->setTo($this->config->get('config_email'));
$mail->setFrom($this->request->post['email']);
$mail->setSender($this->request->post['name']);
$mail->setSubject(sprintf($this->language->get('email_subject'), $this->request->post['name']));
$mail->setText(strip_tags($this->request->post['enquiry']));
$mail->send();

Сразу после него надо добавить несколько строк:

// Send additional alert emails
$emails = explode(',', $this->config->get('config_mail_alert'));
foreach ($emails as $email) {
        $email = trim($email);
        if ($email && preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $email)) {
                $mail->setTo($email);
                $mail->send();
        }
}

Теперь копии письма будут получать все администраторы магазина, перечисленные в поле дополнительных email-адресов (см. настройки магазина).

Совместимость

Приведённый код - из oc2011.

В oc2101/oc2102 кода чуть больше, но суть остаётся та же: добавлять после $mail->send(); и перед $this->response->....

Соответственно все версии, что между ними (oc2020, oc2031), лечатся аналогично. ocStore тоже.

Ocmod не писал, хотя наверное стоило бы - для тех, кто не хочет лазить по FTP и знает только админку. Если очень надо - напишите в комментарии, постараюсь найти время и выложить.

Русский язык / русский перевод для Opencart v2.0 обновление до версий v201x

- Posted in Opencart by

Информация для покупателей модуля.

Доступен перевод для версий Opencart 2.0.1.0 и 2.0.1.1 (v201x).

По ходу его подготовки были замечены мелкие ошибки и опечатки в переводе для 2.0.0.0. Небольшое обновление для 2.0.0.0 планируется завтра. Завтра же наверняка будут ещё некоторые обновления по 2.0.1.1 (остался список тудушек).

Критичных обновлений не будет: в основном косметические правки и мелкие опечатки. Сегодняшняя версия вполне работоспособна и может использоваться.

Единственное что может быть критично - пользователям версий 2.0.0.x в файле catalog/language/russian/mail/customer.php надо изменить строку:

$_['text_welcome'] = 'Добро пожаловать и благодарим Вас за регистрацию в %s!'; // %s - название магазина

Общий список изменений можно видеть в history.txt.

Русский язык / русский перевод для Opencart v2.0

- Posted in Opencart by

Выпущен русский перевод для Опенкарт версий v2.0.

Из интересного - есть автоматическая установка средствами Opencart Extension Installer (новый инструмент в версии 2.0). Вроде и работает, но местами у некоторых клиентов встречаются грабли и проще поставить по-старинке, вручную. Одно можно сказать точно: если вы этой фишкой пользуетесь и настроили себе, установка других ocmod-модулей происходит без проблем, -- то и с установкой нашего модуля русского перевода проблем не будет: установка происходит буквально в один-два шага (выбрать архив и подтвердить установку).

Также сделали модуль, который помогает переводить ресурсы в базе на русский и обратно на английский, если потребуется. Это все статусы и география, которые устанавливаются с демо-данными.

Paypal при оплате картой дополнительную комиссию с вас не берёт. И Paypal-акаунт не нужен, и привязка карты к акаунту тоже. Кроме реквизитов карты ничего больше не надо: выберите слева возле иконок платёжных систем линк "Continue" и заполните данные карточки.

Об ошибках сообщайте на странице поддержки в фейсбуке.

О печальном

4 года экспериментов с русскоязычным сообществом (поддержка бесплатного русского перевода для Опенкарт 1.5.x) считаю законченным. Интерес (в смысле дай) велик, а интерес в поддержке разработчиков бесплатного или к совместной работе - практически на полном нуле. Поэтому перевод для версии 2.0 решено сделать платным, за символическую цену в $2 (WMZ, WMU, П24, Paypal, карточки). Владельцам QIWI и Yandex-Денег - тоже в оплату картами VISA/MC мгновенного выпуска.

Перевод для v15x оставлен на гитхабе, а ветки версии v2.0 перенесены в приватный репозиторий.

Модуль также можно купить на opencart.com: Russian language translation v2.0.x / русский перевод, там цена $10 по техническим причинам (ниже не даёт выставить торговая площадка).

Новая система модулей OCMOD Opencart Modification System

- Posted in Opencart by

Начало появляться описание формата и отличий новой системы расширений OCMOD от использовавшейся ранее разработки: широко известного VQMOD, автором которой является Qphoria.

Суть системы расширений осталась та же самая, но XML форматы VQMOD и OCMOD отличаются, поэтому модули придётся переписывать. OCMOD - упрощённая версия VQMOD. В админке также добавлены удобства для загрузки новых OCMOD-расширений (Extensions / Extension Installer).

Например, основные отличия OCMOD от VQMOD: имеются операторы Replace, Before, After, Regex, Offset, Limit, отсутствуют ignoreif, log.

Отличается и работа offset.

Модули могут состоять из одного файла (должен иметь расширение .ocmod.xml) или нескольких, упакованных в архив с расширением .ocmod.zip. В архиве могут находиться XML, SQL и PHP файлы:

  • upload/*
  • install.sql
  • install.php
  • install.xml

Все файлы из папки upload будут скопированы в папку, куда установлен Opencart.

В install.sql можно добавить все необходимые SQL-запросы (create, drop, insert, update), которые должны быть исполнены при установке модуля. Каждый запрос должен заканчиваться символом ;.

Если модуль требует каких-то дополнительных действий для установки, PHP код надо разместить в файле install.php.

Остальные подробности можно будет узнать позже -- либо по мере появления новой документации по адресу https://github.com/opencart/opencart/wiki/Modification-System, либо путём изучения появляющихся модулей.

См. также:

  • Override Engine + VQmod for OpenCart 2.0 (J.Neuhoff). Это решение позволяет получить как новую систему Override Engine (OE), так и поддержку всех старых vQmod расширений (OE хорош именно для модулей, а вот для изменения шаблонов способ vQmod пока наиболее подходящий; плюс совместимость). Всё доступно свободно для скачивания и эксперименто. Предлагали Даниэлю. Кстати, автор vQmod (Qphoria) тоже высказался в топике за встраивание этого варианта OE+vQmod в Opencart 2.0. Он сказал: "Согласен. Я хочу, чтобы OE включили в ядро Opencart, а vQmod остался внешним расширением, каким он всегда был. OE или правильная система хуков -- это что-то, что ядро должно предлагать из коробки, тогда как vQmod был создан лишь как костыль, исправляющий отсутствие чего-то подобного в ядре. vQmod до сих пор имеет огромный смысл в Opencart, но я не вижу смысла в добавлении урезанного его варианта вместо того, чтобы сделать правильную систему."

SafePatch -- альтернатива vQmod

Другими словами странность того, что происходит, очевидна всем разработчикам, кроме Даниэля.

SafePatch - альтернатива vQmod

- Posted in Webdev by

Идея патчей и vQmod совершенно одинаковая. И в одном, и другом случае файл с изменениями накладывается на некую известную основу. И если эта основа изменилась -- и патч, и vQmod могут "поломаться": не смогут внести изменения, если не найдут точного соответствия, необходимого для внесения правок.

Поэтому те, кто наивно полагает, что vQmod спасёт их от всех бед и является волшебной таблеткой и позволит без проблем обновлять версии и ни о чем не беспокоиться - сильно заблуждаются.

А те, кто знает об этом и вынужден хоть так, хоть иначе контролировать логи ошибок -- знают, что заниматься отладкой vQmod гораздо менее удобно, чем иметь изменения сразу на месте, в коде, и не гадать, откуда именно берется исполняемый код и где его искать в исходниках.

К тому же vQmod - рантайм решение. То есть работает при каждом запросе к серверу. Конечно, многое решается кешированием. Но я из тех разработчиков, которые не совсем понимают, зачем нужно вводить лишнее звено, если то же самое делается без дополнительных костылей (а технологии внесения и убирания этих изменений существуют уже лет 40 и протестированы не одним поколением программистов -- я говорю об утилитах patch и diff).

Причём убрать изменения так же просто, как и наложить патч.

Применить изменения к коду: git apply fix-some-problem.diff или patch -p1 fix.diff

Убрать изменения: git apply -R fix-some-problem.diff или patch -R fix.diff

И где здесь сложная часть? Это ничуть не сложнее удаления VQmod файла. При использовании vQmod надо управляться с набором XML файлов. При использовании стандартного подхода -- с набором DIFF файлов. Невелика разница. А преимущества серьёзные.

И вот совсем недавно, в поисках PHP-реализации утилиты patch или автоматического конвертера DIFF в vQmod XML, я наткнулся на замечательный вариант: утилиту SafePatch.

http://code.google.com/p/safepatch/

UPD: в связи с закрытием Google Code проект переместился на Github: progerxp/safepatch.

Если кратко и своими словами -- это "менеджер пакетов" (расширений). Но в отличие от vQmod (runtime) он эти изменения вносит непосредственно в исходный код (как и patch). При этом понимает формат VQmod и может использовать эти файлы тоже.

Так что те, кто интересуется вопросом - встречайте. По-моему, хороший инструмент. Это не совсем то, что я искал, но отличное готовое решение проблемы.

See also: