Если у вас возникнет надобность выполнять
операции импорта из какого-либо модуля, это можно сделать с помощью
кода, приведенного ниже.
Предположим, что настройки нашего драйвера находятся в массиве $aDriverData
$oDriver = AMI::getResource( 'import_driver/my_driver' );
$oDriver
->setModId( $myModId )
->setContentEncoding( 'utf-8' )
->setResourceId( 'news' )
;
for ( $i = 0; $i < count ( $aDriverData [ 'table_fields' ]); $i ++){
$aField = array (
'name' => $aDriverData [ 'import_fields' ][ $i ],
'mapTo' => $aDriverData [ 'table_fields' ][ $i ],
);
$oDriver ->addImportField( $aField );
}
$aSettings = array ();
if (! empty ( $aDriverData [ 'driver_settings' ])){
foreach ( explode ( ',' , $aDriverData [ 'driver_settings' ]) as $fieldName ){
if (isset( $aDriverData [ $fieldName ])){
$aSettings [ $fieldName ] = $aDriverData [ $fieldName ];
}
}
}
$oDriver
->setRequestSettings( $aSettings )
->initConnection();
if ( $oDriver ->isImportResourceAvailable()){
$oDriver
->readData()
->closeConnection();
if ( $oDriver ->doImport() && $oDriver ->isImported()){
$oDriver ->save();
return true;
} else {
return false;
}
} else {
return false;
}
|
Поддерживаемые кодировки соединения - 'utf-8', 'utf-16', 'utf-32', 'windows-1251', 'windows-1252', 'koi8-r'.
Необходимо отметить, что наличие модели данных для конечной таблицы импорта необходимо, если только вы не перегружаете метод save(), и, в таком случае, вызывать метод setResourceId() не нужно.