Jump to main content Jump to doc navigation

xPDO::addPackage

Это используется для загрузки классов отображения ORD xPDO, которые определяют объекты вашего пакета. Соглашение MODX заключается в том, что эти классы хранятся в каталоге вашего пакета "model/". Загрузка этих классов позволяет xPDO взаимодействовать с вашим пользовательским объектом и расширением таблиц базы данных, которые они представляют. Функциональность отключена из файла metadata.inc.php в указанном каталоге ($path + $pkg). Эти метаданные показывают, как MODX знает, какие имена классов активны и расширяют ли какие-либо классы основные классы. Конечный результат немного похож на функцию автозагрузки.

Синтаксис

API Docs: http://api.modx.com/xpdo/xPDO.html#addPackage

boolean addPackage ([string $pkg = ''], [string $path = ''], [string $tablePrefix = ''])
  • $pkg соответствует имени подпапки в указанном $path. Подпапка содержит множество your_table.class.php файлов и чаще всего подпапку mysql, которая содержит дополнительные файлы карт и классов, например, your_table.class.php и your_table.map.inc.php
  • $path - это полный путь к папке, содержащей пакеты, включая имя пакета, на которое вы указали в первом аргументе.
  • $tablePrefix - префикс таблицы для вашего пакета. Вы ДОЛЖНЫ включать правильный префикс при вызове addPackage (т.е. во время выполнения), иначе ваш пакет не будет загружен правильно!

Эта функция возвращает true в случае успеха и false при ошибке. Проверьте логи на ошибку.

Пример

Чаще всего это использует константу MODX_CORE_PATH и указывает на каталог вашего пакета "model/":

$modx->addPackage('mypkg',MODX_CORE_PATH.'components/mypkg/model/','mypkg_');

Другой пример

Изображенная структура файла сниппета FormIt.

Если бы вы должны были загрузить один из его пакетов с помощью метода addPackage (), вы могли бы использовать один из трех доступных пакетов (formit, recaptcha или stopforumspam) в качестве первого аргумента, а путь к папке, содержащей его, в качестве второго. аргумент, например

$xpdo->addPackage('recaptcha', MODX_CORE_PATH.'components/formit/model/');

Тестирование

$xpdo->setLogLevel(xPDO::LOG_LEVEL_INFO);
$xpdo->setLogTarget('ECHO');
if (!$xpdo->addPackage('my_package','/path/to/docroot/core/components/my_package/model/','pkg_')) {
    print 'There was a problem adding your package.';
}

$path (2-й аргумент) должен существовать, иначе будет зарегистрирована ошибка. Но если 1-й аргумент $pkg не является подпапкой внутри $path, ошибка не выдается.

При сбое эта функция записывает подробные сообщения об ошибках в журнал.

Добавление пакетов из других баз данных

Метод addPackage() работает с любым экземпляром объекта xPDO, который имеет допустимые файлы классов и карт. Если вам нужно подключиться к другой базе данных, создайте новый экземпляр xPDO, используя действительные критерии входа в систему, например, как описано здесь: Соединения с базой данных и xPDO

Создание таблиц

Недостаточно просто загрузить пакет и его классы PHP. Если ваш пакет определяет таблицы базы данных, возможно, вам придется создать таблицы. Обычно это делается для вас, когда вы устанавливаете пакет, но если вы делаете что-то вручную, вы захотите взглянуть на функцию xPDOManager.createObjectContainer.

Смотрите также