Mostrar las variables disponibles para nuestro theme en Drupal 7.x

Cuando estamos trabajando al nivel del theme layer (temas), por ejemplo en nuestro node.tpl.php, a veces nos preguntamos cuales son las variables que tenemos a disposición, es decir cuales son las variables que son enviadas a nuestro archivo .tpl.php

En este post veremos que los archivos .tpl.php de nuestra instalación Drupal están en realidad muy bien documentados pero veremos también otra manera más sencilla y dinámica utilizando la función get_defined_vars().

Archivos .tpl.php

Una forma sencilla y rápida es de tomar el archivo .tpl.php que viene por defecto con nuestra instalación Drupal y al principio de este encontraremos la lista detallada y bien comentada de las variables disponibles.

Para node.tpl.php iremos en modules > node > node.tpl.php, para page.tpl.php iremos en modules > system > page.tpl.php (en system, encontraremos también region.tpl.php y html.tpl.php), en fin para field.tpl.php iremos en modules > field > theme > field.tpl.php

Por ejemplo, al inicio de nuestro archivo node.tpl.php encontramos la información siguiente:

<?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.
*
* Other variables:
* - $node: Full node object. Contains data that may not be safe.
* - $type: Node type, i.e. story, page, blog, etc.
* - $comment_count: Number of comments attached to the node.
* - $uid: User ID of the node author.
* - $created: Time the node was published formatted in Unix timestamp.
* - $classes_array: Array of html class attribute values. It is flattened
*   into a string within the variable $classes.
* - $zebra: Outputs either "even" or "odd". Useful for zebra striping in
*   teaser listings.
* - $id: Position of the node. Increments each time it's output.
*
* Node status variables:
* - $view_mode: View mode, e.g. 'full', 'teaser'...
* - $teaser: Flag for the teaser state (shortcut for $view_mode == 'teaser').
* - $page: Flag for the full page state.
* - $promote: Flag for front page promotion state.
* - $sticky: Flags for sticky post setting.
* - $status: Flag for published status.
* - $comment: State of comment settings for the node.
* - $readmore: Flags true if the teaser content of the node cannot hold the
*   main body content.
* - $is_front: Flags true when presented in the front page.
* - $logged_in: Flags true when the current user is a logged-in member.
* - $is_admin: Flags true when the current user is an administrator.
*
* Field variables: for each field instance attached to the node a corresponding
* variable is defined, e.g. $node->body becomes $body. When needing to access
* a field's raw values, developers/themers are strongly encouraged to use these
* variables. Otherwise they will have to explicitly specify the desired field
* language, e.g. $node->body['en'], thus overriding any language negotiation
* rule that was previously applied.
*
* @see template_preprocess()
* @see template_preprocess_node()
* @see template_process()
*/
?>

Otra manera de encontrar las variables disponibles es de ir en la API de Drupal y buscar por cada archivo .tpl.php. En realidad encontraremos la misma información que en los archivos de nuestra instalación.

La fución get_defined_vars()

Pero qué pasa con las variables generadas por otros modulos? O como podríamos ver los valores de dichas variables si no las conocemos? Para ello en nuestro archivo .tpl.php vamos a llamar a la función get_defined_vars(). No busquen en la API de Drupal, no la econtrarán, es una función de nuestro viejo PHP.

En la documentación de PHP encontramos: “Esta función devuelve una matriz multidimensional que contiene una lista de todas las variables definidas, ya sean variables de entorno, de servidor o definidas por el usuario, en el ámbito que get_defined_vars() es llamado.” Excelente, es justamente lo que necesitamos!

Por ejemplo, al inicio de nuestro archivo node.tpl.php ponemos lo siguiente:

<?php

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

Pero la salida no es muy útil, por ello es mejor utilizar la function dsm() del módulo devel (http://drupal.org/project/devel) la aplicamos como sigue:

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

Voilà, dos maneras distintas pero muy útiles de encontrar o descubrir las variables que son enviadas a nuestro theme.

Referencias:
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
El modulo Devel: http://drupal.org/project/devel
La función dsm(): http://drupalcontrib.org/api/drupal/contributions--devel--devel.module/f...

Preguntas? No dude en poner un comentario…

Tags:

Comentarios

Muy bueno Karim ! Gracias

Muy bueno Karim !

Gracias 1000

Enviar un comentario nuevo

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 Boudjema Karim Boudjema. Un programador belga en los Andes de Bolivia.

Ver mi perfil en LinkedInVer mi perfil en Twitter

>> Más...

Comentarios recientes