إنني أتطلع إلى إنشاء نسخة من نموذج ويب قمت بإنشائه ، بعنوان بريد إلكتروني جديد كمستلم.
بعد تحميل العقدة باستخدام node_load ، هل يمكنني حفظها باستخدام node_save؟ هل سيؤدي ذلك إلى إنشاء عقدة جديدة مع طوابع زمنية وهويات جديدة؟
كيف يمكنني الحصول على nid للعقدة الجديدة التي تم إنشاؤها؟
فقط قم بإلغاء تعيين معرف العقدة مع unset($node->nid)
، و node_save () ستنشئ عقدة جديدة.
الشفرة المنفذة من node_save()
هي الرمز التالي:
// 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 () ؛ هذا يعني أن الوظيفة لن تقوم بتحديث صف قاعدة بيانات موجود.
بمجرد حفظ كائن العقدة باستخدام node_save()
، يحتوي $node->nid
على معرف العقدة لصف قاعدة البيانات الذي تم إنشاؤه حديثًا.
اضطررت لنشر هذا كإجابة لأن النظام يجعلك تمتلك 50 نقطة سمعة قبل أن تتمكن من التعليق.
على أي حال ، ردًا علىkoivo وإجابته. أردت فقط أن أضيف ذلك بالنسبة لي ، وإلغاء تعيين $node->vid
فعل الخدعة. لذا فإن الكود الخاص بي لإلغاء التوفير والحفظ هو
// 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);
حاول وحدة تكرار .
كنت بحاجة إلى استنساخ الأشياء وتغييرها بسهولة على موقع قمت به مؤخرًا ووجدت أن هذه الوحدة تعمل بشكل جيد.
تحقق من ملف replicate.api.php لترى مدى سهولة استخدامه.
في D7 يجب عليك إلغاء تعيين معرف العقدة unset($node->nid)
ومعرف المراجعة unset($node->vid)
كلاهما. أقوم بإنشاء نموذج لاستنساخ العقد من نوع معين (منتج) له مرجع مصطلح معين (مع استبدال معرف المصطلح). إليك التقديم النهائي:
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);
}
}
قد تفكر في حفظ الطوابع الزمنية und $node->uid
كذلك.