ฉันได้เพิ่มฟิลด์ (ข้อความ) ใหม่ลงในประเภทเนื้อหา Drupal 7 ที่มีหลายโหนดอยู่แล้ว
ฉันจะกรอกข้อมูลฟิลด์ด้วยค่าเริ่มต้นสำหรับโหนดเหล่านี้ทั้งหมดได้อย่างไร
ฉันได้เพิ่มฟิลด์ (ข้อความ) ใหม่ลงในประเภทเนื้อหา Drupal 7 ที่มีหลายโหนดอยู่แล้ว
ฉันจะกรอกข้อมูลฟิลด์ด้วยค่าเริ่มต้นสำหรับโหนดเหล่านี้ทั้งหมดได้อย่างไร
คำตอบ:
คุณสามารถใช้EntityFieldQuery
เพื่อดึงรายการของโหนดจากนั้นอัพเดตฟิลด์ของโหนดด้วยnode_save()
:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific value within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
node_save($node);
}
}
หากนี่เป็นการดำเนินการครั้งเดียวคุณสามารถใช้ฟังก์ชันExecute PHPของโมดูลDevelเพื่อเรียกใช้งานข้างต้น: ไม่เช่นนั้นคุณสามารถสร้างโมดูลที่กำหนดเองได้ง่าย
ฉันจะใช้Views Bulk Operationsและใช้ "Execute Arbitrary PHP Script" เป็นหลักในการทำรายการข้างต้น แต่คุณไม่จำเป็นต้องทำรหัสพิเศษทั้งหมดเพียงตัวอย่างเล็ก ๆ น้อย ๆ ที่ทำในสิ่งที่คุณต้องการ (เช่น$object->field_foo['und'][0]['value'] = 'some_value'
)
หากคุณต้องการเพียงอัปเดตฟิลด์ด้วยค่าบางค่าทางเลือกที่มีประสิทธิภาพมากขึ้นสำหรับคำตอบที่ยอมรับคือ:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
field_attach_presave('node', $node);
field_attach_update('node', $node);
}
}
ความแตกต่างคือในการใช้โดยตรงfield_attach_presave
และfield_attach_update
ฟังก์ชั่นซึ่งปรับปรุงอย่างถูกต้องเพียงฟิลด์โหนดและข้ามส่วนที่เหลือของกระบวนการบันทึกโหนด สิ่งนี้มีผลกระทบที่ไม่มีโหนด presave / save hooks จะถูกเรียกว่าวันที่ "เปลี่ยน" จะไม่ได้รับการอัปเดตเป็นวันที่ปัจจุบันเป็นต้นตามกรณีการใช้งานของคุณ
อันที่จริงแล้ว VBO (Views Bulk Operations) เป็นทางออกที่ดี นอกจากนี้ด้วยเวอร์ชันล่าสุดคุณจะพบตัวเลือก "ปรับเปลี่ยนค่าเอนทิตี" ซึ่งให้วิธีที่ง่ายมากในการอัพเดตภาษาโหนดในการดำเนินการครั้งเดียว
ติดตั้งและเปิดใช้งานโมดูลViews Bulk Operationsและสร้างมุมมองด้วยการแสดงหน้า
เพิ่ม => การทำงานเป็นกลุ่ม: ช่องเนื้อหา (เนื้อหา) ในมุมมอง
อ้างถึง
เลือกฟิลด์ที่คุณต้องการตั้งค่าเริ่มต้น
ในกรณีของคุณชื่อ ในภาพมันคือแท็ก
บันทึกมุมมองและไปที่หน้าที่สร้างไว้ หากคุณมีมากกว่าหนึ่งหน้าของผลการค้นหาคุณสามารถเลือกที่จะเลือกรายการทั้งหมดในหน้าปัจจุบันรายการทั้งหมดในทุกหน้าหรือคุณสามารถเลือกช่องทำเครื่องหมายที่สอดคล้องกับแต่ละโหนดได้ด้วยตนเอง ต้องทำเครื่องหมายที่ช่องทำเครื่องหมายอย่างน้อยหนึ่งช่องเพื่อดำเนินการต่อ
ตอนนี้คุณตั้งค่าเริ่มต้นและบันทึก