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?


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) {
  ...
}

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.