🔎 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 не страшен. Его мы мигом спарсим.