Opencart 2.0.1.1 bugfix: OC2 extension installer

- Posted in Uncategorized by

Подарок тем пользователям OC2, которые ловят ошибки JSON Error при попытках использовать стандартный установщик расширений в OC2 (при правильно прописанных параметрах в настройках магазина на вкладке FTP).

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

  • Исправлена ошибка "PHP Warning: Invalid argument supplied for foreach() ... on line 333";
  • Подавление вывода предупреждений "PHP Warning: ftp_mkdir(): Create directory operation failed ... on line 338" (возникает всегда - при попытках создания существующих каталогов, таких как catalog, admin, admin/controller и т.д.);
  • включение пассивного режима FTP для устранения ошибки "PHP Warning: ftp_put(): Illegal PORT command ... on line 345"

Также описано на OpencartJazz: OCJ :: OC2 extension installer bugfix. Там прикреплён изменённый файл, но пока его можно скачать только после регистрации и "покупки" за 0.00. Будет время - починю это неудобство.

Для параноиков: мне даром не нужны ваши регистрации и личная информация. Просто мне удобно обслуживать и обновлять файлы в одном месте. И это место на данный момент -- там.
commit a60015450b6516406dcbf15f5e978b43eeee693f
Author: Ruslan Brest <rb@labtodo.com>
Date:   Thu Dec 25 20:43:39 2014 +0200
    [!] bugfix OC2 extension installer:
    
    - fix "PHP Warning:  Invalid argument supplied for foreach() ... on line 333";
    - prevent "PHP Warning:  ftp_mkdir(): Create directory operation failed ... on line 338"
      (when existing directories created: catalog, admin, admin/controller, etc.);
    - prevent "PHP Warning:  ftp_put(): Illegal PORT command ... on line 345"
