Импорт дефольтных данных в базу данных modExtra

Всем привет. Подскажите, как через resolvers при установке пакета добавлять данные в таблицы созданные через схему xPDO. Может есть какой-то пример? Кто-то уже делал такое?
SEQUEL.ONE
20 февраля 2020, 21:15
modx.pro
1
305
0

Комментарии: 3

Александр
19 марта 2020, 13:52
1
+1
Я тупо в ресолвере через newObject добавляю. Если есть лучше вариант, то будет интересно узнать.
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;

	}
}
    SEQUEL.ONE
    19 марта 2020, 14:00
    0
    А сам ресолвер подключается в build.php? Или по умолчанию скрипт проходится по всем файлам из папки resolvers?
      Александр
      20 марта 2020, 06:33
      0
      Я в старом modExtra делал. Там в build.config.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 и т.д. Может сработает. Проверять надо.
      А вы как данные в базу подключаете? Или еще не подключаете?
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3