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:
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>