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

Howto

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

Начало появляться описание формата и отличий новой системы расширений 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

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

Знакомим `phpcs` (PHP CodeSniffer) и Sublime Text со стандартом оформления кода FuelPHP

UPD: При ближайшем рассмотрении оказалось, что отличий от PSR2 больше, чем табы вместо пробелов. Чтобы сделать автоматическую проверку, надо ещё многое переделать, а где-то и дописать. Так что я поспешил: с опубликованным вариантом проверять синтаксис PHP CodeSniffer'ом на соответствие правилам пока что неудобно.


Самый простой способ - поставить в редакторе/IDE правила автоформатирования PSR-2 и заменить использование пробелов в отступах на табуляцию (этим стандарты оформления кода, принятые в FuelPHP, отличаются от PSR-2). Заодно можно включить отображение пробелов и табуляций.

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

Для автоматизации проверки кода существуют разные инструменты: примеры (и важность с удобством применения этого непосредственно в редакторах/IDE) есть в статье http://philsturgeon.co.uk/blog/2013/08/php-static-analysis-in-sublime-text.

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

Знакомим phpcs и ST3 со стандатами оформления кода FuelPHP

  • sudo apt-get install php-codesniffer
    • phpcs -i - показать список установленных стандартов. Нужен psr2 (PSR-2)
    • Если его нет - обновляем полностью CodeSniffer (просто скопировать оттуда папку с PSR2/1 стандартом недостаточно)

    • Это, конечно, грубовато - обновлять напрямую, в обход apt-get , но он считает, что установлена самая свежая версия и более правильного способа я сейчас не знаю.

      cd ~/Downloads
      wget https://github.com/squizlabs/PHP_CodeSniffer/archive/master.zip
      unzip PHP_CodeSniffer-master.zip
      cd PHP_CodeSniffer-master
      sudo cp -r --parents -t /usr/share/php/PHP/ CodeSniffer CodeSniffer.php scripts
      cd scripts
      sudo mv /usr/bin/phpcs /usr/bin/phpcs.ORIGINAL
      sudo cp -t /usr/bin/ phpcs
    • в PSR-2 используются пробелы вместо табуляций и phpcs на них ругается. Сделаем свой стандарт "FuelPHP", основанный на PSR2. Рядом с папкой PSR2 создаём FuelPHP, в которой достаточно одного файла FuelPHP/ruleset.xml :

    • <?xml version="1.0"?>
      <ruleset name="FuelPHP">
       <description>The FuelPHP coding standard.</description>
       <!-- Include the whole PSR-2 standard -->
       <rule ref="PSR2">
       <!-- Redefine 2.4 Indenting -->
       <!-- Code MUST use an indent of tabs, and MUST NOT use 4 spaces for indenting. -->
       <exclude name="Generic.WhiteSpace.DisallowTabIndent"/>
       </rule>
       <rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
      </ruleset>

      Проверяем: phpcs -i

      The installed coding standards are Zend, FuelPHP, PHPCS, PSR2, PSR1, Squiz,
      MySource and PEAR
  • install ST3 plugin "Sublime Phpcs" http://www.soulbroken.co.uk/code/sublimephpcs/
  • check config, see HOWTO: http://philsturgeon.co.uk/blog/2013/08/php-static-analysis-in-sublime-text
    • только мы вместо "psr2" теперь напишем свой "FuelPHP" в юзеркониге:

    • Содержимое /home/rb/.config/sublime-text-3/Packages/User/phpcs.sublime-settings :

      {
          "show_debug": true,
          "phpcs_executable_path": "/usr/bin/phpcs",
          "phpcs_additional_args": {
              "--standard": "FuelPHP",
              "-n": ""
          },
      }

Автоматическая проверка в ST3 тепрь работает.

Также можно использовать отдельно: phpcs --standard=fuelphp home.php .

Opencart (admin): сортировка товаров по колонке с изображениями

14 августа 2013 г. Ruslan Brest Howto » OpenCartОбсудить

Сортировка по колонке с фото пригодится для быстрого перехода к товарам, у которых нет фото.

Делалось на последней версии с гитхаба, но должно быть аналогично для всех версий. Единственное, что может отличаться - tpl файл, т.к. админка в v2.0 существенно переделывалась. Но думаю, не составит труда адаптировать одну строчку под необходимую вам версию.

Далее...

Opencart: вывод производителей в своём порядке вместо алфавитного

Для тех, кто хочет выводить страницу производителей (брендов) в своём порядке, а не в алфавитном, Сегодняшний рецепт. Надо изменить файл catalog/controller/product/manufacturer.php.

Далее...

Opencart: иконки в breadcrumbs

Как изменить символ "»" на собственную иконку?

Opencart 2.0

Для этого в файле catalog/view/theme/default/stylesheet/stylesheet.css

надо найти

.breadcrumb li + li:before {
	content: '»';
	padding: 0px 5px 0px 5px;
}

и заменить на что-то наподобие:

.breadcrumb li + li:before {
	content: url('../image/success.png');
	padding: 0px 5px 0px 5px;
}

Второй способ - использовать специальные шрифты с иконками.

Opencart 1.5.x (возможно, и 1.4.x тоже)

Для более ранних версий Opencart (вплоть до 1.5.5.1) надо изменить текст `text_separator` в языковых файлах:

$_['text_separator'] = '<img src="image/flags/ua.png" height="42" width="42"/>';

Искать в `catalog/language/english/english.php`, `catalog/language/russian/russian.php` и т.п.

Lubuntu and touchpad: horisontal scrolling, disable touchpad when typing

Наконец дошли руки починить пару давно мешающих проблем с тачпадом (Lubuntu @ Asus 1015BX).

