comment définir la fonction de prétraitement d'entité

10

Mon module personnalisé définit une entité personnalisée, qui étend la classe EntityAPIController. J'ai réussi à le faire fonctionner, c'est-à-dire à afficher des champs, etc. via mon fichier tpl.php personnalisé. Mais je voudrais créer une mymodule_preprocess_entityfonction (comme suggéré ici ) pour ajouter des variables personnalisées au fichier tpl.php. Mais une telle fonction n'est pas en cours d'exécution (n'est pas appelée).

De plus, lorsque template_preprocess_entity(&$variables)j'affiche cette entité, j'ai remarqué que la fonction de entity.module ne fonctionne pas non plus.

Que faut-il définir d'autre pour que la fonction de prétraitement de l'entité personnalisée soit appelée?

camcam
la source
votre utilisation de mymodule - les utilisations de suggestion MyTheme
rémy

Réponses:

9

J'ai créé une mymodule_preprocess(&$variables, $hook)fonction générale et cela a montré que le nom de la fonction spécifique devrait être mymodule_preprocess_myentity. Où myentityest le nom propre de l'entité.

Donc, ce code fonctionne pour moi:

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) {
  ...
}
camcam
la source
2

Une approche plus générique:

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

Malheureusement, module_implements()ne vérifie pas si le thème actif implémente le hook de prétraitement.

fireh
la source