it-swarm-eu.dev

hook_theme_registry_alter () a theme ()

Jak může hook_theme_registry_alter() přiřadit například theme_mymodule_image_output() k ID motivu 'image'?

3
enjoylife

Jak je uvedeno v dokumentaci, hook_theme_registry_alter () je vyvolán z Drupal), aby moduly třetích stran mohly změnit informace registru témat vrácené z hook_theme () .

Hodnota vrácená z implementací hook_theme() je pole obsahující informace o různých tematických funkcích implementovaných moduly (nebo tématy).

function node_theme() {
  return array(
    'node' => array(
      'arguments' => array('node' => NULL, 'teaser' => FALSE, 'page' => FALSE), 
      'template' => 'node',
    ), 
    'node_list' => array(
      'arguments' => array('items' => NULL, 'title' => NULL),
    ), 
    'node_search_admin' => array(
      'arguments' => array('form' => NULL),
    ), 
    'node_filter_form' => array(
      'arguments' => array('form' => NULL), 
      'file' => 'node.admin.inc',
    ), 
    'node_filters' => array(
      'arguments' => array('form' => NULL), 
      'file' => 'node.admin.inc',
    ), 
    'node_admin_nodes' => array(
      'arguments' => array('form' => NULL), 
      'file' => 'node.admin.inc',
    ), 
    'node_add_list' => array(
      'arguments' => array('content' => NULL), 
      'file' => 'node.pages.inc',
    ), 
    'node_form' => array(
      'arguments' => array('form' => NULL), 
      'file' => 'node.pages.inc',
    ), 
    'node_preview' => array(
      'arguments' => array('node' => NULL), 
      'file' => 'node.pages.inc',
    ), 
    'node_log_message' => array(
      'arguments' => array('log' => NULL),
    ), 
    'node_submitted' => array(
      'arguments' => array('node' => NULL),
    ),
  );
}

Vrácené pole použilo to, co jsem ve svém předchozím komentáři nazýval ID tématu a je to stejná hodnota, která byla předána tématu ().
node_theme () ji nepoužívá, ale dokumentace pro hook_theme() hlásí, že pole může použít index function k nahlášení, která funkce musí být nazývána jako téma funkce.

Modul implementující hook_theme_registry_alter() by měl použít následující kód ke změně funkce, která je vyvolána při vyvolání theme('image').

function mymodule_theme_registry_alter(&$theme_registry) {
  if (isset($theme_registry['image'])) {
    $theme_registry['image']['function'] = 'theme_mymodule_image_output';
  }
}

Když modul změní registr témat pomocí tohoto kódu, žádné volání theme('image', ...) již nevyvolá theme_image () , ale vyvolá funkci definovanou z tohoto modulu.
Všimněte si, že není nutné pojmenovat funkci theme_mymodule_image_output(); kód bude fungovat stejně, pokud je funkce přejmenována na mymodule_image_output() a kód mymodule_theme_registry_alter() bude odpovídajícím způsobem změněn. Obvykle používám předponu theme_, Aby bylo jasné, že funkce je funkce motivu.

5
kiamlaluno