Решено! Можно ли первые десять строк во вьюхе окрасить в свой или свои цвета???

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

Аватар пользователя iNFerNo iNFerNo 17 января 2014 в 9:59

Вывожу ТОП 100 нод. Необходимо в табличной формате первые 10 нод (заголовков и прочие поля от но) окрасить в другой цвет. По дефолту этого нельзя сделать (только первый последний и через строчку)

Возможно ли каждой строчке присвоить свой айди или див стиля???

Комментарии

Аватар пользователя mbaev mbaev 17 января 2014 в 10:16

во вьюхе в "Настройках поля" -> "Настройках стиля" можно указать "Добавить классы по умолчанию".
тогда к каждой строке будет присваиваться порядковый номер

Аватар пользователя iNFerNo iNFerNo 17 января 2014 в 10:28

у меня по умолчанию - это же дефолтная настройка. да и это относиться к полю... а нужно к строке всей табличной...

Аватар пользователя iNFerNo iNFerNo 17 января 2014 в 10:35

у меня галка стоит

Add views row classes
Add the default row classes like views-row-1 to the output. You can use this to quickly reduce the amount of markup the view provides by default, at the cost of making it more difficult to apply CSS.

но что то row-1? row-2 нет такого Sad

Аватар пользователя iNFerNo iNFerNo 17 января 2014 в 10:46

так галка стоит по дефолту. еще год назад стоит. Кронов кешев за это время было сделано море. Скрины чего именно ???

Аватар пользователя drupby drupby 17 января 2014 в 13:58

"iNFerNo" wrote:
1 апреля еще не скоро, извини.

если до 1 апреля не сможешь написать пару строчек кода , я тебе тогда напишу решение

Аватар пользователя Orion76 Orion76 17 января 2014 в 15:42

Т.е. первым 10 строкам назначить определенные классы?
Типа color-1,color-2 и т.д.?

Добавляем поле Счетчик (помоему в Глобальных)
В нем будет порядковый номер строки: 1,2,3 и т.д.
Задвигаем его в начало и скрываем.

Переопределяем вывод полей с добавлением класса по токену
типа <div class="color-[count]">[field]</div>
где [count] - токен поля Счетчик
[field] - токен текущего поля.

Ну и в стилях прописываем стили для этих классов, естественно..

Аватар пользователя drupby drupby 17 января 2014 в 16:15

"orion76" wrote:
Добавляем поле Счетчик (помоему в Глобальных)
В нем будет порядковый номер строки: 1,2,3 и т.д.
Задвигаем его в начало и скрываем.
Переопределяем вывод полей с добавлением класса по токену

и так все поля переписывать?
Проще id присвоить row внутри которой все поля - вообщем нерациональное предложение

"maxOs" wrote:
у него таблица.

а какая разница то , если он выводит полями?

"iNFerNo" wrote:
окрасить в свой или свои цвета

откуда у тебя свои цвета?

Аватар пользователя drupby drupby 17 января 2014 в 17:12

views-view-table.tpl.php

<table <?php if ($classes) { print 'class="'. $classes . '" '; } ?><?php print $attributes; ?>>
   <?php if (!empty($title) || !empty($caption)) : ?>
     <caption><?php print $caption . $title; ?></caption>
  <?php endif; ?>
  <?php if (!empty($header)) : ?>
    <thead>
      <tr>
        <?php foreach ($header as $field => $label): ?>
          <th <?php if ($header_classes[$field]) { print 'class="'. $header_classes[$field] . '" '; } ?>>
            <?php print $label; ?>
          </th>
        <?php endforeach; ?>
      </tr>
    </thead>
  <?php endif; ?>
  <tbody>
    <?php foreach ($rows as $row_count => $row): ?>
      <?php if($row_count < 10) { $row_classes[$row_count][] = 'inferno';} ?>
      <tr <?php if ($row_classes[$row_count]) { print 'class="' . implode(' ', $row_classes[$row_count]) .'"';  } ?>>
        <?php foreach ($row as $field => $content): ?>
          <td <?php if ($field_classes[$field][$row_count]) { print 'class="'. $field_classes[$field][$row_count] . '" '; } ?><?php print drupal_attributes($field_attributes[$field][$row_count]); ?>>
            <?php print $content; ?>
          </td>
        <?php endforeach; ?>
      </tr>
    <?php endforeach; ?>
  </tbody>
</table>

   

Аватар пользователя mbaev mbaev 17 января 2014 в 16:49

v2: views-view-table.tpl.php


<?php

/**
 * @file
 * Template to display a view as a table.
 *
 * - $title : The title of this group of rows.  May be empty.
 * - $header: An array of header labels keyed by field id.
 * - $caption: The caption for this table. May be empty.
 * - $header_classes: An array of header classes keyed by field id.
 * - $fields: An array of CSS IDs to use for each field id.
 * - $classes: A class or classes to apply to the table, based on settings.
 * - $row_classes: An array of classes to apply to each row, indexed by row
 *   number. This matches the index in $rows.
 * - $rows: An array of row items. Each row is an array of content.
 *   $rows are keyed by row number, fields within rows are keyed by field ID.
 * - $field_classes: An array of classes to apply to each field, indexed by
 *   field id, then row number. This matches the index in $rows.
 * @ingroup views_templates
 */
