Responder al comentario

Afficher les variables disponibles de notre theme en Drupal 7.x

Lorsque nous travaillons au niveau du theme layer, par exemple sur notre node.tpl.php, nous nous demandons parfois quelles sont les variables dont nous disposons, c’est à dire quelles sont les variables qui ont été envoyées vers notre fichier .tpl.php

Dans ce post nous verrons qu’en fait les fichiers .tpl.php de notre installation par défaut de Drupal sont en réalité très bien documentés, mais nous verrons aussi une manière plus simple et plus dynamique en utilisant la fonction get_defined_vars().

Fichiers .tpl.php
Pour trouver les variables disponibles, nous pouvons prendre le fichier .tpl.php qui se trouve dans notre installation par défaut de Drupal et au début de ce fichier nous trouverons une liste détaillée et commentée des variables qui sont à notre disposition.

Pour le fichier node.tpl.php, nous le trouverons dans le répertoire module/node, pour page.tpl.php, region.tpl.php et html.tpl.php dans modules/system, en fin pour le fichier field.tpl.php nous le trouverons dans modules/field/theme .

Voici ce que nous pouvons voir au début du fichier node.tpl.php :

<?php
/**
* @file
* Default theme implementation to display a node.
*
* Available variables:
* - $title: the (sanitized) title of the node.
* - $content: An array of node items. Use render($content) to print them all,
*   or print a subset such as render($content['field_example']). Use
*   hide($content['field_example']) to temporarily suppress the printing of a
*   given element.
* - $user_picture: The node author's picture from user-picture.tpl.php.
* - $date: Formatted creation date. Preprocess functions can reformat it by
*   calling format_date() with the desired parameters on the $created variable.
* - $name: Themed username of node author output from theme_username().
* - $node_url: Direct url of the current node.
* - $display_submitted: Whether submission information should be displayed.
* - $submitted: Submission information created from $name and $date during
*   template_preprocess_node().
* - $classes: String of classes that can be used to style contextually through
*   CSS. It can be manipulated through the variable $classes_array from
*   preprocess functions. The default values can be one or more of the
*   following:
*   - node: The current template type, i.e., "theming hook".
*   - node-[type]: The current node type. For example, if the node is a
*     "Blog entry" it would result in "node-blog". Note that the machine
*     name will often be in a short form of the human readable label.
*   - node-teaser: Nodes in teaser form.
*   - node-preview: Nodes in preview mode.
*   The following are controlled through the node publishing options.
*   - node-promoted: Nodes promoted to the front page.
*   - node-sticky: Nodes ordered above other non-sticky nodes in teaser
*     listings.
*   - node-unpublished: Unpublished nodes visible only to administrators.
* - $title_prefix (array): An array containing additional output populated by
*   modules, intended to be displayed in front of the main title tag that
*   appears in the template.
* - $title_suffix (array): An array containing additional output populated by
*   modules, intended to be displayed after the main title tag that appears
*   in the template.
*
*/
?>

C’est déjà très intéressant non ?

Une autre façon serait d’aller sur l’ API de Drupal et de chercher chacun des fichiers tpl.php dont nous avons besoin. Nous trouverons en réalité la même information que dans les fichiers de notre installation. On pouvait s’en douter.

La fonction get_defined_vars()
Mais que se passe-t-il pour les variables générées par d’autres modules? Ou comment pourrions-nous connaitre la valeur de certaines variables envoyées vers notre thème?

Pour cela nous allons utiliser la fonction get_defined_vars(). Ne la cherchez pas dans l’API de Drupal, vous ne la trouverez pas; c’est une fonction de notre bon vieux PHP.

Dans la documentation de PHP nous pouvons lire: "Cette fonction retourne un tableau multidimensionnel contenant la liste de toutes les variables définies, qu'elles soient des variables d'environnement, de serveur ou définies par l'utilisateur dans la portée d'appel de la fonction get_defined_vars()." Excellent! C’est justement ce que nous cherchions!

Par exemple, au début de notre fichier node.tpl.php nous introduisons les lignes suivantes :

<?php

print '<pre>';
print_r(array_keys(get_defined_vars()));
print
'</pre>';
?>

Mais l’information retournée n’est pas toujours très utile, surtout si nous avons beaucoup de variables, donc il sera bien plus simple d’utiliser la fonction dsm() du module devel que nous appliquons de la manière suivante:

<?php
dsm
(get_defined_vars());
?>

Voilà, deux façons différentes mais très utiles de trouver ou découvrir les variables disponibles dans notre thème.

Références:
L’API de Drupal: http://api.drupal.org/api/drupal
field.tpl.php: http://api.drupal.org/api/drupal/modules--field--theme--field.tpl.php/7
node.tpl.php : http://api.drupal.org/api/drupal/modules--node--node.tpl.php/7
page.tpl.php: http://api.drupal.org/api/drupal/modules--system--page.tpl.php/7
region.tpl.php: http://api.drupal.org/api/drupal/modules--system--region.tpl.php/7
html.tpl.php: http://api.drupal.org/api/drupal/modules--system--html.tpl.php/7
get_defined_vars(): http://php.net/manual/es/function.get-defined-vars.php
Le module Devel: http://drupal.org/project/devel
La fonction dsm(): http://drupalcontrib.org/api/drupal/contributions--devel--devel.module/f...

Vous avez des questions? N’hésitez pas à poster un commentaire…

Tags:

Responder

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><img>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

By submitting this form, you accept the Mollom privacy policy.

Arcerca del autor

Karim BoudjemaKarim Boudjema. Un belga apasionado de las TIC's en los Andes de Bolivia.

Ver mi perfil en LinkedInVer mi perfil en Twitter

>> Más...

Comentarios recientes