Для разработчиков
ExtJs для новичков. Админка загрузилась. ч.1
В прошлой статье мы попытались понять как формируется интерфейс админки на ExtJs. Теперь давайте попробуем разобраться, что можно сделать интерфейсом, который нам нарисовал ExtJs.
В ExtJs за каждым элементом интерфейса (панель, окно, таблица, кнопка, элемент формы) стоит специальный объект, называемый компонентом. Он отвечает за управление элементом интерфейса — создание, отображение, скрытие, удаление. В админке MODX все элементы «являются» компонентами ExtJs, за исключением верхнего меню. Разницу можно увидеть, если заглянуть в исходный код страницы — у меню простая и привычная HTML структура (ul > li > a), а если глянем на элемент, созданный ExtJs, то увидим, что он обернут дополнительными тегами. Например, вот код кнопки тулбара дерева ресурсов
В ExtJs за каждым элементом интерфейса (панель, окно, таблица, кнопка, элемент формы) стоит специальный объект, называемый компонентом. Он отвечает за управление элементом интерфейса — создание, отображение, скрытие, удаление. В админке MODX все элементы «являются» компонентами ExtJs, за исключением верхнего меню. Разницу можно увидеть, если заглянуть в исходный код страницы — у меню простая и привычная HTML структура (ul > li > a), а если глянем на элемент, созданный ExtJs, то увидим, что он обернут дополнительными тегами. Например, вот код кнопки тулбара дерева ресурсов
<span unselectable="on" class="x-btn x-btn-small x-btn-icon-small-left tree-new-static-resource x-btn-noicon" id="ext-comp-1062" style="">
<em class="">
<button type="button" id="ext-gen139" class=" x-btn-text" style=""> </button>
</em>
</span>
Принцип загрузки админки на ExtJs. Для новичков
В этой статье хочу немного развеять тучи над механизмом работы админки, логика которой основана на ExtJs. Для людей, далеких от php и javascript, это будет набором непонятных слов. А вот те, кого уже не пугают такие термины как ООП, наследование, конструкторы, поймут о чем я тут буду говорить. Это не курс. Я просто попытаюсь систематизировать информацию для понимания общего принципа работы админки.
В сети достаточно много различной информации об ExtJs. Есть отличный курс Василия, по которому многие из нас учились делать свои дополнения. В нем он разбирает тему создания различных ExtJs объектов. Я не буду повторять, то что у него уже разобрано, а постараюсь на простом языке сделать короткую выжимку. Начнем.
В сети достаточно много различной информации об ExtJs. Есть отличный курс Василия, по которому многие из нас учились делать свои дополнения. В нем он разбирает тему создания различных ExtJs объектов. Я не буду повторять, то что у него уже разобрано, а постараюсь на простом языке сделать короткую выжимку. Начнем.
Синхронизация с 1с

