Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Перевод Opencart 1.5.x

Русский перевод Opencart: v1.5.0.5 - 1.5.5. Информация о других переводах (русский, украинский язык)

Quickcheckout: one-page simple checkout

Quickcheckout: one-page simple checkout

How to run rsync via non-standard ssh port

9 февраля 2016 г. Ruslan Brest Linux » Howto » Web developmentОбсудить

Не знали, как запустить rsync через нестандартный порт (при работе через SSH, без ответного Rsync демона на сервере)?

Теперь знайте:

rsync -avz -e "ssh -p 12345" ./public_html/ username@yourserver.com:/var/www/html/

Здесь 12345 - номер порта, username - ваш логин и yourserver.com - доменное имя или IP вашего сервера.

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

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

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

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

18 января 2016 г. Ruslan Brest E-commerce » OpenCartОбсудить

Просматривал лог коммитов и случайно заметил появление и потерю папки "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 делает своё дело. Осталось отстранить Даниэля от разработки, и будет всем счастье.

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

17 января 2016 г. Ruslan Brest Howto » E-commerce » OpenCartОбсудить

Оказалось, в 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 и знает только админку. Если очень надо - напишите в комментарии, постараюсь найти время и выложить.

Проблемы OCMOD

12 апреля 2015 г. Ruslan Brest Web development » E-commerce » OpenCart2
В этот раз сдеаю всё как положено

Вспомнил вчера ещё две взаимосвязанные особенности OCMOD, которые мешают жизни:

  • отсутствует механизм сортировки и выстраивания порядка исполнения модификаций (sort order). Как следствие - нет возможности гарантировать, что решённые сегодня конфликты не возникнут завтра или через неделю. Поменяется порядок исполнения двух конфликтующих модулей (второй из которых, например, был подправлен, чтобы учитывать изменения, внесённые первым) - и приплыли. Более-менее быстрым и простым способом исправить ситуацию является сортировка модификаций по полю `date_added`. Но более приемлемым для пользователей вариантом будет, конечно, ввод дополнительной колонки `sort_order` в базу и в интерфейс админки и сортировка по ней;
  • механизм обновления модификаций отсутствует: их можно только удалить и установить заново. Это меняет как положение записи в таблице БД, так и дату добавления.

В vQmod порядок исполнения модулей мог регулироваться путём переименования файлов: они выбирались и исполнялись в алфавитном порядке.

Есть и другие проблемы.

Вот довольно заметная: в OcMod XML-ки модификаций хранятся в базе. Если у вас есть конфликт модулей и надо искать причины, анализ текста модификаций затруднён. Предварительно надо извлечь все XMl-тексты модулей, чтобы получить хотя бы возможность поиска по ним в более привычной среде: IDE, текстовом редакторе, файловом менеджере, grep-ом... Механизма экспорта модулей из БД в файлы нет (может кто добрый и написал уже - не видел пока).

Ещё не предусмотрена возможность чистой загрузки, игнорируя установленные модификации. То есть добраться через админку к инструментам отключения модификаций и перегенерации кеша OCmod может оказаться невозможным. Пользователи поопытней смогут зайти по FTP и удалить кеш OCmod. Для менее опытных это может оказаться проблемой.

Проблемы Extension Installer (установка расширений)

  • Расширениям предоставлена возможность добавлять ИЛИ ЗАМЕНЯТЬ любые файлы движка. Файлы модуля не хранятся где-то локализовано в одной папке
  • Не предусмотрен uninstall. Надо удалить модуль? Пользователю придётся вычищать его файлы вручную

Неприятные сюрпризы Summernote и Firefox

Почитал баг opencart/opencart#2521 и его фикс. Подумал. Поэкспериментировал.

Офигеваю.

Opera (12.60 на старом движке, под линуксом) генерирует при нажатии кнопки Bold на панели Summernote семантически приятный код со strong:

test <strong>word</strong>

Как оказалось, это - подарок судьбы, а не является нормой. В других браузерах генерируемый HTML исходник может отличаться в зависимости от CSS админки. Это же полный переворот с ног на голову идей семантической вёрстки и отделения представления (внешнего вида) от смысла (чистой семантики исходного кода).

