dimaseo Dimaseo

Drupal 7. Импорт XML (шаблон)

🔎 Drupal 7
14 фев 2011

Иногда приходится сталкиваться с необходимостью импорта материалов, представленных в xml в Drupal. Заготовлю я себе шаблон, ну и Вы можете пользоваться...

Навеяно статьей на blogview.ru для Drupal 6

//Убиваем время выполнения
set_time_limit(0);
 
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
 
//Можно подгрузить существующую ноду - посмотреть на поля
//$sampleNode = node_load(1);
//echo "<PRE>" . print_r($sampleNode, TRUE) . "</pre>";
 
$url = "http://test.ru/test.xml";
$page = file_get_contents($url);
$xml = simplexml_load_string($page);
$items = $xml->xpath("//*[name()='item_name']");
foreach ($items as $item) 
{
$node = new StdClass();
$node->type 	= '_news';
$node->uid 		= 1;
$node->created 	= strtotime($item->update);
$node->changed 	= strtotime($item->update);
$node->status 	= 1;
$node->comment 	= 0;
$node->promote 	= 1;
$node->sticky 	= 0;
$node->language = 'ru';
$node->title 	= strval($item->name);
$node->field_dop_id['ru'][0]['value'] = strval($item->attributes()->id);
$node->body['ru'][0]['value'] = strval($item->description);
$node->body['ru'][0]['summary'] = ""; //тизер
$node->body['ru'][0]['format'] = 'filtered_text';
 
//Если хотим заполнить поле "ссылка на термин" 
if( isset($item_vac->employment) )
{
$country_name = strval($item->country->name);
$country_tid = db_query("SELECT tid FROM {taxonomy_term_data} WHERE vid = :vid AND name = :name", array(
  ':vid' => 3, //id словаря
  ':name' => $country_name,
))->fetchField();
$node->field_country['ru'][0]['tid']=$country_tid;
}
//и т.д.
 
//echo "<PRE>" . print_r($node, TRUE) . "</pre>";
//$node = node_submit($node);
node_save($node);
//sleep(1);
}

Теперь нам никакой XML не страшен. Его мы мигом спарсим.