Druplicon

Drupal 7: Controlar completamente los template de Field collection

El muy jodido tiene mas vueltas que una oreja cuando de theming se trata.

NOTA: todos los templates que hay que crear ponlos en tu theme. Lo ideal es dentro del directorio tu_theme/templates/field_collection o algo similar.

Primero creamos el tpl field-collection-view.tpl.php que es el wrapper que hay entre el html del field y el del field collection. Pon esto dentro:

<?php print $element['#children']; ?>

Luego field-collection-item.tpl.php que es el tpl que controla el render de cada uno de los item individuales de la colección:

<?php print render($content); ?>

Por ultimo necesitamos field-field-collection.tpl.php (ojo que mi wordpress junta los dos guiones), un tpl para el field que contiene todo lo que field collection entregue:

<ul class="coleccion de items">
  <?php foreach ($items as $delta => $item): ?>
    <li><?php print render($item); ?></li>
  <?php endforeach; ?>
</ul>

Y listo! ya tenes control a todos los niveles del markup que va a entregar un field collection.

Chau!

Comentarios

  1. Regina

    Y si lo que quiero es acceder a los subcampos del field_collection por separado para poder hacerle el theming?

    Responder ↓
    1. Capy Autor

      Regina, si tienes un field collection llamado “field_grupo_de_cosas” y dentro tienes dos field mas: “field_titulo” y “field_imagen“, los nombres de los tpl de cada uno sería:

      field-field_titulo-field_grupo_de_cosas.tpl.php
      field-field_imagen-field_grupo_de_cosas.tpl.php

      NOTA: son dobles guiones los que hay en los nombres, pero el puto wordpress los convierte en uno :) (field[- -]field_titulo[- -]field_grupo_de_cosas.tpl.php)

      El código que va dentro de cada uno de los field tomalo de modules/field/theme/field.tpl.php que es un buen punto de partida.

      Saludos.

      Responder ↓
  2. Regina

    Muchas gracias Capy! Quizás no sea la forma correcta de hacer esto pero al final en lugar de crear todos esos .tpl en mi node-myContentType.tpl.php hice lo siguiente

    <?php
    field_nombre['und'][0]['safe_value'];
        print $item->field_precio['und'][0]['safe_value'];
        print $item->field_imagen['und'][0]['safe_value'];
    }
    

    al tener todos los field en el mismo archivo me parece más fácil para hacerle el theming!
    Saludos

    Responder ↓

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>