Definieren der Entitätsvorverarbeitungsfunktion

10

Mein benutzerdefiniertes Modul definiert eine benutzerdefinierte Entität, die die EntityAPIController-Klasse erweitert. Ich habe es geschafft, es im Grunde zum Laufen zu bringen, dh Felder usw. über meine benutzerdefinierte Datei tpl.php anzuzeigen. Ich möchte jedoch eine mymodule_preprocess_entityFunktion (wie hier vorgeschlagen ) erstellen , um der Datei tpl.php benutzerdefinierte Variablen hinzuzufügen. Eine solche Funktion wird jedoch nicht ausgeführt (wird nicht aufgerufen).

Außerdem habe ich beim Anzeigen dieser Entität festgestellt, dass die Funktion template_preprocess_entity(&$variables)von entity.module ebenfalls nicht ausgeführt wird.

Was muss noch definiert werden, damit die Vorverarbeitungsfunktion für die aufgerufene benutzerdefinierte Entität aufgerufen wird?

Camcam
quelle
Sie verwenden Mymodul - der Vorschlag verwendet Mythos
Remy

Antworten:

9

Ich habe eine allgemeine mymodule_preprocess(&$variables, $hook)Funktion erstellt und sie hat gezeigt, dass der spezifische Funktionsname lauten sollte mymodule_preprocess_myentity. Wo myentityist der Eigenname der Entität?

Dieser Code funktioniert also für mich:

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
quelle
2

Ein allgemeinerer Ansatz:

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

module_implements()Überprüft leider nicht, ob das aktive Thema den Vorverarbeitungs-Hook implementiert.

fireh
quelle