Первая: почему-то отключен горизонтальный скроллинг. Включаем оба варианта (прокрутка по кромке тачпада и двумя пальцами):

synclient HorizEdgeScroll=1 HorizTwoFingerScroll=1

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

Далее...

Shaarli: добавил поддержку Markdown

прикрутил поддержку Markdown в описаниях. Это оказалось чуть ли не пятиминутным делом. Готовые библиотеки скачиваются на счёт "раз-два", а несколько мест, где происходит обработка описаний при выводе на экран, позаимствовал из готового пулл-реквеста в Github-репозиторий Shaarli (PR#63). Их там всего 3-4, так что всё, что оставалось сделать - просто изменить подключаемые библиотеки и поменять вызовы на `Markdown()`.

Меня интересовало решение для PHP 5.2, а не 5.3 и выше - на сервере, где лежит мой сайт, версию PHP выбрать нельзя. Там 5.2.17.
Кого интересует PHP 5.3+, см. оригинальный пулл-реквест. Там и более свежая Markdown библиотека используется. Которая, кстати, в будущем останется одна (начиная с 2014 года).

Также задумался о том, что неплохо было бы мульти-юзер версию иметь на примете. У нас с парой человек как-то возникало несколько раз желание использовать делишес для сбора ссылок в отдельных проектах или компаниях. Букмарклетами ссылки добавлять в хранилище легко и просто, а тегами они прекрасно быстро сортируются. И не нужны никакие вики: туда сначала надо зайти, найти, куда вписать, открыть редактор, найти там место, скопировать и оформить ссылку. Понятное дело, что на это хватает только самых упёртых. Сравните с кликом по кнопке в тулбаре и вписыванием нескольких тегов для категоризации. Всё остальное происходит само.

Итак, недолгий гуглёж показал, что ближайшая альтернатива, на которую я буду смотреть -- Scuttle (multiuser Delicious-clone, PHP, MySQL). Остальные (не только на PHP) -- см. tags: delicious + alternative. Но мне они менее интересны в силу разных причин.

Бекап Opencart сайта - checklist

23 апреля 2013 г. Ruslan Brest Howto » E-commerce » OpenCartОбсудить

Сайт обычно располагается в папке `public_html`.

  1. Папки `admin`, `catalog`, `download`, `system`, а также файлы `.htaccess`, `config.php`, `humans.txt`, `robots.txt`, `yandex_*.txt` -- это всё движок магазина. Те, кто использует VQmod, должны добавить к списку ещё папку `vqmod`.
    • файлы с точкой впереди - системные/скрытые. Поэтому их может быть не видно и надо включить в настройках FTP-клиента опцию их показа. `.htaccess` очень важен для работы сайта. Если у него есть расширение (.TXT или любое другое) - значит он сервером не используется (отключен). В этом случае не будут работать SEO URL;
    • в указанных папках есть 2 "лишние", их нежелательно включать в бекап: `system/cache`, `system/logs`. Это кешированные файлы и лог ошибок. Они нужны для работы и диагностики, но хранить их - смысла мало. Особенно если они большого объёма;
    • если вы пользуетесь VQmod-ом: папку `vqmod/logs` желательно исключить из бекапа. Папку 'vqmod/vqcache' можно бекапить, а можно и нет. Самое ценное здесь - содержимое `vqmod/xml`. Остальное несложно восстановить.
  2. Вторая важная часть сайта - картинки/фото.
  3. Они находятся в папке `image` (`public_html/image`). Оригиналы картинок - в папке `image/data`. Это самое ценное. Остальное несложно восстановить.

    • Что здесь бекапить: всю папку `image` за исключением `image/cache`
    • `image/cache` очень объемная. Эти файлы генерируются сайтом на лету при просмотре сайта. Ссылки на них могут использоваться в `sitemap.xml`.

  4. Третья критически важная часть сайта - база данных магазина. Её через FTP не скопируешь. Её надо бекапить либо Adminer-ом, либо phpMyAdmin (обычно есть в панели управления хостинга).

Opencart 1.5.5 (admin): показ SEO Keyword в списке категорий

5 марта 2013 г. Ruslan Brest Howto » OpenCart6

Добавляется колонка на странице категорий в админ-части:

Для предыдущий версий - см. список связанных статей внизу.

Далее...

Сравнение языковых файлов Opencart

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

При поиске различий в языковых файлах Opencart огромную неприятность доставляет то, что утилиты наподобие DIFF оказываются почти бесполезны. Они сравнивают файлы построчно, а поскольку приходится сравнивать английский файл с русским, то 99% строк разные из-за перевода. И найти в этих условиях новые и удаленные переменные в файлах локализации оказывается очень сложно и муторно. Графические аналоги подобных программ тоже не очень-то помогают, даже если способны подсвечивать разницу внутри одной строки: в глазах рябит, строки длинные, и после проверки пары каталогов эта рутинная и фактически ручная визуальная проверка просто выматывает.

Но у линукс-пользователей есть способ существенно облегчить себе задачу поиска различий, сравнивая лишь часть строк из двух файлов!

В файлах локализации неизменной для русской и английской версии остается левая часть строк до знака '='. Их и будем сравнивать. На помощь утилите diff приходит утилита cut:

#!/bin/bash
diff -b <(cut -d'=' -f1 -s $1) <(cut -d'=' -f1 -s $2)

Указав этой утилитке имена двух файлов, получим краткий список отсутствующих и появившихся языковых переменных. Это то, чего мне долго не хватало!

Спасительная команда cut -d'=' -f1 -s setting.php выводит только первую часть строки (-f1), разделенной знаком '='. А diff сравнивает две этих "первых колонки" из обеих файлов, оставляя нам только разницу.