Например, Firefox (v37.0) при исправленном CSS (убранном "text-weight:500" с текста по умолчанию) генерирует

test <span style="font-weight: bold;">word</span>

Кроме мата я на это не могу ничего дипломатичного сказать. Поэтому промолчу. (Нет, ну я не могу! Спан со встроенным стилем?!?! Ну $L@#ь, ну %1z*#ц же!)

Если CSS в админке без исправлений, то на стандартном тексте кнопка Bold в Summernote в FFox нажата и генерируемый код дополняется ещё одним лишним спаном.

В общем, Firefox разочаровал по полной. Даже не Summernote, нет. Хотя теперь я многократно счастливее от того, что сразу ушёл от дурацкого WYSIWYG-а в сторону Markdown.

Если верить сказанному в багрепорте про Chrome, там такой ошибки нет. Боюсь даже Хром запускать, чтобы посмотреть, какой код генерируется.

UPD. Google Chrome: поведение кнопки Bold на панели Summernote, а также внешний вид текста в редакторе не зависит от CSS, в отличие от Firefox. Генерируемый в Хроме код - такой же, как в Firefox (спан со стилем), лишь без глюка кнопки [B] (bold/normal).

Выводы у меня такие

  1. WYSIWYG зло. Однозначно;
  2. Firefox - неприятное открытие. Для меня это событие масштаба "событие года". Совершенно неожиданно. Хотя я и не был фанатом FFox;
  3. Оперу зауважал ещё больше, хотя и думал, что дальше некуда. Старую, разумеется. Новой у линуксоидов вообще ещё нет, а по описаниям виндовс-пользователей, новую даже пробовать не хочется, настолько это не Опера, а чёрт знает что;
  4. IE11 ведёт себя так же, как FFox. (Вот уж "комплимент" для фарфокса...) Chrome - вроде бы нет;
  5. Код, генерируемый Summernote, может зависеть от CSS админки (!) и от браузера (!). У сторонников семантичекой вёрстки на этом пункте волосы шевелятся и становятся дыбом. Поведение кнопок Summernote зависит от стилей текста в CSS. Это тоже весьма заметный такой ахтунг.

Проблемы лога ocmod.log

2 апреля 2015 г. Ruslan Brest Howto » Web development » E-commerce » OpenCart2

Речь про версию oc2011. Вышедшую 1-2 дня назад oc2020 ещё не смотрел, хотя думаю, там та же беда.

В лог "ocmod.log" я уже заглядывал в самом начале знакомства с OC2 - там страшный бардак и чёрт ногу сломит. Этот лог - не помощник в поиске ошибок, а наоборот. Штука скорее бесполезная, которую надо взять и переделать.

Единственная хоть немного полезная в быту фича - возможность поискать строки "NOT FOUND!". И если они есть, можно отмотать вверх и убедиться - в твоём модуле ошибки случились или в каком-то другом.

Пока мне этого как-то хватало. Мало OCMOD-ами занимался. Но сегодня пришлось вплотную с ним разбираться и постигать логику находящихся в ocmod.log записей. И обнаружилось что-о-о-о? Правильно: очередной фееричный трындец.

Среди прочих записей у меня была такая:

CODE: <h2><?php echo $heading_title; ?></h2>
NOT FOUND!

Она оказалась самой информативной и точной. Немного отмотав лог вверх, можно найти строку "FILE: ..." и выяснить, в каком файле надо искать проблему. К слову: в этом блоке почему-то не было строки наподобие LINE: 16, которыми обычно сопровождаются как найденные, так и ненайденные блоки кода. Но если блок не найден, то вполне логично, что и номера строки не будет: не найден же. Так я подумал и принялся разгребать лог дальше.

Дальше была такая запись об ошибке:

CODE: <div class="col-sm-2"><img src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" title="<?php echo $heading_title; ?>" class="img-thumbnail" /></div>
LINE: 24
NOT FOUND!

Здесь логика сломалась. Попытка обсудить этот кусок с коллегой, больше работавшим с OCMOD, привела к быстрой поломке и его логики. Код из XML найден, строка такая-то. (Строка в XML и в исходнике совпадает полностью, это было сразу же проверено.) Но почему она NOT FOUND? Сразу после того, как была FOUND?

Бился я над этим часа два - проверял и то, и это, и концы строк, и trim="true", и настройки FTP-клиента (вдруг концы строк на лету конвертирует), и чёрт знает что ещё. В общем, 2 часа. Мучился до тех пор, пока не обратил внимание, что эта строка в исходнике - 21-я, а не 24-я. "Обана!" - подумал я. И сравнил эти строки в TPL клиента и в оригинальном файле.

И таки да - именно в этой строке был исправлен один символ. И немного дальше в нашей XML-ке были правила, касающиеся той строки, изменённой. Но какой-то, блин, гений в лог записал совершенно другую строку, а не 24-ую! Сбив меня со следа очень конкретно и уведя в совершенно неправильном направлении. Пля! Чтоб ему икалось.

Не лог, а предательство сплошное.

Две разные реализации vQmod для Opencart 2, самая распространённая несовместима и конфликтует с OCMOD

13 марта 2015 г. Ruslan Brest E-commerce » OpenCart8

На прошлой неделе пришлось разбираться с vQmod и проблемами его наличия на OC2 (Opencart второй версии). OCMOD является встроенным в OC2 аналогом vQmod с немного другим синтаксисом XML-файлов. Зачем людям vQmod на второй версии Опенкарт - не будем сейчас затрагивать этот вопрос.

vQmod / Q+J

Выяснилась очень неприятная вещь. Самый популярный вариант реализации vQmod (авторы Qphoria и Jay6390) оказался несовместим с OCMOD. То есть эта версия может быть установлена на OC2, но работает она неправильно, мешая исполняться OCMOD-расширениям.

Причина этого - независимая работа по модификациям. Оба механизма (встроенный OCMOD и vQmod/Q+J) делают свои копии кеша из оригинальных файлов. Файлы используются в системе в такой приоритетности:

  • cache vqmod
  • if not found, cache ocmod
  • if not found, original files.

Хотя поведение vQmod должно было быть таким:

  • проверяем кэш ocmod и модифицируем файл.
  • если не найден, модифицируем оригинальный файл.

vQmod / JNeuhoff

Но есть ещё одна реализация vQmod для Opencart 2. Её автор - JNeuhoff. Назовём её vQmod/JN.

Она оказалась реализованной грамотно. В этой реализации заменяются 2 файла движка OC2, после чего Опенкарт становится способным понимать как свой OCMOD синтаксис, так и синтаксис XML-файлов от vQmod. Все расширения устанавливаются через Extensions / Extension Installer и находятся затем в едином месте, где ими можно управлять: Extensions / Modifications. Все модифицированные файлы лежат в system/modifications/

При установке заменяются файлы

admin/controller/extension/installer.php

admin/controller/extension/modification.php

Резюме

Тем, кому всё-таки нужен vQmod при работе со второй версией Опенкарт, однозначно надо менять движок vQmod-а на бесконфликтную и совместимую реализацию от JNeuhoff.

Отличить неправильную версию от правильной легко: если вы используете vQmod и в корне магазина присутствует папка `vqmod` - это неправильная версия. Для её деинсталляции надо убрать vqmod-вызовы из index.php и admin.index.php или вернуть оригинальные копии этих файлов, после чего убрать из корня папку vqmod. А используемые XML-ки оттуда установить в новый vQmod/JN, правильный и бесконфликтный.

За 2 недели мы столкнулись уже с двумя проектами, где понадобилось обновить vQmod -- оба проекта живы-здоровы и рады. Чего и вам желаем.

Clipboard Catcher для линуксоидов (bash, xclip)

19 февраля 2015 г. Ruslan Brest Linux » HowtoОбсудить

Давно пользуюсь такой штукой, но поискал и оказалось, что мне не приходило в голову поделиться рецептом. Пользователи WikidPad поймут с полуслова, остальные... ну не знаю, поймут как-нибудь.

При запущенной утилитке всё, что копируется в клипборд, дублируется в текстовый файл. Очень удобно, когда предстоит много копи-паста: позволяет избавиться от Alt-Tab, Ctrl-V, Alt-Tab после каждого Ctrl-C.

Далее...