diff --git a/public_html/admin/controller/extension/installer.php b/public_html/admin/controller/extension/installer.php
index 55f4517..1755cca 100644
--- a/public_html/admin/controller/extension/installer.php
+++ b/public_html/admin/controller/extension/installer.php
@@ -295,6 +295,10 @@ class ControllerExtensionInstaller extends Controller {
                $login = ftp_login($connection, $this->config->get('config_ftp_username'), $this->config->get('config_ftp_password'));
 
                if ($login) {
+
+                   // Prevent "PHP Warning:  ftp_put(): Illegal PORT command"
+                   ftp_pasv($connection, true);
+
                    if ($this->config->get('config_ftp_root')) {
                        $root = ftp_chdir($connection, $this->config->get('config_ftp_root'));
                    } else {
@@ -330,12 +334,16 @@ class ControllerExtensionInstaller extends Controller {
                                // Basename all the directories because on some servers they don't return the fulll paths.
                                $list_data = array();
                                
-                               foreach ($list as $list) {
-                                   $list_data[] = basename($list);
+                               if (FALSE !== $list) {
+                                   foreach ($list as $list_item) {
+                                       $list_data[] = basename($list_item);
+                                   }
                                }
                                                                
                                if (!in_array(basename($destination), $list_data)) {
-                                   if (!ftp_mkdir($connection, $destination)) {
+                                   // Prevent "PHP Warning:  ftp_mkdir(): Create directory operation failed" when
+                                   // existing directories created
+                                   if (!@ftp_mkdir($connection, $destination)) {
                                        $json['error'] = sprintf($this->language->get('error_ftp_directory'), $destination);
                                    }
                                }

Русский язык / русский перевод для 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 по техническим причинам (ниже не даёт выставить торговая площадка).

[opencart][BUG] Возможно назначить для категории родителя из своей же подветки

- Posted in Uncategorized by

Ой, вэй! Наткнулись на фееричный косяк. Родителем категории можно назначить какой-то из подчинённых узлов той же ветки. Например, перенести `Category` с верхнего уровня в `Category > Monitors > test1`.

Баг присутствует в oc1564 и ocs15512. Другие версии и сборки не проверялись.

(oc - Opencart, ocs - ocStore, как обычно.)

Думаю, чтобы пофиксить по-быстрому, достаточно в GUI админки исключить из списка автодополнения в поле родительской категории все подчинённые узлы ветки.

Будет время - допишу здесь рецепт.

Инструменты совместной работы: что использовать для обсуждений и сбора информации

- Posted in Uncategorized by

У меня очередной виток переосмыслений.

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

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

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

Issues в битбакете или гитхабе и другие багтрекеры - тоже что-то не то для обсуждений и собирательства идей. В общем-то всё вроде доступно - и обсуждать, и собирать, и решать, и переносить, и назначать. И теги там есть - задачи фильтрации и категоризации с навигацией вполне решаются. Где теги, где категории, где milestones или ещё что подобное. Багтрекеры наряду с email для меня - очень ценные инструменты.

Но вот как-то не клеится у нас их активное использование. То ли сами инструменты так себе по удобству, то ли ещё что.

Надо что? Например, идею обсудить и собрать информацию по ней. Будем делать или нет? Если будем, то что именно и нет ли сопутствующих идей? Обсуждать это всё в одном issue? Можно, делали. Как только попадается объёмная задача, которая начинает генерировать несколько связанных задач - начинаются неудобства и проблемы. Быстро перерастает она границы предназначенного ей хранилища и начинает расползаться. И опять её надо где-то снаружи собирать. То ли в вики, то ли в форуме.

Туду-листы с возможностью совместного использования? Вроде Todoist, Wunderlist и наверное ещё около десятка достойных сервисов наберётся из той же оперы. Попытки и здесь были неоднократные. Всё на уровне попыток осталось. То там неудобно, то там. Возможность обсуждения часто присутствует. Но вообще - пятьдесят на пятьдесят, иногда ориентир - простота. Удобны ли они? Не слишком, т.к. туду-листы обычно нацелены на "сделал и вычеркнул". То есть если в обсуждениях появляется что-то ценное - его надо где-то снаружи сохранить дополнительно. Иначе вычеркнется, забудется, удалится.

Более монстрообразные инструменты collaboration/groupware? Или сборник аналогичных инструментов по отдельности? Там где собраны под одной крышей проекты, клиенты, вики, таски и ещё что-нибудь? Лет 10 назад я очень активно с некоторыми их представителями пытался наладить работу для небольших групп разработчиков (от нескольких человек до нескольких десятков). Перебрал тогда штук 10-15 решений. Всё не то, косяки то там вылезут, то там. Где-то сразу, где-то после какого-то объёма внесённого контента становится очевидно, что так работать не получится. Единственным инструментом, пережившим эксперименты, можно считать наверное только Redmine. Но я и его не считаю идеальным и удобным. У него своих проблем хватает. С версиями и совместимостью, наличием модулей - в первую очередь.

В общем, сейчас для обсуждений опять пробуем вернуться к механизму форумов. После вики, issues, скайпа и email. У меня там есть Markdown и возможность редактирования постов. Чем не вики? Но в остальном форумы для обсуждений и уведомлений более приспособлены. Ах, да, теги тоже есть. Это если вдруг перерастём границы разделов и форумов - навигация по тегам поможет.

Хотел сначала какие-то плюсы и минусы отметить для каждого из озвученных решений, но теперь кажется, что это лишнее. Разве что вкратце? В нынешних вики меня очень привлекает доступ через гит и возможность работы оффлайн. Этого мне очень не хватает в issue tracker-ах (хотя для гитхаба есть пара инструментов, работает в одну сторону). В остальных местах такого способа взаимодействия очень хотелось бы, но не до состояния "надо, прям аж не могу".

Но если есть такие движки форумов, например -- подскажите.

Если ещё issue trackers с удобной работой как через Git, так и с веб-интерфейсом -- вообще было бы здорово. Именно для командной работы и кросс-платформенных применений. Потому что индивидуальные туду листы типа `gitodo` - такое, конечно, бывает. Но попользовавшись, понимаешь, что это из разряда "для поиграться" и для энтузиастов, а не серьёзной работы в команде. И интересного инструмента я пока не нашёл.

CKeditor в Opencart 2.0 заменили на Summernote

- Posted in Uncategorized by

В Opencart 2.0 в админ-части заменили WYSIWYG редактор: CKeditor убрали, вместо него теперь используется Summernote.

http://hackerwins.github.io/summernote/

Появился в доступе релиз Opencart v2.0 ALPHA

- Posted in Uncategorized by

Доступен релиз Opencart v2.0 ALPHA.

Скачать можно здесь: https://github.com/opencart/opencart/releases

Либо берёте последнее состояние проекта из ветки master - там могут быть ещё какие-то изменения, не отмеченные тегом следующей альфы или релиза.

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

Также оказалось, что у Opencart появился ещё один багрекер помимо Github-а: https://opencart.atlassian.net/

Красивенький, конечно. Но решение странное - лучше бы они разобрались и обустроили свой Github Issues раздел (метки, milestones), и начали наконец-то там вести нормальную работу, связывая коммиты с номерами задач и багов. Хотя, конечно, они вполне могут связать гитхаб со своим атлассианом и с ним коммиты связывать через номера задач. Но думаю, это из области несбыточных надежд - увидеть нормальный процесс по более-менее общепринятым практикам.

Зарегистрировавшись в новом багтрекере, появится возможность

  • создавать задачи (багрепорты)
  • комментировать
  • голосовать за задачи

С плагином "Jira Capture" можно облегчить создание багрепортов: сделать скриншот, откомментирвоать проблему и даже включить информацию об окружении (операционная система, версия броузера, размер окна, экрана, плагины и т.п.)

Фичреквесты (предложения) в этом багтрекере не приветствуются, только ошибки. Для запросов на новые идеи Opencart планирует сделать ещё один сайт, где наверное будет система голосования за то или иное предложение. Подробностей не сообщают, пишут лишь, что это будет сделано после выпуска релиза версии 2.0, чтобы сделать роадмап для v2.1.

vQmod, ocmod

Qphoria написал, что сейчас будет рассматривать и сравнивать ocmod" со своим vQmod. OCMOD - это новый встроенный механизм модификаций опенкарт, аналог vQmod. Если "ocmod" окажется достаточно хорош, vQmod вряд ли будут портировать на v2.0:

We are looking at ocmod and vQmod to see what has changed and if it is worthwhile to port vQmod to 2.0 or not or if ocmod is good enough.

Также напомню, что разработчик JNeuhoff уже предлагал Даниэлю готовое решение, которое интегрировало vQmod в Opencart. Было это несколько месяцев назад. Но здесь вечное "мы пойдём своим путём" - сначала декларировалось, что "ocmod" будет сильно упрощённой версией синтаксиса vQmod (синтаксис несовместим при этом). Потом постепенно по мере натыкания на разные ситуации и вопросы от разработчиков возможности "ocmod" всё болше и больше подтягивались к vQmod... Бред, в общем. То же самое, но с другими колсами, где преимущества и зачем убирать работающий инструмент, заменяя его на тот, под который все расширения переписывать придётся, -- вопрос открытый. Я смысла таких решений не понимаю.

На форуме пока предостерегают от бурного использования OCMOD, поскольку он ещё будет подвергаться модификациям.

Немного о новой системе модификаций написано в Github's Opencart Wiki:

Fotomag.ua - всё?

- Posted in Uncategorized by

AIN.UA сообщает о финансовых проблемах Fotomag.ua. Около года назад, когда проект был продан группе украинских бизнесменов, в этом интернет-магазине работало 300 человек. Сейчас уволены все, кроме IT-отдела. И, возможно, проект попробуют переделать в торговую площадку-аукцион наподобие Aukro.ua.

Полагаю, конкурировать "лоб в лоб" с Аукро - затея странная. Но может им удастся предложить покупателям какие-то интересные альтернативы? (Уж кто-кто, а конечные потребители от конкуренции только выиграют.) Впрочем, сильно в этом сомневаюсь, особенно если оглянуться на последние лет 5-10 жизни и "развития" Фотомага. Но посмотрим - вдруг чудеса случаются?

И, к слову, всем тем, кто в темах по юзабилити любит приводить примеры Фотомага и Розетки как бесспорных лидеров рынка -- вот она, отрезвляющая таблетка реальности. Размышляйте.

Opencart разослал продавцам расширений предупреждение о недопустимости ссылок на свои магазины

- Posted in Uncategorized by

Opencart.com разослал всем продавцам расширений, которые пользуются для продажи разделом расширений на указанном сайте, письмо с предупреждением о недопустимости рекламирования своих сайтов в описаниях модулей и возможности покупки расширений напрямую, минуя отчисления площадке Opencart.com.

Отчисления в 20% от цены платных модулей идут на поддержку развития Opencart. Поэтому наличие в описаниях ссылок на сайты разработчиков, где модули можно приобрести напрямую или со скидкой (призывы к этому некоторые авторы модулей пишут прямо в описаниях, размещая таким образом их на сайте opencart.com), владельцами Опенкарт категорически не приветствуются.

Разрешаются ссылки на демо-сайты и на сайты техподдержки (саппорт-тикеты). Но озвучено условие, что на этих сайтах не должно быть возможности купить модули. Дополнительно просят использовать target="_blank" для своих ссылок.

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

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

Одно из таких писем я уже видел несколько дней назад - в конце расположен блок с рекламой нескольких (то ли 4, то ли 6) модулей. Выглядит HTML-письмо симпатично, мне понравилось.

Описание этого рекламо-предложения слегка различается (на данный момент я встречал его трижды: в блоге, в описании функции "Promote Extension" в акаунте продавца, теперь вот ещё в письме). В основном пишут о рекламе на главной странице. Но в блоге, если не ошибаюсь, было и про мелькающие блоки вверху страниц категорий и поиска.

Цена такой рекламы - $50 в сутки (по $35 на выходных). В день можно рекламировать до трёх своих модулей. Выбирается модуль и дата.

Похоже, в штате у них появился человек, ответственный за дизайн (заметно и по дизайну v2.0, и по улучшающимся письмам) и развитие продаж.

Поисковый бот Google начнёт интерпретировать Javascript на страницах

- Posted in Uncategorized by

В гугле решили начать интерпретировать Javascript на индексируемых поисковиком страницах.

http://googlewebmastercentral.blogspot.com/2014/05/understanding-web-pages-better.html

http://habrahabr.ru/company/google/blog/224135/

Новая система модулей 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

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

Тотальные ограничения для анонимных пользователей ЯД, QIWI и т.д. с 16 мая

- Posted in Uncategorized by

Яндекс.Деньги сообщают о новых ограничениях, которые вступят в силу 16 мая, со ссылкой на законы 115-Ф3 и 161-Ф3 (т.е. это касается всех российских платёжных систем).

Анонимным пользователям станет практически вообще ничего недоступно: ни переводы другим пользователям, ни получение переводов от них, ни вывод в банки и на карточки, ни покупка в нероссийских магазинах. У россиян 2 варианта: деанонимизация с помощью небольшой формочки на сайте (ФИО, номер паспорта и дата выдачи) или полная идентификация.

У остальных - только идентификация. В информации об офисах Яндекса (там можно было пройти идентификацию) исчезли Киев, Одесса, Симферополь, а также Екатеринбург, Минск, Новосибирск, Казань, Ростов-на-Дону. Остались только Москва и Питер... И есть ещё вариант по почте и с нотариусом.

В общем, насколько понимаю, в России без паспорта шагу ступить нельзя и гайки закручиваются по всем фронтам. Мобильный? Давай паспорт. Виртуальные деньги даже для какой-то мелочёвки? Давай паспорт. Прослушка? Давно. Уже и скайп признался, что полгода способен хранить все разговоры. GPS? Скоро, наверное, спортивные часы, смартфоны, навигаторы и GPS приёмники тоже будут регистрироваться по паспорту.

Подробнее о всех новых ограничениях Яндекс.Денег:

https://money.yandex.ru/doc.xml?id=526543

Обсуждения:

Opencart 1.5.6.2

- Posted in Uncategorized by

Пару дней назад (10 апреля) втихомолку выложен Opencart v1.5.6.2. По ченджлогу - ничего особенного, разве что исправление некоторых ошибок:

Updates to the Paypal Express module to fix some issues during checkout. Changed UTF-8 helper file to new code and updated the installer to check for iconv function or mbstring extension. More info including commit links can be found in the change log: https://github.com/opencart/opencart/blob/v1.5.6.x/changelog.md MySQLi database support available at install.

То есть исправлены какие-то ошибки

  • в email (поля "from" и "mail-to");
  • есть изменения в system/helper/utf8.php (которые, судя по багрепортам, могли приводить к проблемам с изображениями в файл-менеджере - сейчас вроде бы исправлено)
  • в инсталляторе добавлена проверка на наличие на сервере "iconv" и "mbstring".

В изменения не вглядывался. Остальное для рунета мало актуально: Paypal Express, Klarna, OpenBay Pro.

Ещё на гитхабе заметна работа по интеграции созданию "своего vQmod велосипеда". Остальное - какие-то мелочи, в голове не задерживающиеся. Хотя я туда последнее время мало заглядывал. Может есть ещё что-то, приближающее (или наоборот, задерживающее) версию 2.0.

Вот так примерно выглядят метания между встраиванием vQmod и своей реализацией:

  • b81ee97 2012-08-24 16:36:02 (Edgar gabaldi) Named vqmods columns
  • d731ba9 2012-08-24 16:38:29 (Edgar gabaldi) Merge branch 'vqmod'
  • 7a64c34 2013-02-15 23:20:26 (Daniel Kerr) started adding my own version of vqmod.
  • d02ec9b 2013-02-18 12:51:13 (Daniel Kerr) started to add my own version of vqmod. trying to get the code into a single class.
  • 4f64f0d 2014-04-10 14:35:00 (Daniel Kerr) changed the system to use vqmod
  • 7267145 2014-04-10 17:13:32 (Daniel Kerr) more vqmod work done
  • f14c938 2014-04-10 18:28:07 (Daniel Kerr) more vqmod stuff done
  • 4f2498b 2014-04-10 23:46:41 (Daniel Kerr) updated the vqmod code but i'm probably going to undo the vqmod changes and use the system i had before. vqmod seems to have to many features that are just not required.
  • 774ab43 2014-04-10 23:52:16 (Daniel Kerr) vqmod removed, using my own again

"Свой собственный vQmod" (modifications в терминологии Опенкарт) будет с другой реализацией (хоть и похожей на vQmod) - и насколько вижу, речь о совместимости со старыми расширениями там не идёт.

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

- Posted in Uncategorized by

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 .