Jump to main content Jump to doc navigation

xPDO::addPackage

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

Синтаксис

API Docs: https://api.modx.com/revolution/2.2/db_core_xpdo_xpdo.class.html#\xPDO::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 (т.е. во время выполнения), иначе ваш пакет не будет загружен правильно!

Важное замечание: значение префикса таблиц базы данных $tablePrefix для вашего пакета должно! совпадать с общепринятым префиксом для всех таблиц базы данных MODX, иначе вы можете получить далеко идущие последствия в виде ошибок. Префикс MODX можно и нужно менять (например, для Усиления защиты), главное помнить, что префикс в пакете и в MODX должны совпадать. Если вы не очень понимаете, о чем идет речь, не указывайте этот параметр $tablePrefix, в этом случае будет использовано значение по умолчанию - _modx


Функция 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 'Возникли проблемы при установке вашего пакета';
}

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

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

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

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

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

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

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

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Jens Wittmann – Gestaltung & Entwicklung
  • Fabian Christen
  • Digital Penguin
  • Dannevang Digital
  • Sepia River Studios
  • CrewMark
  • Chris Fickling
  • deJaya
  • Following Sea
  • Anton Tarasov
  • eydolan
  • Raffy
  • Lefthandmedia
  • Murray Wood
  • Snow Creative
  • Nick Clark
  • Helen
  • JT Skaggs
  • krisznet
  • YJ
  • Yanni
  • Richard

Budget

$366 per month—let's make that $500!

Learn more