?>
<table <?php if ($classes) { print 'class="'$classes '" '; } ?><?php print $attributes?>>
   <?php if (!empty($title) || !empty($caption)) : ?>
     <caption><?php print $caption $title?></caption>
  <?php endif; ?>
  <?php if (!empty($header)) : ?>
    <thead>
      <tr>
        <?php foreach ($header as $field => $label): ?>
          <th <?php if ($header_classes[$field]) { print 'class="'$header_classes[$field] . '" '; } ?>>
            <?php print $label?>
          </th>
        <?php endforeach; ?>
      </tr>
    </thead>
  <?php endif; ?>
  <tbody>
    <?php foreach ($rows as $row_count => $row): ?>
      <?php $row_classes[$row_count][]='view-row-'.$row_count?>
      <tr <?php if ($row_classes[$row_count]) { print 'class="' implode(' '$row_classes[$row_count]) .'"';  } ?>>
        <?php foreach ($row as $field => $content): ?>
          <td <?php if ($field_classes[$field][$row_count]) { print 'class="'$field_classes[$field][$row_count] . '" '; } ?><?php print drupal_attributes($field_attributes[$field][$row_count]); ?>>
            <?php print $content?>
          </td>
        <?php endforeach; ?>
      </tr>
    <?php endforeach; ?>
  </tbody>
</table>

?>

Аватар пользователя kv4 kv4 17 января 2014 в 18:52

Пишем стиль

  color-1,
  color-2,
  color-3,
  color-...,
  color-10{
    background-color: #ff0000;
  }

Добавляем в представление поле: Global: View result counter (View result counter) [Exclude from display]
Идём в Page: Style options
В поле Row class пишем

color-[counter]

[counter] - это токен для поля Global: View result counter. Посмотреть его можно в настройках переопределения поля - об этом кстати написано прямо под Row class: "The class to provide on each row. You may use field tokens from as per the "Replacement patterns" used in "Rewrite the output of this field" for all fields."

Теперь только стили нужно подключить.

Аватар пользователя drupby drupby 17 января 2014 в 19:01

"kv4" wrote:
Пишем стиль

color-1,
  color-2,
  color-3,
  color-...,
  color-10{
    background-color: #ff0000;
  }


в моем варианте получается кошерней , а для инферны это значительно

.inferno {
  background-color: #ff0000;
}
Аватар пользователя mbaev mbaev 17 января 2014 в 19:22

"drupby" wrote:
в моем варианте получается кошерней

но если потребуется выделить 5 строк, а не 10, то придется лезть в шаблон)

Аватар пользователя drupby drupby 17 января 2014 в 19:47

"maxOs" wrote:
но если потребуется выделить 5 строк, а не 10, то придется лезть в шаблон)

то есть кошернее редактировать css чем php ?

Аватар пользователя drupby drupby 17 января 2014 в 20:29

"maxOs" wrote:
. Только в стилях быстрее найти, строчку :Р

я боюсь открывать css файлы - у меня паника начинается
да и инферно как истиный кодер тоже явно побрезгует туда лазить

Аватар пользователя kv4 kv4 17 января 2014 в 20:31

Придумал))))

Можно ещё добавить поле Global: Math expression
в нём написать

max(10,[counter])

И в поле Row class вместо

color-[counter]

написать

color-[expression]

И тогда можно стиль сократить до

  color-10{
    background-color: #ff0000;
  }

Правда min не работает, и это не практично, но всё таки в теории можно обойтись без переопределения шаблона:)

Аватар пользователя mbaev mbaev 17 января 2014 в 20:33

"drupby" wrote:
истиный кодер тоже явно побрезгует туда лазить

ух как сказано)) Верстальщики пугайтесь)
Может вы правы. По мне так удобней добавить variable_get('my_module_allocated_rows') и hook_menu() - пару строк, Form Api одно поле. И никаких проблем. Зашел в админку и поставил сколько надо.

Аватар пользователя drupby drupby 17 января 2014 в 20:54

"kv4" wrote:
Правда min не работает,

да и max тоже как то не сильно работает - правда работает извлечение квадратного корня , может инферне пригодится

Аватар пользователя drupby drupby 17 января 2014 в 20:58

"sergeybelya" wrote:
.views-row-first, .views-row-first + tr, .views-row-first + tr + tr ...

ага и будет
.views-row-first,
.views-row-first + tr,
.views-row-first + tr + tr,
.views-row-first + tr + tr + tr,
.views-row-first + tr + tr + tr + tr,
.views-row-first + tr + tr + tr + tr + tr,
.views-row-first + tr + tr + tr + tr + tr + tr,
.views-row-first + tr + tr + tr + tr + tr + tr + tr,
.views-row-first + tr + tr + tr + tr + tr + tr + tr + tr,
.views-row-first + tr + tr + tr + tr + tr + tr + tr + tr + tr

Аватар пользователя mbaev mbaev 17 января 2014 в 23:39

да, можно еще javascript'ом посчитать первые 10 строк, если уж на то пошло.
Вроде 2 четких ответа есть. Мне даже решение от drupby больше нравится. Его можно потом в админку расширить, если потребуется.

Аватар пользователя Orion76 Orion76 18 января 2014 в 22:09

Вообще, даже для тех кто не в танке, а хотя бы на бороне, проще шаблон вывода строк переопеделить.
Это где row в цикле выводятся..
Добавить переменную-счетчик
И при помощи ее добавить нужные классы..

"iNFerNo" wrote:

Вы уже долго с друпалом возитесь..
мне казалось такие проблемы для вас не проблемы?-)

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

Блин, чего тут размышлять - если есть возможность переопределить шаблон, то именно так и нужно сделать.... какие ещё тут варианты могут быть, если не можется лезть в код, тогда делать в представлениях.

Тем более уже показали как сделать. Работать будет так и так. Сопровождать и то и другое - равнозначно.

Задачка-то тривиальная.