ฉันต้องการกู้คืนข้อมูลบางส่วนจากฟิลด์ของโหนดทั้งหมดของประเภทเนื้อหาที่เฉพาะเจาะจง ฉันรู้วิธีการใช้ a db_query
และรับ node ID ทั้งหมดจากนั้นทำซ้ำมัน สิ่งที่ฉันอยากรู้คือถ้ามีอีกวิธีหนึ่งในการใช้ฟังก์ชั่น drupal
ฉันต้องการกู้คืนข้อมูลบางส่วนจากฟิลด์ของโหนดทั้งหมดของประเภทเนื้อหาที่เฉพาะเจาะจง ฉันรู้วิธีการใช้ a db_query
และรับ node ID ทั้งหมดจากนั้นทำซ้ำมัน สิ่งที่ฉันอยากรู้คือถ้ามีอีกวิธีหนึ่งในการใช้ฟังก์ชั่น drupal
คำตอบ:
คุณสามารถสืบค้นข้อมูลนั้นได้โดยตรง node_load_multiple()
$nodes = node_load_multiple(array(), array('type' => 'my_type'));
คุณสามารถเพิ่มเงื่อนไขคุณสมบัติให้กับ $conditions
อาร์เรย์ (อาร์กิวเมนต์ที่สอง) ได้มากเท่าที่คุณต้องการดังนั้นสถานะสร้าง ฯลฯ เป็นเกมที่ยุติธรรมเช่นกัน
$conditions
ถูกเลิกใช้ทางเทคนิค (ฉันจินตนาการถึงความโปรดปรานEntityFieldQuery
) แต่โอกาสของการใช้งานที่เคยถูกลบออกจาก Drupal 7 นั้นไม่มีเลย มันจะพังมากเกินไป
EntityFieldQuery
ทุกอย่าง :) ฉันใส่สิ่งนี้ไว้เพื่อลูกหลานมากกว่าสิ่งอื่นใด
หลัก Drupal EntityFieldQuery()
ให้ระดับที่เรียกว่า นอกจากนี้ยังมีหน้าเอกสารที่ใช้งานง่ายสำหรับการใช้งานซึ่งมีตัวอย่างมากมาย ในรูปแบบที่ง่ายที่สุด:
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'page')
->propertyCondition('status', 1);
$result = $query->execute();
if (!empty($result['node'])) {
$nids = array_keys($result['node']);
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
// do something awesome
}
}
การดำเนินการนี้จะโหลดโหนดที่เผยแพร่ทั้งหมดของประเภท "หน้า" คุณจำเป็นต้องปรับสิ่งนี้เป็นระยะ
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'page')
->propertyCondition('status', 1);
$result = $query->execute();
if (!empty($result['node'])) {
$nids = array_keys($result['node']);
foreach ($nids as $nid) {
$node = node_load($nid, NULL, TRUE);
// do something awesome
}
}
เพื่อหลีกเลี่ยงการโหลดมากเกินไปในครั้งเดียวซึ่งอาจทำให้เกิดปัญหาหน่วยความจำ