Нужны добровольцы с разными версиями выгрузки из 1с в формате commerceML 2
[modExtra] Update таблиц своего компонента
Добрый день!
Все мы знаем, что MODX прекрасен мощью решений с помощью компонентов. Я, например, всегда отдаю заказчику сайт в виде компонента, содержащего нужные элементы, зависимости от других компонентов, инициализацию нужных опций и т.д. В этом мне всегда помогал modExtra.
Но вот в один прекрасный момент я задумался, как сделать пользовательские таблицы в своём компоненте таким образом, чтобы при апдейте компонента они были способны расширяться, да и вообще поддерживаться в актуальном состоянии.
Итак задача:
Все мы знаем, что MODX прекрасен мощью решений с помощью компонентов. Я, например, всегда отдаю заказчику сайт в виде компонента, содержащего нужные элементы, зависимости от других компонентов, инициализацию нужных опций и т.д. В этом мне всегда помогал modExtra.
Но вот в один прекрасный момент я задумался, как сделать пользовательские таблицы в своём компоненте таким образом, чтобы при апдейте компонента они были способны расширяться, да и вообще поддерживаться в актуальном состоянии.
Итак задача:
- У нас есть файл схемы mycomponent.mysql.schema.xml, который поставляется вместе с компонентом (или его новой версией) и содержит актуальную информацию о структуре пользовательских таблиц.
- У нас есть БД в которой может не быть наших таблиц (установка с нуля), а могут быть (как правильной, так и неправильной структуры).
Особенности метода xPDOObject::save() + транзакции
В продолжение вот этой темы опубликовал новую статью на хабре habrahabr.ru/post/265485/
Крайне настоятельно рекомендую к прочтению экспертам.
Крайне настоятельно рекомендую к прочтению экспертам.
Вызов окна MODx.Window на ExtJs
Как не надо расширять MODX-процессоры
В MODX-2.4.0 появился новый процессор updatefromelement.class.php by Argnist, пришедший на замену обычному процессору updatefromelement.php. Заменять non-classed процессоры конечно дело хорошее, но делать надо это крайне осторожно и обдуманно.
Сразу уточню, что этот процессор используется для обновления параметров элементов (типа шаблонов, сниппетов и т.п.)
Сразу уточню, что этот процессор используется для обновления параметров элементов (типа шаблонов, сниппетов и т.п.)

Не ставятся некоторые modx-пакеты (Ubuntu 14.04+)
В очередной раз после обновления modx наступил на грабли при установке msearch2 (иногда бывает и у других пакетов), возможно кому-то будет полезно:
Итак, имеем ubuntu 14.04+ и modx revo
при установке msearch2 процесс останавливается на Trying to download russian dictionary…
Суть проблемы в файле: /your_site/core/packages/msearch2-x.y.z-pl/modCategory/%hash%.resolve.dictionaries.resolver (стр. 62)
После создания нового объекта PclZip нет проверки его на null, а стоило бы, потому как в некоторых сборках PHP на ubuntu функция gzopen называется gzopen64, и в /core/xpdo/compression/pclzip.lib.php PHP радостно падает, так как о gzopen64 ему ничего не известно.
Итак, имеем ubuntu 14.04+ и modx revo
при установке msearch2 процесс останавливается на Trying to download russian dictionary…
Суть проблемы в файле: /your_site/core/packages/msearch2-x.y.z-pl/modCategory/%hash%.resolve.dictionaries.resolver (стр. 62)
После создания нового объекта PclZip нет проверки его на null, а стоило бы, потому как в некоторых сборках PHP на ubuntu функция gzopen называется gzopen64, и в /core/xpdo/compression/pclzip.lib.php PHP радостно падает, так как о gzopen64 ему ничего не известно.
Изменение размера шрифта панелей и меню в PhpStorm
Изменить свойства шрифта окна редактора проблем не составляет.
А вот как в ubuntu-подобных можно изменить, например, размер шрифта меню, вкладок и панелей.
1. Создать такой файл, дать ему любое имя и сохранить, например, в домашней директории
А вот как в ubuntu-подобных можно изменить, например, размер шрифта меню, вкладок и панелей.
1. Создать такой файл, дать ему любое имя и сохранить, например, в домашней директории
style "user-font"
{
font_name="Verdana 12"
}
widget_class "*" style "user-font"
2. Запустить PhpStorm GTK2_RC_FILES=путь/к/сохраненному/файлу путь/к/phpstorm.sh
Вот что получилось.
Симпатичный вывод массивов
Может пригодится кому. В сниппетах при разработке часто по быстрому приходится просмотреть массив и использовать print_r. И сложно его разобрать.
Гораздо симпатичнее будет вывод, если обернуть его в пару строк:
echo "";
Гораздо симпатичнее будет вывод, если обернуть его в пару строк:
echo "<div style='font-size:9pt; color:#000; background:#fff; border:1px dashed #000;'>";
echo "<pre style='padding:10px;'>";
print_r($array);
echo "
";echo "";