ตรวจสอบประเภทเนื้อหาของโหนดในส่วนประมวลผลล่วงหน้า


12

ฉันมีชุดของตัวแปรที่ฉันต้องการให้พร้อมใช้งานบนแม่แบบกิ่งไม้สำหรับแม่แบบเนื้อหาที่เฉพาะเจาะจง

ในMYTHEME.themeฉันมี:

function MYTHEME_preprocess_node(&$variables) {

  if (isset($variables['node'])) {

    $mycustomblock = \Drupal::service('plugin.manager.block')
      ->createInstance('myblock', []);

    $variables['mycustomblock'] = $mycustomblock->build();

    $headertext = \Drupal::service('plugin.manager.block')
      ->createInstance('headertext',
        [
          'text-align-submit'  => 'right',
          'uppercase-submit'   => TRUE,
          'header_size'        => 'h4',
          'header-size-submit' => 'h4',
          'grid-size-submit'   => 6,
          'header-title'       => 'This is a test',
        ]
      );

    $variables['headertext'] = $headertext->build();
  }
}

นี้จะช่วยให้ฉันไปใช้{{ headertext }}และ{{ mycustomblock }}ในแม่แบบชนิดเนื้อหาเหมือนและnode--contenttype1.html.twig node--contenttype2.html.twigแต่ฉันไม่ต้องการสร้าง'headertext'และ'mycustomblock'ตัวแปรสำหรับทุกโหนดประเภทเดียวเมื่อฉันต้องการแต่ละคนสำหรับประเภทเนื้อหาหนึ่ง มันจะเป็นการดีถ้ามีสวิทช์หรือถ้าคำสั่งนั้นตรวจสอบประเภทของเนื้อหาก่อนสร้างตัวแปรด้วยบล็อก

มีวิธีที่ฉันสามารถตรวจสอบชนิดเนื้อหาของโหนดหรือไม่?

ฉันพยายามแล้ว

$type = $variables['node']->type;

แต่นั่นไม่ได้ผล

คำตอบ:


15

เพื่อให้ได้ชนิดเนื้อหาของโหนดคุณเพียงแค่ใช้หรือ$variables['node']->getType() $variables['node']->bundle()วิธีแรกเพียงแค่เรียกที่สองดังนั้นการเรียกอย่างใดอย่างหนึ่งอย่างใดอย่างหนึ่งไม่ได้สร้างความแตกต่างมาก

public function getType() {
  return $this->bundle();
}

ความแตกต่างเพียงอย่างเดียวbundle()คือกำหนดไว้สำหรับทุกเอนทิตีเนื่องจากแนวคิดของบันเดิลเป็นเรื่องปกติสำหรับเอนทิตีทั้งหมดในขณะที่ประเภทเนื้อหาคือคุณสมบัติ Drupal ที่ใช้สำหรับโหนดก่อนที่จะเปลี่ยนพวกเขาในหนึ่งในเอนทิตี การใช้bundle()ทำให้ง่ายต่อการปรับเปลี่ยนรหัสสำหรับประเภทเอนทิตีอื่น ๆ แต่ฉันไม่คิดว่าเป็นกรณีสำหรับรหัสที่คุณใช้


5

$variables['node']->getType()คุณต้องใช้ นอกจากนี้หากคุณต้องการใช้ในโหมดการดูบางอย่างเท่านั้นให้ลองทำสิ่งนี้ด้วยเช่นกัน$variables['view_mode']


2

คุณสามารถเพิ่มโหนด (และประเภทมุมมอง) ให้กับชื่อฟังก์ชัน hook ของคุณ:

function MYTHEME/MYMODULE_preprocess_node__nodetype__display(&$variables) {
  // ...
}

ตัวอย่างเช่นสำหรับpageประเภทโหนดในfullโหมด:

function MYTHEME/MYMODULE_preprocess_node__page__full(&$variables) {
  // ...
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.