Come creare nodi usando node_save?


9

Sto cercando di migrare il mio attuale sito HTML in Drupal. Ho più di 80.000 pagine che devo migrare, quindi ho pensato di creare un modulo invece di stare seduto davanti a un computer per 50 anni. Sono stato in grado di creare uno script che estrae l'html da ogni directory e ora sono arrivato a un blocco stradale in cui ho bisogno di creare un nodo. Sto cercando di creare un nuovo nodo usando node_save(), ma quando viene eseguito node_save, ricevo un PDOExceptionerrore con tutto ciò che provo. Sto passando $node, che è un array che viene quindi inserito in un oggetto.

PDOException: in field_sql_storage_field_storage_write () (riga 424 di /srv/www/htdocs/modules/field/modules/field_sql_storage/field_sql_storage.module).

Ecco come stiamo attualmente creando il nodo, ma produce un errore:

$node= array(
    'uid' => $user->uid,
    'name' => $user->name,
    'type' => 'page',
    'language' => LANGUAGE_NONE,
    'title' => $html['title'],
    'status' => 1,
    'promote' => 0,
    'sticky' => 0,
    'created' => (int)REQUEST_TIME,
    'revision' => 0,
    'comment' => '1',
    'menu' => array(
        'enabled' => 0,
        'mlid' => 0,
        'module' => 'menu',
        'hidden' => 0,
        'has_children' => 0,
        'customized' => 0,
        'options' => array(),
        'expanded' => 0,
        'parent_depth_limit' => 8,
        'link_title' => '',
        'description' => '',
        'parent' => 'main-menu:0',
        'weight' => '0',
        'plid' => '0',
        'menu_name' => 'main-menu',
    ),
    'path' => array(
        'alias' => '',
        'pid' => null,
        'source' => null,
        'language' => LANGUAGE_NONE,
        'pathauto' => 1,
    ),
    'nid' => null,
    'vid' => null,
    'changed' => '',
    'additional_settings__active_tab' => 'edit-menu',
    'log' => '',
    'date' => '',
    'submit' => 'Save',
    'preview' => 'Preview',
    'private' => 0,
    'op' => 'Save',
    'body' => array(LANGUAGE_NONE => array(
        array(
            'value' => $html['html'],
            'summary' => $link,
            'format' => 'full_html',
        ),
    )),
        'validated' => true,
);

node_save((object)$node);

// Small hack to link revisions to our test user.
db_update('node_revision')
    ->fields(array('uid' => $node->uid))
    ->condition('vid', $node->vid)
    ->execute();

Risposte:


6

Penso che dovresti leggere Come creare a livello di codice nodi, commenti e tassonomie in Drupal 7 .

$node = new stdClass(); // We create a new node object
$node->type = "page"; // Or any other content type you want
$node->title = "Your title goes jere";
$node->language = LANGUAGE_NONE; // Or any language code if Locale module is enabled. More on this below *
$node->path = array('alias' => 'your node path'); // Setting a node path
node_object_prepare($node); // Set some default values.
$node->uid = 1; // Or any id you wish

// Let's add standard body field
$node->body[$node->language][0]['value'] = 'This is a body text';
$node->body[$node->language][0]['summary'] = 'Here goes a summary';
$node->body[$node->language][0]['format'] = 'filtered_html'; // If field has a format, you need to define it. Here we define a default filtered_html format for a body field

$node = node_submit($node); // Prepare node for a submit
node_save($node); // After this call we'll get a nid

perché il downvote?
vfclists,

6

Invece di lanciare un array in un stdClassoggetto, potresti provare a creare un nuovo stdClass()oggetto e quindi utilizzare node_object_prepare () per preparare l'oggetto alla creazione di un nuovo nodo e infine modificare manualmente i valori di uid, nome, titolo, lingua, corpo, ecc. Inoltre, assicurarsi di utilizzare node_submit () prima di salvare il nuovo nodo nel database.

Esempio: http://drupal.org/node/1173136


1

Il tuo problema è che stai provando a creare un nuovo nodo con nid = null e vid = null, che sta rovinando la tabella dei nodi mentre stai cercando di inserire nuovi record con il numero indice 0 - che sta creando un problema con voci duplicate e confuso nucleo drupal. A proposito - il core di drupal è vulnerabile per azioni come node_save non vedrà il problema e tenterà di inserire quel record nel db - che sta causando un errore sql - e lanciare un'eccezione DOP

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.