Вывод группы разных полей в views

Главные вкладки

Аватар пользователя fit fit 22 января 2014 в 13:16

Господа!
Очень прошу подсказать, как реализовать следующее (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 коллег Smile

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 22 января 2014 в 13:47

Я бы не делал это во views, а сделал бы настройку дисплея можно использовать модуль https://drupal.org/project/entity_view_mode можно добавить нужный дисплей и темизировать его целиком а не каждое поле через views, опять таки в другом месте понадобиться - не надо будет опять настраивать.

Аватар пользователя fit fit 22 января 2014 в 15:32

"<a href="mailto:sas@drupal.org">sas@drupal.org</a>" wrote:
Я бы не делал это во 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

Аватар пользователя fit fit 22 января 2014 в 22:38

Кажется теперь застрял на шаге цикла в шаблоне:
В 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++.
Что может быть? Где моя ошибка?

Аватар пользователя fit fit 22 января 2014 в 23:49

"Inj" wrote:
попробуйте заменить $node->field_email['und'][$count++]['value'] на $item['value'], и каунт будет не нужен

Да, точно! Спасибо, у меня уже мозг "замылился", разумеется $item, я же это определил в foreach Smile

Аватар пользователя fit fit 22 января 2014 в 23:54

Думал на счет нагрузки к БД в случае использования модуля View Entity Mode.

Допустим, что если использовать его для вывода данных в каталог с сотней товаров. Допустим, на странице 100 товаров и все выводится с помощью View Entity Mode через .tpl шаблон этого вида.
По идее, данный способ будет крайне ресурсоемким, ведь все равно идет node_load.
При использовании Views я точно знал, что если я сделаю представление с полями (field view), то это в разы сократит загрузку больших каталожных страниц, ведь там не будет участвовать node_load.
Может в D7 уже как-то усмирили данный процесс, возможно я просто не в курсе. Будут рад, если это так.

Аватар пользователя fit fit 23 января 2014 в 12:40

"<a href="mailto:sas@drupal.org">sas@drupal.org</a>" wrote:
Можно не использовать tpl, во 1 есть display suite, во 2-х есть panelizer и конечно всегда более быстрый _alter + theme_

В ряде случаев это негибкие методы (display suite или panelizer), например даже мой случай, когда из email адреса нужно в итоге получить ссылку <a href="mailto:****@" />