Честно сказать мне не очень нравится то что нагородили в D7 но прогресс не остановить заказчики требуют самых новых версий, отказываться от денег глупо, приходится ковыряться. В CCK 3.x были удобные multigroup поля, заменить в D7 их можно только на field_group_multiple или field_collection. Собственно при темизации последнего и возникло ощущение "удаления гланд через анальное отверстие".
В template.php:
<?php
function MYTHEM_field__field_steps($variables) {
if ($variables['element']['#field_type'] == 'field_collection') {
foreach ($variables['items'] as $item) {
$item = array_shift($item['entity']['field_collection_item']);
$fields = array ();
foreach (array(
'field_step_image', 'field_step_text') as $field) {
$fields[] = $item[$field];
}
$output_items[] = render ($fields);
}
return
theme('item_list', array ('type'=>'ol','items'=>$output_items));
}
}
?>
Код выше немного упрощен но в целом выглядит именно так. tpl шаблоны использовать совсем не хотелось поскольку полей около полусотни и вывод некоторых немного отличается (то есть проще проверить в switch чем потом править десяток файлов)
Скажите насколько подобное решение корректно? Можно ли сделать лучше/правильнее?
Комментарии
"Делайте" поля из field_collection прямо в материале, а не по отдельности каждое. И лучше использовать сразу field_collection_field_get_entity().
Немного переписал пример, render() вызывается только один раз для каждой коллекции полей.
field_collection_field_get_entity() вернет тоже что и $variables['items'] чем лучше?
Сделано что через гланды - то через гланды.
Но лучше использовать field-collection-item--имя_поля_коллекции.tpl.php.
Образец field-collection-item.tpl.php в папке модуля.