Запись с тегами: webasyst

Модификация классов Webasyst и в частности Shop-Script 6 без потери изменений при обновлениях

Кратко:

Как вносить изменения в код фреймворка Webasyst, приложений и плагинов, написанных на нём, так, чтобы не отказываться от обновлений, не отслеживать вручную изменившиеся файлы, при этом, чтобы изменения хранились отдельно от самого кода и хорошо поддавались контролю версий git или других VCS? В этой статье будет предложен почти идеальный способ.

Длинно и подробно:

Утверждение первое: Фреймворк Webasyst, на котором основан Shop-Script 6 (раньше был 5), обладает встроенным механизмом обновлений.
Этот механизм позволяет достаточно удобно применять обновления, выпускаемые компанией Webasyst.
Утверждение второе: При этом, расширяемость приложений, таких как Shop-Script базируется исключительно на использовании плагинов, которые должны использовать «хуки» для улучшения или изменения функциональности. Если вам не достаточно «хуков», те, что есть не дают возможностей влиять на нужные вам элементы функциональности, либо вам нужно изменить работу некоей функции самого фреймворка Webasyst, то плагины вам не подойдут.
Утверждение третье: Для изменения функциональности «на уровне ядра» вы можете изменить непосредственно сами классы Webasyst, ShopScript6 и других приложений, и именно это и советуют разработчики Webasyst на своём форуме поддержки в особо сложных случаях. Однако, благодаря встроенному механизму обновлений, ваши изменения могут легко быть затёрты при следующем обновлении.

Что можно сделать?
Способ «в лоб»:
Можно, при изменении каждого системного файла, копировать то, что получилось куда-нибудь в специальное место, откуда копировать обратно при каждом изменении. Но это утомительно, неудобно, и «некрасиво» с точки зрения архитектуры веб-приложения.
Идеальный способ:
Идеально было бы хранить изменения где-то в отдельных файлах, да так, чтобы они применялись к исходным файлам webasyst при запуске приложения, либо при деплое на удалённый сервер.

У меня есть «почти идеальное решение»!

Читать далее


Консольные команды в плагине webasyst и Shop-Script 5/6 в частности

В документации по фреймворку webasyst описано, как создавать консольные команды, то есть команды которые можно вызывать из консоли, без участия веб-сервера.
Статья справки размещена здесь: www.webasyst.ru/developers/docs/features/cli/
Минус описанного в ней метода в том, что скрипт придётся помещать в папку wa-apps/[APP_ID]/lib/cli, то есть фактически в папку с приложением класть свой код, что приведёт в конечном итоге к бардаку и хаосу.

Также, в справочной системе есть статья о плагинах, где написано, что плагины тоже могут иметь консольные команды.
вот эта статья: www.webasyst.ru/help/98/shop-script-5-plugin-development/

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

Читать далее


Создание плагина для бэкэнда Webasyst Shop-script 5

Цель и смысл создания плагина

Зачем вообще создавать плагины для Webasyst, Если можно просто «поковыряться» в коде приложения (того же Shop-Script 5) и изменить всё прямо там?

Я задался таким вопросом, и попытался пойти напролом без всяких плагинов. Довольно быстро я обнаружил, что при этом начинаются проблемы с автоматическими обновлениями — приходится вручную отслеживать все обновлённые инсталлером файлы, и переносить из них изменения в «актуальные версии файлов», например с помощью утилит diffuse или meld, ну или консольных diff, если совсем по хардкору. Со временем это превращается в кошмар.

UPD: Спустя некоторое время после написания этого поста я сделал движок «патчинга на лету», который позволяет хранить изменения файлов отдельно от основного кода, подверженного обновлениям, и применять их автоматически, вот этот движок: Monkey Patching для webasyst

Поэтому, наиболее простой вариант — создание плагинов, а если для них недостаточно «хуков» (это точки вызовов событий, на которые плагин можно подписать), то либо клянчить новые хуки у разработчиков либо, так уж и быть, добавить свои прямо в код.

Причина написания этой статьи

Так как справка по этой теме по состоянию на середину 2014 года весьма бедная (кстати вот она: http://www.webasyst.ru/developers/docs/plugins/ ), приходится изучать её при помощи ковыряния в готовых плагинах, и отладчика XDebug. Жаль что он не умеет «заглядывать» в Smarty-файлы шаблонов…

На форуме forum.webasyst.ru есть немного информации по теме, но чувствуется, что людям незачем делиться ей бесплатно, так как они зарабатывают разработкой плагинов за деньги. Хотя, может быть, они бы и рады поделиться, но работа отнимает всё свободное время, и просто некогда сидеть на форумах.

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