Господа!
Очень прошу подсказать, как реализовать следующее (D7):
Есть тип материала "Контакт" с группой полей: [ Email ] и [ Получатель ].
Группу полей сделал через Field Collections (вроде на D7 так правильно, хотя мне лично был удобнее старый добрый CCK для D6 с мультигруппой), что бы можно было делать несколько записей Email+Получатель в одной ноде.
Далее создаю ноду и вношу несколько значений:
[ email1 ] [ Получатель1 ]
[ email2 ] [ Получатель2 ]
[ email3 ] [ Получатель3 ]
Ок, теперь мне нужно все это добро вывести в Views (в блоке). Из-за группировки полей через Field Collections я не могу влиять на представления каждого поля по отдельности. Только сразу на всю группу (она как бы является одним полем - оч. странная логика).
Суть в том, что мне требуется сделать вывод поля email в виде ссылки (mailto:*****@****). Через Views это сделать не получается.
Пробовал использовать модуль Field Collection Views - так же не подходит для решения задачи.
С D7 работаю недавно, поэтому вполне может быть, что выбранные мною модули не подходят для решения нужной мне задачи. Прошу помощи более опытных в D7 коллег
Комментарии
Я бы не делал это во views, а сделал бы настройку дисплея можно использовать модуль https://drupal.org/project/entity_view_mode можно добавить нужный дисплей и темизировать его целиком а не каждое поле через views, опять таки в другом месте понадобиться - не надо будет опять настраивать.
Спасибо за подсказку. На D6 пользовался build modes и шаблоны были такого формата: node-webform-test.tpl.php (где test - название build mode).
Для D7 нужен немного иной формат: node--webform--test.tpl.php
Кажется теперь застрял на шаге цикла в шаблоне:
В node--webform--test.tpl.php пишу:
<?php
$count = 0;
$array = $node->field_email['und'];
foreach ($array as $item) {
?>
<div class="row">
<span>
<a href="mailto:<?php print $node->field_email['und'][$count++]['value']; ?>">
<?php print $node->field_email['und'][$count++]['value']; ?></a>
</span>
<span><?php print $node->field_mailto['und'][$count++]['value']; ?></span>
</div>
<?php } ?>
получаю ошибки:
Notice: Undefined offset: 2 in include() (line 11 of /www/sites/all/themes/mytheme/node--webform--test.tpl.php)
В D6 аналогичный код срабатывал. Сейчас же D7 явно не нравится счетчик $count++.
Что может быть? Где моя ошибка?
попробуйте заменить $node->field_email['und'][$count++]['value'] на $item['value'], и каунт будет не нужен
Да, точно! Спасибо, у меня уже мозг "замылился", разумеется $item, я же это определил в foreach
Думал на счет нагрузки к БД в случае использования модуля View Entity Mode.
Допустим, что если использовать его для вывода данных в каталог с сотней товаров. Допустим, на странице 100 товаров и все выводится с помощью View Entity Mode через .tpl шаблон этого вида.
По идее, данный способ будет крайне ресурсоемким, ведь все равно идет node_load.
При использовании Views я точно знал, что если я сделаю представление с полями (field view), то это в разы сократит загрузку больших каталожных страниц, ведь там не будет участвовать node_load.
Может в D7 уже как-то усмирили данный процесс, возможно я просто не в курсе. Будут рад, если это так.
Можно не использовать tpl, во 1 есть display suite, во 2-х есть panelizer и конечно всегда более быстрый _alter + theme_
В ряде случаев это негибкие методы (display suite или panelizer), например даже мой случай, когда из email адреса нужно в итоге получить ссылку
<a href="mailto:****@" />