cara mendefinisikan fungsi preprocess entitas


10

Modul khusus saya mendefinisikan entitas kustom, yang memperluas kelas EntityAPIController. Saya berhasil membuatnya pada dasarnya berfungsi, yaitu menampilkan bidang dll melalui file tpl.php kustom saya. Tapi saya ingin membuat mymodule_preprocess_entityfungsi (seperti yang disarankan di sini ) untuk menambahkan variabel khusus ke file tpl.php. Tetapi fungsi tersebut tidak berjalan (tidak disebut).

Juga, ketika saya menampilkan entitas ini, saya perhatikan bahwa fungsi template_preprocess_entity(&$variables)dari entitas.module juga tidak berjalan.

Apa lagi yang perlu didefinisikan untuk membuat fungsi preprocess untuk entitas kustom dipanggil?


menggunakan mymodule - saran ini menggunakan mytheme
rémy

Jawaban:


9

Saya membuat mymodule_preprocess(&$variables, $hook)fungsi umum dan itu menunjukkan bahwa nama fungsi spesifik seharusnya mymodule_preprocess_myentity. Di mana myentitynama entitas yang tepat.

Jadi, kode ini berfungsi untuk saya:

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

Pendekatan yang lebih umum:

/**
 * 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);
    }
  }
}

Sayangnya module_implements()tidak memeriksa apakah tema aktif mengimplementasikan kait preprocess.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.