Apakah mungkin untuk mendefinisikan fungsi hook_preproses berdasarkan pada tipe entitas seperti profile2?

8

Saya berjalan melalui kemungkinan kait dengan menggunakan fungsi hook_preprocess(&$vars, $hook)dan hanya entitas yang tersedia untuk digunakan. Apakah mungkin untuk melakukan sesuatu seperti hook_preprocess_profile2_entity(), atau apakah saya harus menulis syarat jika untuk memeriksa jenis entitas hook_preprocess_entity()?

Adam S
sumber

Jawaban:

15

Ini menyesuaikan pola tema Zen untuk fungsi preprocess node ke entitas:

<?php

/**
 * Implements template_preprocess_entity().
 *
 * Runs a entity specific preprocess function, if it exists.
 */
function MYTHEME_preprocess_entity(&$variables, $hook) {
  $function = __FUNCTION__ . '_' . $variables['entity_type'];
  if (function_exists($function)) {
    $function($variables, $hook);
  }
}

/**
 * Profile2 specific implementation of template_preprocess_entity().
 */
function MYTHEME_preprocess_entity_profile2(&$variables, $hook) {
}

/**
 * Field Collection specific implementation of template_preprocess_entity().
 */
function MYTHEME_preprocess_entity_field_collection_item(&$variables, $hook) {
}
tim.plunkett
sumber
Ini luar biasa. Saya selalu lupa bahwa PHP memungkinkan Anda melakukan hal-hal seperti ini.
mpdonadio
Jika Anda ingin melakukannya dalam tema induk dan mewarisi / menimpa, maka Anda harus menggali lebih dalam ke hook_theme. Zen's hook_theme adalah contoh yang bagus (meskipun panjang).
Capi Etheriel
Saya akan berterima kasih jika seseorang menunjukkan kepada saya bagaimana saya dapat mencapai sesuatu yang serupa di luar lapisan tema! Membuatku gila ...
NikLP