วิธีการกำหนดฟังก์ชั่น preprocess นิติบุคคล


10

โมดูลที่กำหนดเองของฉันกำหนดเอนทิตีที่กำหนดเองซึ่งขยายคลาส EntityAPIController ฉันจัดการเพื่อให้มันทำงานโดยทั่วไปคือการแสดงฟิลด์ ฯลฯ ผ่านไฟล์ tpl.php ที่กำหนดเองของฉัน แต่ฉันต้องการสร้างmymodule_preprocess_entityฟังก์ชั่น (ตามที่แนะนำไว้ที่นี่ ) เพื่อเพิ่มตัวแปรที่กำหนดเองลงในไฟล์ tpl.php แต่ฟังก์ชั่นดังกล่าวไม่ทำงาน (ไม่ได้ถูกเรียก)

นอกจากนี้เมื่อฉันแสดงเอนทิตีนี้ฉันสังเกตเห็นว่าฟังก์ชั่นtemplate_preprocess_entity(&$variables)จากเอนทิตี้ของโมดูลไม่ทำงานเช่นกัน

ต้องกำหนดอะไรอีกเพื่อให้มีการเรียกใช้ฟังก์ชัน preprocess สำหรับเอนทิตีแบบกำหนดเอง


your mymodule - ข้อเสนอแนะใช้ mytheme
rémy

คำตอบ:


9

ฉันสร้างทั่วไปฟังก์ชั่นและมันแสดงให้เห็นว่าชื่อฟังก์ชั่นที่เฉพาะเจาะจงที่ควรจะเป็นmymodule_preprocess(&$variables, $hook) mymodule_preprocess_myentityไหนmyentityเป็นชื่อที่เหมาะสมของกิจการ

ดังนั้นรหัสนี้ใช้งานได้สำหรับฉัน:

function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) { // or maybe check for $hook name
    $function = __FUNCTION__ . '_' . $variables['elements']['#entity_type'];
    if (function_exists($function)) {
      $function($variables, $hook);
    }
  }
}

function mymodule_preprocess_myentity(&$vars) {
  ...
}

2

แนวทางทั่วไปเพิ่มเติม:

/**
 * Implements hook_preprocess().
 */
function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) {
    $myhook = "preprocess_{$variables['elements']['#entity_type']}_{$variables['elements']['#bundle']}_{$variables['elements']['#view_mode']}";
    $modules = module_implements($myhook);

    foreach ($modules as $module) {
      $function = "{$module}_{$myhook}";
      $function($variables);
    }
  }
}

น่าเสียดายที่module_implements()ไม่ได้ตรวจสอบว่าชุดรูปแบบที่ใช้งานอยู่ใช้เบ็ด preprocess

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