Node_save kullanarak düğümler nasıl oluşturulur?


9

Geçerli html sitemi Drupal'a geçirmeye çalışıyorum. Taşınmam gereken 80.000'den fazla sayfam var, bu yüzden 50 yıl boyunca bir bilgisayarın önünde oturmak yerine bir modül oluşturacağımı düşündüm. Her dizinden html ayıklayan bir komut dosyası oluşturmak mümkün ve şimdi bir düğüm oluşturmak için gereken bir yol bloğuna var. Kullanarak yeni bir düğüm oluşturmaya çalışıyorum node_save(), ancak node_save yürütüldüğünde, PDOExceptiondenediğim her şeyle ilgili bir hata alıyorum. Daha $nodesonra bir nesneye dökülen bir dizi olan geçiyorum .

PDOException: field_sql_storage_field_storage_write () 'de (/srv/www/htdocs/modules/field/modules/field_sql_storage/field_sql_storage.module satır 424).

Şu anda düğümü şu şekilde oluşturuyoruz, ancak bir hata üretiyor:

$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();

Yanıtlar:


6

Drupal 7'de programlı olarak düğümler, yorumlar ve sınıflandırmalar nasıl oluşturulacağını okumalısınız .

$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

neden iniş vekili?
vfclists

6

Bunun yerine bir içine bir dizi döküm stdClassnesne, yeni bir yaratma deneyebilirsiniz stdClass()nesne ve daha sonra kullanarak node_object_prepare yeni bir düğüm oluşturmak için nesneyi hazırlamak için () ve ardından nihayet elle uid, adı, unvanı, dil, beden, vb değerlerini değiştirerek Ayrıca, yeni düğümü veritabanına kaydetmeden önce node_submit () yöntemini kullandığınızdan emin olun .

Örnek: http://drupal.org/node/1173136


1

Sorununuz, nid = null ve vid = null ile yeni bir düğüm oluşturmaya çalışmanızdır; bu, yinelenen girişler sorunu yaratan dizin numarası 0 ile yeni kayıtlar eklemeye çalışırken düğüm tablosunu bozar ve kafa karıştırıcı drupal çekirdek. Bu arada - drupal core node_save gibi eylemler için savunmasızdır ve sorunu görmez ve bu kaydı bir sql hatasına neden olan ve bir PDO istisnası atarak db'ye eklemeye çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.