Про 2.4+ пока не слышал, что ошибку исправили.
Ты про эту?
Я пока не отписался с подробностями, но коротко: выяснил в чем проблема. Они давно уже вынесли расширяющие пакеты из системных настроек в отдельную таблицу, но с этим у них косяков куча (я про них им писал еще в 13-ом году), в итоге у них чтение этих записей есть, а создания нет (да, и такое бывает :)). При этом именно при обновлении MODX фигачит эти настройки в отдельную таблицу, но MODX при инициализации по разному обрабатывает данные расширяющих пакетов из системных настроек и отдельной таблицы. В общем, в большинстве случаев помогает просто очистка таблицы modx_extension_packages (только не забывает про бекапы).
Да и при обновлении мне несложно файлы обновить, всё равно ведь в ядро лезть надо :)
Если ты все правильно делаешь, то в ядро не придется лезть.
Единственно, что я сейчас исключил — это правку базы руками. Я просто в установочном пакете сразу данные про это поле прописываю в modx.mysql.schema.xml — и при установке всё уже есть.
Ты и это можешь исключить. Когда пакет устанавливается, ты можешь инициировать свой модуль и выполнить добавление колонки средствами самого MODX-а.
Вот смотри пример:
<?php $pkgName = 'modImporter'; $pkgNameLower = strtolower($pkgName); if ($object->xpdo) { $modx =& $object->xpdo; $modelPath = $modx->getOption("{$pkgNameLower}.core_path",null,$modx->getOption('core_path')."components/{$pkgNameLower}/").'model/'; switch ($options[xPDOTransport::PACKAGE_ACTION]) { case xPDOTransport::ACTION_INSTALL: case xPDOTransport::ACTION_UPGRADE: if ($modx instanceof modX) { $modx->addExtensionPackage($pkgNameLower, "[[++core_path]]components/{$pkgNameLower}/model/", array( // 'serviceName' => $pkgName, // 'serviceClass' => $pkgName, )); $modx->addPackage($pkgNameLower, MODX_CORE_PATH . "components/{$pkgNameLower}/model/", array( // 'serviceName' => $pkgName, // 'serviceClass' => $pkgName, )); $manager = $modx->getManager(); $manager->addField('modResource', 'externalKey'); $manager->addIndex('modResource', 'externalKey'); $modx->log(xPDO::LOG_LEVEL_INFO, 'Adding ext package'); } break; case xPDOTransport::ACTION_UNINSTALL: if ($modx instanceof modX) { $modx->removeExtensionPackage($pkgNameLower); } break; } } return true;
Это вот сюда фигачится: github.com/MODX-Club/MODX_SamplePackage/blob/master/_build/resolvers/resolver.register.php
Только в транспортере надо подключить резолвер.