รับรายการเนื้อหาทุกประเภท


10

ฉันจะรับรายการประเภทเนื้อหาทั้งหมดที่กำหนดไว้ในไซต์ Drupal 8 ได้อย่างไร

ใน Drupal 7 มันเคยเป็นnode_type_get_types()แต่มันเลิกใช้แล้ว

ฉันพยายามEntity::loadMultiple()แต่ดูเหมือนจะไม่ทำงาน ฉันกำลังคิดเกี่ยวกับการสร้างแบบสอบถามที่กำหนดเอง แต่ฉันไม่รู้ว่ามันถูกเก็บไว้ในฐานข้อมูลอย่างไร

คำตอบ:



16

คุณสามารถโหลดเอนทิตี NodeType ทั้งหมด (เอนทิตี config) โดยใช้คลาส NodeType:

$node_types = \Drupal\node\Entity\NodeType::loadMultiple();
// If you need to display them in a drop down:
$options = [];
foreach ($node_types as $node_type) {
  $options[$node_type->id()] = $node_type->label();
}

2
เคล็ดลับที่มีคงloadMultiple(), load()และcreate()วิธีการที่จะเรียกพวกเขาในระดับประเภทนิติบุคคลที่คุณต้องการที่จะใช้แล้วก็ออกจากร่างของชนิดและการใช้งานที่ไม่เหนือแบบไดนามิก นี่เป็นบิตที่สั้นกว่าและใช้งานง่ายกว่า แต่แนะนำให้ใช้บริการฉีดเมื่อเป็นไปได้ดังนั้นในบริการ / คอนโทรลเลอร์ / ปลั๊กอินคุณต้องฉีดผู้จัดการประเภทเอนทิตีแล้วใช้มัน ช่วยให้ทดสอบได้ง่ายขึ้น (หน่วย) แต่ผลลัพธ์จะเหมือนกันมากหรือน้อย
Berdir

1

มีอีกหนึ่งฟังก์ชั่นตัวช่วย Drupal ที่ไม่ได้รับการสนับสนุน ณ วันที่ 8.7 node_type_get_names()ผลตอบแทน:

string [] อาร์เรย์ของป้ายชื่อประเภทโหนดพิมพ์โดยชื่อประเภทโหนด

API เอกสาร


นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุดหากคุณจำเป็นต้องกรอกแบบฟอร์มตัวเลือก (หรือช่องทำเครื่องหมาย)
TytooF

0

ให้ไว้ในกรณีที่node_type_get_names()เลิกใช้ในอนาคต (เป็นตัวอย่างที่ดีของarray_mapการใช้งาน):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.