web-gelistirme-sc.com

Bir düğümü programlı olarak nasıl çoğaltırım?

Alıcı olarak yeni bir e-posta adresi ile yaptığım bir web formunun bir kopyasını oluşturmak istiyorum.

Düğümü node_load ile yükledikten sonra, node_save ile kaydedebilir miyim? Bu yeni zaman damgaları ve kimlikleri olan yeni bir düğüm yaratacak mı?

Oluşturulan yeni düğümün boşluğunu nasıl alabilirim?

11
Arosboro

Düğüm kimliğini unset($node->nid) ile ayarlamanız yeterlidir ve node_save () yeni bir düğüm oluşturur.

node_save() klasöründen yürütülen kod şudur:

// Insert a new node.
$node->is_new = empty($node->nid);
// ...
if ($node->is_new) {
  _node_save_revision($node, $user->uid);
  drupal_write_record('node', $node);
  db_query('UPDATE {node_revisions} SET nid = %d WHERE vid = %d', $node->nid, $node->vid);
  $op = 'insert';
}    

drupal_write_record () son argümanı geçilmez; Bu, işlevin var olan bir veritabanı satırını güncellemeyeceği anlamına gelir.

Düğüm nesnesi node_save() ile kaydedildikten sonra, $node->nid Yeni oluşturulan veritabanı satırı için düğüm kimliğini içerir.

17
kiamlaluno

Bunu bir cevap olarak göndermek zorunda kaldım, çünkü sistem yorum yapmadan önce 50 itibar puanına sahip olmanızı sağlar.

Her neyse, @koivo ve cevabına yanıt olarak. Sadece benim için eklemek istedim, ayrıca $node->vid hile yaptı. Ayarlamayı kaldırma ve kaydetme kodum

// Load a node
$node = node_load(1);

// unset version and node id's
unset($node->nid);
unset($node->vid);
unset($node->path);

// Save the copy
node_save($node);
6
Jorge Calderon

çoğaltma modülü öğesini deneyin.
Son zamanlarda yaptığım bir sitede işleri kolayca klonlayıp değiştirmem gerekiyordu ve bu modülün iyi çalıştığını gördüm.
Kullanmanın ne kadar kolay olduğunu görmek için replicate.api.php dosyasına bakın.

2
2pha

D7'de unset($node->nid) nolu düğüm kimliğini ve unset($node->vid) nolu her ikisini de ayarlamalısınız. Belirli bir terim referansı olan (bu terim kimliğini değiştirerek) belirli bir tür (ürün) düğümleri klonlamak için bir form oluşturmak. İşte son başvuru:

function MYMODULE_form_submit($form, &$form_state) {
    $old_tid = $form_state['values']['old_tid'];
    $new_tid = $form_state['values']['new_tid'];

    $query = new EntityFieldQuery();
    $result = $query
    ->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', 'product')
    ->fieldCondition('field_some_term_reference', 'tid', $old_tid)
    ->execute();

    foreach ($result['node'] as $product) {
        $node = node_load($product->nid);
        $node->field_some_term_reference[LANGUAGE_NONE][0]['tid'] = $new_tid;
        unset($node->nid);
        unset($node->vid);
        node_save($node);
    }   
}

Zaman damgalarını ve _ $node->uid de.

2
leymannx