Импорт дефольтных данных в базу данных modExtra
Всем привет. Подскажите, как через resolvers при установке пакета добавлять данные в таблицы созданные через схему xPDO. Может есть какой-то пример? Кто-то уже делал такое?
Комментарии: 3
Я тупо в ресолвере через newObject добавляю. Если есть лучше вариант, то будет интересно узнать.
resolve.default_fields.php
resolve.default_fields.php
/** @var xPDOTransport $transport */
/** @var array $options */
/** @var modX $modx */
if ($transport->xpdo) {
$modx =& $transport->xpdo;
/** @var array $options */
switch ($options[xPDOTransport::PACKAGE_ACTION]) {
case xPDOTransport::ACTION_INSTALL:
$fields = [
[
'name'=>'res_id',
'label'=>'Мероприятие',
'dbtype'=>'int',
'precision'=>10,
'phptype'=>'integer',
'xtype'=>'tevent-univers-combo',
'sort'=>1,
'validate'=>'required',
'select_query'=>
'{
"parents":"0",
"template":"1"
}',
'filter'=>true,
'active'=>true,
],
///еще поля
];
foreach($fields as $field){
if(!$in_field = $modx->getObject('tEventField',['name'=>$field['name']])){
if($in_field = $modx->newObject('tEventField')){
$in_field->fromArray($field);
if(!$in_field->save()) $modx->log(xPDO::LOG_LEVEL_ERROR, "[tEvent] field {$field['name']} not add!");
}
}
}
$modx->log(xPDO::LOG_LEVEL_INFO, '[tEvent] Successfully add Default fields!');
break;
}
}
А сам ресолвер подключается в build.php? Или по умолчанию скрипт проходится по всем файлам из папки resolvers?
Я в старом modExtra делал. Там в build.config.php ресолверы подключаются
В новом modExtra build.php
А вы как данные в базу подключаете? Или еще не подключаете?
$BUILD_RESOLVERS = array(
'tables',
'chunks',
'default_fields',
//'setup',
//'office',
);
Главное после tables его включить. В tables сами таблицы создаются.В новом modExtra build.php
// Add resolvers into vehicle
$resolvers = scandir($this->config['resolvers']);
foreach ($resolvers as $resolver) {
if (in_array($resolver[0], ['_', '.'])) {
continue;
}
if ($vehicle->resolve('php', ['source' => $this->config['resolvers'] . $resolver])) {
$this->modx->log(modX::LOG_LEVEL_INFO, 'Added resolver ' . preg_replace('#\.php$#', '', $resolver));
}
}
Ресолверы сами подключаются из папки. Наверно их стоит переименовать 1tables.php и т.д. Может сработает. Проверять надо.А вы как данные в базу подключаете? Или еще не подключаете?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.