ฉันต้องระบุbundle
ของกิจการจากมันและtype
id
ตัวอย่างเช่นถ้าtype
เป็น 'โหนดและid
คือ 7 ผมอาจจะได้รับ 'หน้า' bundle
เป็น
ขอบคุณ
ฉันต้องระบุbundle
ของกิจการจากมันและtype
id
ตัวอย่างเช่นถ้าtype
เป็น 'โหนดและid
คือ 7 ผมอาจจะได้รับ 'หน้า' bundle
เป็น
ขอบคุณ
คำตอบ:
ใช้entity_load
เพื่อโหลดเอนทิตีตามที่กล่าวถึงโดย @Nikhil
จากนั้นใช้entity_extract_idsเพื่อแยกบันเดิล ตัวอย่าง:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
ฟังก์ชั่นentity_extract_ids
ส่งกลับอาร์เรย์ที่ทำดัชนีเป็นตัวเลข (ไม่ใช่ตารางแฮช) ที่มีองค์ประกอบดังนี้
ที่ไหน0
, 1
และ2
มีดัชนีอาร์เรย์ อย่างไรก็ตามวิธีการที่ใช้โดยหลักและโมดูล contrib คือการใช้list()
ฟังก์ชั่น
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
นี่คือหนึ่งที่สะอาดที่สุดที่ฉันได้รับจากรหัสโมดูลกลุ่มอินทรีย์
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
ตัวอย่างเช่นฉันสามารถเรียกว่าชอบ:
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
แก้ไข: ตามที่ @Clive ชี้ให้เห็นวิธีการข้างต้นขึ้นอยู่กับโมดูลนิติบุคคล
นี่คือวิธีการอื่นที่ไม่ได้ขึ้นอยู่กับโมดูลพิเศษใด ๆ มันมีคำอธิบายที่นี่https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW
คัดลอกการวางวิธีดังกล่าว:
function _entity_get_bundle($entity, $entity_type) {
$info = entity_get_info($entity_type);
if (empty($info['entity keys']['bundle'])) {
return $entity_type;
} else {
return $entity->{$info['entity keys']['bundle']};
}
}
$group_type, $gid
อะไร และคุณค่าคืออะไร$bundle
?
entity_load
โดยวิธีการที่สะอาดที่สุด?
entity_metadata_wrapper()
สะอาดกว่าentity_extract_ids()
วิธีการ พลัสที่คุณพึ่งพาโมดูลนิติบุคคลที่มีการติดตั้ง ...
ลองใช้entity_load
โหลดเอนทิตีจากฐานข้อมูล
เอนทิตีจะถูกเก็บไว้ในแคชหน่วยความจำแบบสแตติกและจะไม่ต้องการการเข้าถึงฐานข้อมูลหากโหลดอีกครั้งระหว่างการร้องขอหน้าเดียวกัน
$ entity_type : ประเภทกิจการที่จะโหลดเช่นโหนดหรือผู้ใช้
$ ids : อาร์เรย์ของรหัสเอนทิตีหรือ FALSE เพื่อโหลดเอนทิตีทั้งหมด
$ เงื่อนไข : (คัดค้าน) อาเรย์แบบเชื่อมโยงของเงื่อนไขบนตารางฐานโดยที่คีย์คือฟิลด์ฐานข้อมูลและค่าคือค่าที่ฟิลด์เหล่านั้นต้องมี แต่จะดีกว่าถ้าใช้ EntityFieldQuery เพื่อดึงรายการ ID เอนทิตีที่สามารถโหลดได้โดยฟังก์ชันนี้
$ รีเซ็ต : จะรีเซ็ตแคชภายในสำหรับประเภทเอนทิตีที่ร้องขอหรือไม่
อาร์เรย์ของวัตถุเอนทิตีที่จัดทำดัชนีโดยรหัสของพวกเขา เมื่อไม่พบผลลัพธ์อาร์เรย์ที่ว่างเปล่าจะถูกส่งกลับ
หากคุณต้องการวิธีที่มีน้ำหนักเบามากฉลาดหลักแหลมประสิทธิภาพในการรับชนิดโหนดจาก node id - คุณสามารถใช้แบบสอบถามแบบใช้เลือกข้อมูลเดียวในตารางโหนด
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
ด้วยวิธีนี้คุณไม่จำเป็นต้องเรียกใช้เอนทิตี hook ทั้งระบบโดยใช้เอนทิตีเอนทิตี้โหลด
มันเป็นแบบสอบถามแบบใช้เลือกข้อมูลเดียวโดยใช้ ID โหนดที่ทำดัชนี