Theming

Créé le 21/12/2014

Dernière mise à jour le 21/12/2014

Étiquettes

Surcharger un affichage BackOffice

De manière générale pour surcharger un affichage :

  1. Il passe par un template => on crée un template de même nom dans le thème utilisé
  2. Il passe par une fonction de thème => on crée la même fonction de thème, en la préfixant par le nom du thème, dans le fichier template.php du thème utilisé.

Sauf que dans le cas d'un affichage en BackOffice, il est rare de faire un thème unique pour le client pour son BackOffice, il est commun d'utilisé un thème d'administration fournit par la communauté :

D'où la question, comment faire pour surcharger un affichage BackOffice ? En utilisant le hook_theme_registry_alter().

Pour un template :

Exemple avec une vue d'export de commandes Drupal commerce.

/**
 * Implements hook_theme_registry_alter().
 *
 * Allows to use custom templates in BO.
 */
function mon_module_theme_registry_alter(&$theme_registry) {
  $theme_registry['views_data_export__commerce_orders__order_export'] = array(
    'template' => 'views-data-export--commerce-orders--order-export',
    'path' => drupal_get_path('module', 'mon_module') . '/templates',
    'variables' => array(
      'view' => NULL,
      'options' => NULL,
      'rows' => NULL,
      'title' => NULL,
    ),
    'base hook' => 'views_data_export',
    'type' => 'module',
    'theme path' => drupal_get_path('module', 'mon_module'),
    'preprocess functions' => array(),
    'process functions' => array(),
  );
}

Pour une fonction de thème :

Exemple de la page résumé des webform.

/**
 * Implements hook_theme_registry_alter().
 *
 * Allows to use custom theme function for BO.
 */
function mon_module_theme_registry_alter(&$theme_registry) {
  if (isset($theme_registry['webform_admin_content'])) {
    $theme_registry['webform_admin_content']['theme path'] = drupal_get_path('module', 'mon_module');
    $theme_registry['webform_admin_content']['file'] = 'includes/fichier.inc';
    $theme_registry['webform_admin_content']['includes'][0] = drupal_get_path('module', 'mon_module) . '/includes/fichier.inc';
    $theme_registry['webform_admin_content']['function'] = 'ma_fonction_de_theme';
  }
}

Ajouter un commentaire