Вы здесь

Темизация views - как обернуть одно поле другим?

0

Views
field_1 - содержит абсолютный путь к изображению

http://site.ru/sites/all/themes/.../image.jpg

field_2 - текстовый блок

<span>Some text</span>

Необходимо создать DOM в виде:

<div style="background-image:url(field_1);">
    field_2
</div>

Используем вкладку Theme во Views для вывода абсолютного пути внутри STYLE:background-image в шаблоне поля field_1 пишем:

<?php echo '<div class="slide-wrapper" style="background-image:url('.$output.');"></div>'; ?>

Но как теперь вписать в эту конструкцию значение из другого поля?
Какой шаблон использовать для работы сразу с несколькими выводами полей?
Почитал Drupal API (views-view-fields.tpl.php), получилось следующее:

<?php
  $myImage = $fields['field_background_image']->content;
  $myText = $fields['description']->content;
  echo '<div class="slide-wrapper" style="background-image:url('.$myImage.');">'.$myText.'</div>';
?>

Но скорее всего код не верный, либо я его не в тот шаблон поместил.
Может кто-то может помочь и объяснить из какого шаблона можно обращаться ко всем полям Views.
Спасибо.

Версия Drupal: 
7.x
Категория: 
Theming
Связанные проекты: 
Views
Вопрос задан 31.10.2015 - 07:46

Ответы

2

Поставьте модуль devel и посмотрите, что содержится в $fields. В шаблоне напишите:

dsm($fields);
Ответ дан 31.10.2015 - 10:05
Аватар пользователя shu
shu
172
1

field_2 = field_1|field_2
tpl field_2 <?php $data = explode('|', $output)?>
<div style="background-image:url(<?php print $data[1]?>);">
<?php print $data[1]?>
</div>

Ответ дан 31.10.2015 - 12:25

Не могли бы добавить немного комментариев. Не понятен мне немного ваш вариант.
Спасибо большое за помощь.

Комментарий оставлен 31.10.2015 - 19:53

суть данного способа, это объединение двух полей в одно, а вывод уже формируется в tpl второго поля
1. перезаписать результаты второго поля, и ставите там field_1|field_2 (обязатиельно добавить символ "|" между полями)
2. в tpl попадают теперь два поля, разделенные символом "|"
3. разделяете поля <?php $data = explode('|', $output)?>

Комментарий оставлен 01.11.2015 - 20:09

В итоге получил следующее:

<?php
    $datas = explode('|', $output);
    echo '<div class="slide-wrapper" style="background-image:url('.$datas[0].');">'.$datas[1].'</div>';
?>

PHP победил. Спасибо большое вам за помощь.

Комментарий оставлен 03.11.2015 - 04:26
0

В первом поле выбрать - не выводить, его токен использовать во стором для вывода

Ответ дан 31.10.2015 - 08:29

Атрибуты не работают в этом случае, уже пробовал. То есть style не сработает.

Комментарий оставлен 31.10.2015 - 16:30
0

Необходимо создать DOM в виде:

 <div style="background-image:url(field_1);">
     field_2
 </div>

исключите из вывода поле 1.
поле 1 должно быть выше поля 2.
для поля 2 отметьте : Перезаписать результаты - Заменить выводимое полем значение
впишите туда этот хтмл используя токены, которые вы увидите в "Просмотр доступных шаблонов"
подробнее о таком использовании полей - в теме как настроить Views при работе с Flex slider на моем сайте.

Ответ дан 31.10.2015 - 11:11

Атрибут style не работает при таком подходе. Тоже думал, что так можно решить, но не тут-то было. Только в шаблонах темизации атрибуты сохраняются. Может у кого есть решение этой проблемы во вьюс?

Комментарий оставлен 31.10.2015 - 16:30

я не понял: у вас получается не то что нужно, но почему так я не понял. возможно, это потому что поле картинки выводится не только строкой содержащей урл картинки. если так то для поля картинка надо отключить все обертки или перезаписать результаты тоже.
если не так то я не знаю, у вас картинка - это простое текстовое поле?

Комментарий оставлен 31.10.2015 - 18:03
0
  • скройте оба поля
  • добавьте новое поле Пользовательский текст
  • выведите там нужные вам данные через токены
Ответ дан 31.10.2015 - 18:37

Атрибуты не будут там работать. Поле Глобальный: Пользовательский текст не поддерживает атрибуты (style и прочие).

Комментарий оставлен 31.10.2015 - 19:52

атрибут class поддерживается точно
вы проверили style ?

Комментарий оставлен 31.10.2015 - 20:28

Да, это я поторопился писать, что все атрибуты не поддерживаются. Не поддерживается только style. Он-то мне и нужен.)

Комментарий оставлен 03.11.2015 - 04:09