Drupal 6: Programmatisches Anlegen einer Node über drupal_execute

Autor: Sven am Tue, 29.09.2009 - 12:23

Beispielfall:

Der Kunde verfügt über einen Datenbestand von mehr als 500 Produkten, die in das neue System als Nodes übernommen werden sollen. Alle 500 Produkte von Hand anzulegen würde lange dauern und aufgrund der eintönigen Arbeit die Stimmung massiv senken. Drupal verfügt hier über die Möglichkeit mit drupal_execute bzw. node_save Nodes programmatisch anlegen zu können. Im Folgenden wird die Umsetzung einer Importfunktion demonstriert.

Eine Erweiterung für CCK Felder und Dateianhänge wird hier noch folgen.

/**
 * import nodes programmatically
 */
function import_nodes() {
  // definition of the form_id (page is the node type)
  $form_id = 'page_node_form';

  // include node.pages for functionality
  module_load_include('inc', 'node', 'node.pages');

  // set the node type
  $node = array('type' => 'page');

  // provide data for node
  $node_data = array(
    'values' => array(
      'title' => 'node title',
      'name' => $GLOBALS['user']->name,
      'uid' => $GLOBALS['user']->uid,
      'body' => 'node body',
      'taxonomy' => array(
        $vid => array($termid, $termid),
      ),
      'field_content_field1' => array( // for cck textfields
        0 => array(
          'value' => 'text in cck field 1',
        ),
      ),
      'status' => 1,
      'promote' => 0,
      'op' => t('Save'),
    ),
  );

  // save node with drupal_execute
  drupal_execute($form_id, $node_data, (object)$node);

  // the node id is saved in $node_data
  $nid = $node_data['nid'];

  return '';
}