come definire la funzione di pre-elaborazione dell'entità


10

Il mio modulo personalizzato definisce un'entità personalizzata, che estende la classe EntityAPIController. Sono riuscito a farlo funzionare fondamentalmente, ad esempio visualizzando campi ecc. Tramite il mio file tpl.php personalizzato. Ma vorrei creare una mymodule_preprocess_entityfunzione (come suggerito qui ) per aggiungere variabili personalizzate al file tpl.php. Ma tale funzione non è in esecuzione (non viene chiamata).

Inoltre, quando visualizzo questa entità, ho notato che template_preprocess_entity(&$variables)neanche la funzione di entity.module non è in esecuzione.

Cos'altro deve essere definito per rendere la funzione di preelaborazione per l'entità personalizzata chiamata?


stai usando mymodule - il suggerimento usa mytheme
rémy

Risposte:


9

Ho creato una mymodule_preprocess(&$variables, $hook)funzione generale e ha mostrato che dovrebbe essere il nome della funzione specifica mymodule_preprocess_myentity. Dov'è myentityil nome proprio dell'entità.

Quindi, questo codice funziona per me:

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

Un approccio più generico:

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

Sfortunatamente module_implements()non controlla se il tema attivo implementa il hook di preelaborazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.