Темизация views на основании значения поля

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

Аватар пользователя Celios Celios 12 февраля 2013 в 14:43

Добрый день. Нужна помощь знающих людей.
Drupal 7, Views 3, Grid style + Fields
есть представление в которое выбирается поля таксономии: tid, name + два Field View с подчиненными представлениями из нод.
Надо темизировать выводимый элемент старшего представления в зависимости от значения термина таксономии (менять картинку в бекграунде).
Я планирую это делать так:
изменить views-view-grid.tpl.php

<?php if (!empty($title)) : ?>
  <h2><?php print $title; ?></h2>
<?php endif; ?>
<div class="<?php print $class; ?> view-rows-<?php print count($rows);?>"<?php print $attributes; ?>>
  <?php foreach ($rows as $row_number => $columns): ?>
    <div class="views-row <?php print $row_classes[$row_number]; ?>">
      <?php foreach ($columns as $column_number => $item): ?>
        <?php if (!empty($item)):?>
          <div class="grid views-col <?php print $column_classes[$row_number][$column_number]; ?>">
            <div class="grid-inner col-inner clearfix">
              <?php print $item; ?>
            </div>
          </div>
        <?php endif; ?>
      <?php endforeach; ?>
    </div>
  <?php endforeach; ?>
</div>

В строчку <div class="grid views-col <?php print $column_classes[$row_number][$column_number]; ?>"> хочу добавлять класс, который будет называться на основании значения термина таксономии, заданного в нодах. Например для выбираемого термина Брюки, будет показываться картинка с брюками, а для рубашек - рубашка из CSS.
Теперь вопрос: как из переменной $item можно получить ссылку на термин таксономии (tid)? Может можно это сделать как-то по другому?

Комментарии

Аватар пользователя roman-yrv roman-yrv 12 февраля 2013 в 15:55

Я в таких случаях поступаю так.
Сначала нужно установить модуль devel (средство для разработчика)
А затем можно воспрользоваться одной из отладочных функций, они хорошо описаны здесь
http://xandeadx.ru/blog/drupal/304

Затем в коде можно прописать какую-нибудь отладочную функцию, например
<?php kpr($item); ?>

И после недолгого исследования станет ясно, в каком элементе или подэлементе массива прячется термин таксономии.

И дальше обычная конструкция типа
<?php if ($item[...] ...) { print 'class="..."'}

Аватар пользователя Celios Celios 12 февраля 2013 в 20:15

в том то и дело, что не получается так посмотреть. Devel сразу поставил, когда начал разбираться. Уже как только не пробовал... Проверил тип переменной $item - gettype($item) вообще пишет = string. Я думал что это array должен быть. Пытаюсь выводить значение с помощью отладочных функций и еще пяток способов в интернете вычитал - выводится в качестве значения чистый html. Вот что выводится kpr($item, false) :

 <div class="views-field views-field-tid">        <span class="field-content">2</span>  </div>  
  <div class="views-field views-field-name">        <span class="field-content"><a href="/categories/family">Семья</a></span>  </div>  
  <div class="views-field views-field-view">        <span class="field-content"><div class="view view-attachments view-id-attachments view-display-id-block view-dom-id-1eb54e1293a3494f39bba299ba65f0a0">          
      <div class="view-content">
        <div class="views-row views-row-1 views-row-odd views-row-first views-row-last">

Я то думал, что увижу что-то типа array
Field1 = Value1
Field2 = Value2
а тут ничего похожего. Пробовал получить size массива $items - тоже говорит = 1.
Похоже, что в переменную $items приходит уже построенный в другом шаблоне html (подозреваю, что это происходит в views-view-fields.tpl.php) и никакой нормальной возможности добраться до поля tid я пока не нашел.
Надо получить tid = 2, что хранится в в строке  <div class="views-field views-field-tid"> <span class="field-content">2</span>  </div>

Пока придумал только способ - разрезать переменную $item с помощью Explode по строке categories и затем вырезать все значения tid с помощью строковых функций. Но мне дико не нравится такое решение. Подсобите плиз кто что знает по теме - как из $item в views-view-grid.tpl.php вытащить tid