Для разработчиков
Установка компонентов через MODX API
Предлагаю всем желающим готовую функцию для установки компонентов через Api.
Можно делать из консоли, можно из сниппета — не важно. Собственно загрузка файла выделена в отдельную функцию, которая пытается работать через file_get_contents(), если это не запрещено. Иначе использует cUrl.
Параметров всего 2: имя компонента и id провайдера пакетов (по умолчанию — 1, то есть, modx.com).
Можно делать из консоли, можно из сниппета — не важно. Собственно загрузка файла выделена в отдельную функцию, которая пытается работать через file_get_contents(), если это не запрещено. Иначе использует cUrl.
Параметров всего 2: имя компонента и id провайдера пакетов (по умолчанию — 1, то есть, modx.com).
Динамические функции на замену фильтрам
Очередная модель от известного велосипедостроителя — меня.
Суть в следующем: заменить все фильтры в чанке на функции внутри сниппета, сделанного на pdoTools.
При этом, сами фильтры должны лежать как и раньше, сниппетами, а не быть жестко закодированы, чтобы их можно было удобно изменять и использовать также в в плагинах, или еще где.
Суть в следующем: заменить все фильтры в чанке на функции внутри сниппета, сделанного на pdoTools.
При этом, сами фильтры должны лежать как и раньше, сниппетами, а не быть жестко закодированы, чтобы их можно было удобно изменять и использовать также в в плагинах, или еще где.
[miniShop2] Первый релиз, бета 0
Бета с индеком 0 доступна в репозитории. Нулевая она потому, что я не успел сделать оформление и управление заказами и решил привести в порядок то, что есть, а не торопиться и делать тяп-ляп.
Но обещание выпустить в конце этой недели было дано и его нужно выполнять. Поэтому, бета 0, «для посмотреть».
Магазин на ней построить нельзя, но любопытство утолить — очень даже. Хотя, если вам не нужны заказы — то можно уже использовать по полной!
Также, в поддержку, запустил отдельный сайт на котором открыта админка — minishop2.com.
Не все читают «звезданутые» заметки, поэтому я коротко расскажу, что нового в MS2. В двух словах — всё переписано с нуля, от miniShop осталось только название.
Но обещание выпустить в конце этой недели было дано и его нужно выполнять. Поэтому, бета 0, «для посмотреть».
Магазин на ней построить нельзя, но любопытство утолить — очень даже. Хотя, если вам не нужны заказы — то можно уже использовать по полной!
Также, в поддержку, запустил отдельный сайт на котором открыта админка — minishop2.com.
Не все читают «звезданутые» заметки, поэтому я коротко расскажу, что нового в MS2. В двух словах — всё переписано с нуля, от miniShop осталось только название.
[miniShop2] Первый тест на скорость
Инструментарий программиста
Еще один текст с modcoach.info, в котором я рассказываю чем работаю с сервером.
Сразу говорю, разные Denwer и подобные приложения, эмулирующие GNU/Linux веб-сервер на Windows я не использую. Это потому, что на мой взгляд, разрабатывать сайты и приложения нужно в той среде, в которой он будет работать (или в очень похожей).
Не знаю, как сейчас дела у современных эмуляторов, но вряд ли у них есть php-apc, запуск заданий по cron, разные права доступа для разных юзеров, указание процессов php дляя каждого сайта, командный интерпретатор bash и прочие нативные фишки линуксового окружения.
Поэтому, мой выбор — свой собственный VPS или VirtualBox. Для первого случая заметка тут, а для второго — тут.
Не важно, что вы выберете, главное, что по определенному адресу у вас будет настоящий GNU/Linux. Шеф-повар рекомендует Ubuntu.
Сразу говорю, разные Denwer и подобные приложения, эмулирующие GNU/Linux веб-сервер на Windows я не использую. Это потому, что на мой взгляд, разрабатывать сайты и приложения нужно в той среде, в которой он будет работать (или в очень похожей).
Не знаю, как сейчас дела у современных эмуляторов, но вряд ли у них есть php-apc, запуск заданий по cron, разные права доступа для разных юзеров, указание процессов php дляя каждого сайта, командный интерпретатор bash и прочие нативные фишки линуксового окружения.
Поэтому, мой выбор — свой собственный VPS или VirtualBox. Для первого случая заметка тут, а для второго — тут.
Не важно, что вы выберете, главное, что по определенному адресу у вас будет настоящий GNU/Linux. Шеф-повар рекомендует Ubuntu.
[miniShop2] Работа с ajaxManager
Возможно, miniShop2 будет первым компонентом, 100% совместимым с ajaxManager. Во всяком случае, я очень стараюсь так сделать.
Работа с phpThumb
Не многие задумывались, что вместе с MODX Revolution поставляется и phpThumb. Это, фактически, единственная и самая крутая библиотека для работы с изображениями на PHP.
В MODX принято работать с ней через сниппет phpThumbOf, однако у него есть существенные недостатки, например серьёзные тормоза и странное кэширование. Поэтому, верным способом будет работа с библиотекой напрямую.
При разработке "Файлохранилища" мне пришлось покопаться в том, как устроен phpThumb и как он интегрирован в MODX, в результате чего появился универсальный рецепт использования этой библиотеки для генерации изображений.
Заодно решил известную проблему с генерацией уменьшенной копии, с обрезкой из левой верхней части картинки.
Описание для системных настроек MODX из словаря
Есть распространённая проблема: компоненты из репозитория обычно идут с системными настройками, которые выглядят примерно так:
А хотелось бы вот так:
Все потому, что у объекта modSystemSetting нет полей для хранения ключа записи в словаре, в отличии от параметров сниппетов или плагинов.
Лично мне было лень разбираться, откуда же берутся нормальные записи для настроек ядра, если в объекте и БД их нет, но сегодня я себя переборол и всё прояснилось.
А хотелось бы вот так:
Все потому, что у объекта modSystemSetting нет полей для хранения ключа записи в словаре, в отличии от параметров сниппетов или плагинов.
Лично мне было лень разбираться, откуда же берутся нормальные записи для настроек ядра, если в объекте и БД их нет, но сегодня я себя переборол и всё прояснилось.
IDE phpStorm как инструмент разработки в MODX
Долгое время я пользовался простыми и быстрыми редакторами для разработки, типа Geany и Notepad++. Просто не понимал, зачем мне тяжеловесная IDE, если и этих редакторов хватает с головой?
Я помню свой код, что откуда выходит и как работает, зачем мне подсказки от программы, которая грузится полторы минуты? Тем более, я люблю по-быстрому забежать на сервер, подправить пару опечаток и сохранить файл. Мне не нужно создавать проект, синхронизировать его с сервером и т.д.
Однако, всё поменялось, когда я написал miniShop. Компонент вышел большой, и со временем я понял, что просто запутываюсь в нём. Заодно я понял, что допустил много грубых ошибок, по незнанию — например доставучие уведомления о необъявленных переменных или ключах массива, те самые — E_NOTICE.
Поэтому, когда я засел за Tickets, сразу решил писать его в IDE phpStorm, чтобы таки разобраться в ней и упростить себе разработку. Поначалу было непросто, но я быстро втянулся.
Сразу говорю, всё освоено методом тыка, без чтения литературы или чьих-то инструкций. Подозреваю, что освоил я процентов 5 от общего функционала, однако и этот объем позволил мне работать радикально быстрее и выдавать в разы более качественный код.
Я помню свой код, что откуда выходит и как работает, зачем мне подсказки от программы, которая грузится полторы минуты? Тем более, я люблю по-быстрому забежать на сервер, подправить пару опечаток и сохранить файл. Мне не нужно создавать проект, синхронизировать его с сервером и т.д.
Однако, всё поменялось, когда я написал miniShop. Компонент вышел большой, и со временем я понял, что просто запутываюсь в нём. Заодно я понял, что допустил много грубых ошибок, по незнанию — например доставучие уведомления о необъявленных переменных или ключах массива, те самые — E_NOTICE.
Поэтому, когда я засел за Tickets, сразу решил писать его в IDE phpStorm, чтобы таки разобраться в ней и упростить себе разработку. Поначалу было непросто, но я быстро втянулся.
Сразу говорю, всё освоено методом тыка, без чтения литературы или чьих-то инструкций. Подозреваю, что освоил я процентов 5 от общего функционала, однако и этот объем позволил мне работать радикально быстрее и выдавать в разы более качественный код.
Неверная работа isError() в PHP 5.4
В последнее время появилось много жалоб на странные глюки в компоненте Tickets. Вот тут не редактируется тикет, а вот тут — не выводятся секции и комментарии.
Оказывается, всему виной функция isError() в классе modX::modProcessorResponse
Оказывается, всему виной функция isError() в классе modX::modProcessorResponse
public function isError() {
return empty($this->response) || empty($this->response['success']);
}