Expertos en Symfony y Drupal

Redefinir la plantilla de un campo determinado field.tpl.php en Drupal 7

En el desarrollo de una web con Drupal que tenemos entre manos se nos ha presentado la necesidad de redefinir la salida de un campo determinado y hemos optado por hacerlo utilizando field.tpl.php que ofrece Drupal 7. Este field.tpl.php es la implementación por defecto de la plantilla que muestra el valor de un campo y que es posible redefinir de alguna de las siguientes maneras:

field.tpl.php
field--field-type.tpl.php
field--field-name.tpl.php
field--content-type.tpl.php
field--field-name--content-type.tpl.php

Además, están disponibles, entre otras, las siguientes variables:

  • $items. Un array con los valores del campo, para el que hay que usar render()
  • $label. La etiqueta del elemento
  • $label_hidden. Indica si la etiqueta está establecida como oculta
  • $classes. Cadena de texto que incluye las clases que pueden utilizarse para maquetar el elemento con CSS. Sus valores por defecto pueden ser field, field-name-[field_name], field-type-[field_type] y field-label-[label_display].

El código que incluye el fichero base modules/field/theme/field.tpl.php que nosotros queremos reescribir es el siguiente:


<div class="<?php print $classes; ?>"<?php print $attributes; ?>>
     <?php if (!$label_hidden): ?>
          <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>: </div>
     <?php endif; ?>
     <div class="field-items"<?php print $content_attributes; ?>>
          <?php foreach ($items as $delta => $item): ?>
               <div class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>><?php print render($item); ?></div>
          <?php endforeach; ?>
     </div>
</div>

En nuestro caso, teníamos que generar una galería de fotos con una estructura determinada por el componente javascript que teníamos que usar y que no era más que todas las imágenes contenidas en una capa, sin más elementos, es decir:


<div id=”galeria”>
   <img src=”images/foto1.jpg” />
   <img src=”images/foto2.jpg” />
   <img src=”images/foto3.jpg” />
   <img src=”images/foto4.jpg” />
</div>

La impementación por defecto de la plantilla incluye cada imagen en una capa de la que nosotros necesitábamos prescindir, con lo que lo único que tuvimos que hacer fue crear la plantilla para el campo específico de nuestro tipo de contenido, es decir, creamos el fichero field--field-imagenes--galeria.tpl.php, incluyendo en él código que nosotros requeríamos, quedando de la siguiente manera:


<div class="galeria">
     <?php foreach ($items as $delta => $item): ?>
          <?php print render($item); ?>
     <?php endforeach; ?>
</div>

[x] Este sitio utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando estás aceptando su uso. Política de cookies.