Дмитрий Середюк
С нами с 07 декабря 2014; Место в рейтинге пользователей: #213[MODX/Laravel] DevDocker - удобная разработка под Linux
Всем приветики, в общем ни для кого не секрет что докер — это шикарная магическая штука и где то там его активно используют но не в modx конечно, где код до сих пор пишут в браузере. В общем 4 года я был в поиске оптимального решения как правильно и удобно вести разработку проектов (раньше на MODX, сейчас на фреймворках) и в итоге могу точно заявить, что я нашел идеальное решение! Под катом я расскажу все что я пробовал за 4 года и минусы каждого решения, ну а не терпеливые могут просто посмотреть видео сборки, которая решает их все или перейти сразу к гитхабу:
Видео
GitHub
Избавляемся от ошибки «modAction support is deprecated» в старых пакетах
Если у вас есть дополнение, которое вы делали ещё на первой версии modExtra, то при его установке сейчас вы будете видеть такое сообщение об ошибке:
Исправить её не сложно, но раньше всё не доходили руки.
modAction support is deprecated since version 2.3.0. Support for modAction has been replaced with routing based on a namespace and action name. Please update the extra with the namespace simpleupdater to the routing based system.
Исправить её не сложно, но раньше всё не доходили руки.
Как формируется menuindex?
Приветствую
Не до конца понимаю алгоритм работы menuindex ресурса в MODX. Как я понял, menuindex отображает порядок следования материалов в меню или в его ветках, но есть одна вещь, в которой прошу вашего совета.
Итак, имеем, к примеру, вложенное меню. По логике, да и по факту тоже, первый пункт меню или подменю должен быть обозначен нулем — так оно и есть, но дальше начинаются непонятные мне вещи.
Второй пункт меню в админке может быть обозначен 1, 2 или 3 (на скриншоте),
а в базе данных может отличаться на одну цифру от той, что указана в админке. Ну ладно, значение в админку подставляется из БД, значит, дело в кеше. Предположим, что мы его почистили и в админке стали отображаться фактические данные из админки, но и тут есть странность. В БД могут быть два одинаковых menuindex или пропуски между ними (все на втором скриншоте).
Почему так происходит, поясните пожалуйста такое поседение?
Не до конца понимаю алгоритм работы menuindex ресурса в MODX. Как я понял, menuindex отображает порядок следования материалов в меню или в его ветках, но есть одна вещь, в которой прошу вашего совета.
Итак, имеем, к примеру, вложенное меню. По логике, да и по факту тоже, первый пункт меню или подменю должен быть обозначен нулем — так оно и есть, но дальше начинаются непонятные мне вещи.
Второй пункт меню в админке может быть обозначен 1, 2 или 3 (на скриншоте),
а в базе данных может отличаться на одну цифру от той, что указана в админке. Ну ладно, значение в админку подставляется из БД, значит, дело в кеше. Предположим, что мы его почистили и в админке стали отображаться фактические данные из админки, но и тут есть странность. В БД могут быть два одинаковых menuindex или пропуски между ними (все на втором скриншоте).
Почему так происходит, поясните пожалуйста такое поседение?
SMSC.ru хук
Всем привет, хотела запостить в modstore, но там уже есть похожие платные дополнения.
Хук для FormIt, который отправляет SMS.
Нужно добавить _smschook_ в _hooks_ вызова сниппета (перед mail). В системных настройках Formit указать ключи:
Хук для FormIt, который отправляет SMS.
Нужно добавить _smschook_ в _hooks_ вызова сниппета (перед mail). В системных настройках Formit указать ключи:
- Логин — [[++smschook_login]]
- Пароль — [[++smschook_password]]
- Телефоны — [[++smschook_phones]] в формате КОД СТРАНЫ + НОМЕР ТЕЛЕФОНА (без +), можно указать несколько через запятую
- smschook_tpl — чанк по аналогии чанка для писем
- smschook_phones — сюда можно передать телефоны
{'!AjaxForm' | snippet : [
'form' => 'tpl.AjaxForm.example',
'emailTpl' => 'contactEmailTpl',
'hooks' => 'smschook,email',
'emailFrom' => $_modx->config.emailsender,
'emailFromName' => $_modx->config.site_name,
'emailSubject' => 'Сообщение с сайта' ~ $_modx->config.site_name,
'emailTo' => $_modx->config.emailsender,
'validate' => 'name:equired',
'smschook_tpl' => 'smscTpl',
]}
Как вывести новое поле в админке у заказов?
Написал такой плагин для нового поля и оно работает выводится во вкладке адрес и его можно редактировать.
Не подскажите, как это сделать?
<?php
switch ($modx->event->name) {
case 'OnMODXInit':
$modx->loadClass('msOrder');
$modx->map['msOrder']['fields']['speed'] = '';
$modx->map['msOrder']['fieldMeta']['speed'] = array(
'dbtype' => 'varchar',
'precision' => 100,
'phptype' => 'string',
'null' => true,
'default' => ''
);
case 'msOnManagerCustomCssJs':
if ($page != 'orders')
return;
$modx->controller->addHtml("
<script type='text/javascript'>
Ext.ComponentMgr.onAvailable('minishop2-window-order-update', function(){
var newField = {
border: false,
layout: 'column',
items: [
{
border: false,
columnWidth: 0.5,
autoHeight: true,
layout: 'form',
items: {
xtype: 'textfield',
name: 'speed',
fieldLabel: 'Скорость доставки',
anchor: '100%'
}
}
],
autoHeight: true,
}
this.fields.items[2].items.unshift(newField);
});
</script>");
break;
}
Но не могу вывести этот новый столбик в таблице заказы в админкеНе подскажите, как это сделать?
[tvSuperSelect] 1.2.2 Кастомайз по полной программе!
Ускоряем массовое обновление ресурсов в 3 раза
Массовая выгрузка ресурсов, не такая уж простая задача, как может показаться на первый взгляд. Много подводных камней, касающихся улучшения производительности скрипта. Особенно неприятно, когда тормозит скорость работы из-за функционала ядра MODX.
Так, например, я столкнулся с куском кода в ядре, который увеличивает время выгрузки большого кол-ва товаров в ~3 раза, выполняя одно и то же ресурсоёмкое действие каждый раз, когда скрипт запускает обновление ресурса через процессор modResourceUpdateProcessor.
Сразу оговорю тот момент, что я не считаю этот кусок кода в ядре лишним или вредным, нет! Я полагаю, что этот код при обновлении большого кол-ва ресурсов можно выполнить самостоятельно по окончании работы скрипта выгрузки.
Я говорю вот об этой строчке кода. Давайте попробуем разобраться, что же с ней не так!
Так, например, я столкнулся с куском кода в ядре, который увеличивает время выгрузки большого кол-ва товаров в ~3 раза, выполняя одно и то же ресурсоёмкое действие каждый раз, когда скрипт запускает обновление ресурса через процессор modResourceUpdateProcessor.
Сразу оговорю тот момент, что я не считаю этот кусок кода в ядре лишним или вредным, нет! Я полагаю, что этот код при обновлении большого кол-ва ресурсов можно выполнить самостоятельно по окончании работы скрипта выгрузки.
Я говорю вот об этой строчке кода. Давайте попробуем разобраться, что же с ней не так!
mixedImage - custom TV
mixedImage — modx custom TV
Версия 2.0:
— Изменен внешний вид
— Добавлены новые возможности:
Возможность руками вписать путь к файлу
Новая настройка при создании TV: Удаление файла, если выставлено «Да», то при очистке поля файл физически удаляется с сервера
Открывает сразу папку указаную в настройках TV (от корня источника файлов)
— Поправлено несколько небольших багов:
работа системной настройки «Загружать только при редактировании»
опечатки в лексиконах
правильный текст ошибок
ошибка транслитерации если файл уже существует
_______________________________ _________________________________
Добавлена опция для ресайза загружаемого изображения
Добавляет новый тип TV поля: Смешанная загрузка файла/Mixed Image Input
Является сместью FastUploadTV и стандартной загрузки файлов, часть кода взята из FastUploadTV
Версия 2.0:
— Изменен внешний вид
— Добавлены новые возможности:
Возможность руками вписать путь к файлу
Новая настройка при создании TV: Удаление файла, если выставлено «Да», то при очистке поля файл физически удаляется с сервера
Открывает сразу папку указаную в настройках TV (от корня источника файлов)
— Поправлено несколько небольших багов:
работа системной настройки «Загружать только при редактировании»
опечатки в лексиконах
правильный текст ошибок
ошибка транслитерации если файл уже существует
_______________________________ _________________________________
Добавлена опция для ресайза загружаемого изображения
Добавляет новый тип TV поля: Смешанная загрузка файла/Mixed Image Input
Является сместью FastUploadTV и стандартной загрузки файлов, часть кода взята из FastUploadTV
Автоматическая смена источника ms2gallery в зависимости от шаблона
Когда у вас есть зависимость между источником файлов ms2gallery и шаблоном страницы, а желания переключать его вручную — нет.
Экспорт товаров Minishop2 в CSV – без программирования
Задача: экспорт товаров в CSV с возможностью выгрузки всех опций или tv как захочется.
Сложность: 0 знаний в php :-)
Решение:
Сложность: 0 знаний в php :-)
Решение:
- Создаем новый ресурс: > опубликован > не показывать в меню > тип содержимого: HTML > не использовать HTML редактор > заморозить uri c .csv в конце.
- Вызываем msProducts с нужными настройками, у меня так:
{'!msProducts'|snippet:[ 'hideContainers' => 1, 'parents' => 3, 'limit' => 150, 'depth' => 3, 'includeTV' => '1', 'includeTVs' => 'video', 'sortby' => 'menuindex', 'sortdir' => 'DESC', 'showLog' => 1, 'tplFirst' => '@FILE chunks/export/first_row_drom.tpl', 'tpl' => '@FILE chunks/export/eng_drom.tpl' ]}
- Сохраняем