РЕШЕНО! убрать строки в табличной вьюхе если поле не имеет значение

Комментарии

Аватар пользователя divined divined 28 мая 2012 в 11:07

Я делал это в views-view-table.tpl.php.

Просто в php сначала обрабатываешь массив $rows, а потом стандартный код темизации.

ПС: На сколько мне известно, более простого решения нет (

Аватар пользователя divined divined 28 мая 2012 в 11:19

Да, кстати я об этом не подумал ))

Я скрывал наоборот столбцы, а с помощью фильтра действительно скрывается стока.

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 11:23

это как так можно сделать фильтр на значение? что бы потом поле (заголовок поля) и это значение не выводилось во вьюхе...

Аватар пользователя divined divined 28 мая 2012 в 11:25

хмм, фильтр по полю ноды: если значение больше 0, например.
То к этой ноде вообще вьюха не будет обращаться соответственно и выводить в таблице ее не будет.

Аватар пользователя nyhm nyhm 28 мая 2012 в 11:27

В разделе фильтров кнопка "+", выбрать поле, указать значение, для всех полей кроме таксономии можно указать кустомное значение, по крайней мере так в 7рке.

Аватар пользователя nyhm nyhm 28 мая 2012 в 11:27

"divined" wrote:

хмм, фильтр по полю ноды: если значение больше 0, например.
То к этой ноде вообще вьюха не будет обращаться соответственно и выводить в таблице ее не будет.


да

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 11:28

да, это вариант. если в шаблонах не охота возиться. но все равно 2 вьюхи придется делать.

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 11:32

убрать то нужно 1 строку с этим полем из всей вьюхи остальное оставить...

варианта с шаблонами и 2 вьюхами больше нет?

например в пхп чонить прописать... в аргументе вьюхи по nid НОДЫ, ТАм проверка по пхп есть... в разделе если аргумент не верен то...

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

---

хотя это то же все не то...

в полях должна быть настройка такая наверное но она не придумана. только значение поле убираться и все...

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 11:32

"divined" wrote:

А зачем 2 вьюхи? Что вас не устраивает сделать 2 вида в 1 вьюхе?

ну я это и имею виду. что два вида.

Аватар пользователя divined divined 28 мая 2012 в 11:44

Вам же подсказали поставить фильтр, это нечто типа аргумента только значение вбиваете вы а вставляется в адрес. Попробуйте, и не надо как вы говорите несколько вьюх, хотя как я уже говорил, вы хотя бы скажите что хотите получить.

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 11:48

Я имею ноду с полями. Хочу собрать кастомную ноду и все поля вывести в табличке. При этом если значения у поля нет или значение имеет не требуемое значение поля, то вывод этого поля исключить из вида вьюхи. ну или скрыть... пока что получаться значение скрывать, а нужно всю строку или столбец...

видимо это через темизацию вьюхи надо условие прописывать и исключать из вывода поле...

вот хотелось бы понять как это сделать...

а то иногда приходиться по 10 видов делать для каждой роли свой вид (но мне кажеться можно в темизации задать условия и обойтись одним видом... )

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 11:49

"divined" wrote:
Вам же подсказали поставить фильтр, это нечто типа аргумента только значение вбиваете вы а вставляется в адрес. Попробуйте, и не надо как вы говорите несколько вьюх, хотя как я уже говорил, вы хотя бы скажите что хотите получить.

это вся вьюха уйдет... мне кажется.

Аватар пользователя divined divined 28 мая 2012 в 11:52

Вы с помощью вьюхи хотите темизировать 1 ноду????

У вас отвращение к tpl файлам или несварение когда их используете? Они ведь специально для этого предназначены.

Если вы будете вьюхи использовать не по назначению вы убьете свой сайт.

Аватар пользователя divined divined 28 мая 2012 в 11:54

Вьюха предназначена только чтобы выводить определенный список полей отфильтрованного набора содержимого.

Вся красота и тип отображения делается в tpl файлах.

Настройка вывода ноды делается в tpl файлах.
Все таблички и прочая чушь рисуются в tpl файлах.

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 11:59

через виевс как то проще... и быстрее разве нет?

конечно все это можно отрисовать в шаблоне типа материала.

вот ссылка http://agatawar.ru/catalog/link/4519.html

необходимо убрать строку - HD качество изображения со значение нет *

это чекбокс (нет/да) , когда нет - не хочется выводить это поле вообще...

Аватар пользователя divined divined 28 мая 2012 в 12:03

Нет, нет и нет так делать нельзя.

Это абсурдно темизировать ноду через views. Скорость загрузки вашей страницы более 10сек, это вам ни о чем не говорит?

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 12:06

я то все понимаю что грузят. но хочется разобраться и уметь это делать.
такая скорость загрузки и у нод где нет приатаченых вьюх.

Аватар пользователя nyhm nyhm 28 мая 2012 в 12:08

"iNFerNo" wrote:
нет, нет, еще один здоровый модуль.

ну это если в шаблоны лезть не хочется)

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 12:08

"divined" wrote:
Скорость загрузки вашей страницы более 10сек, это вам ни о чем не говорит?

у меня ксти 2,8 сек грузиться нода.

Аватар пользователя divined divined 28 мая 2012 в 12:26

2,8 это после кэширования.

Удалите кэш в друпале, удалите кэш в браузере и попробуйте снова =).

Скорость загрузки:
108.2 KB (0 KB из кеша) 11.19s (onload: 9.9s)

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 13:14

когда через вьюху она сразу все строки красит (зеброй).

а если я буду ручками в шаблоне. откуда я узнаю какая строка должна быть... цвета зебры........

Аватар пользователя divined divined 28 мая 2012 в 13:23

откройте шаблон views-view-table.tpl.php

там все написано и как раскрасить и как вообще вывести таблицей массив.

А вообще зебра дело тривиальное:

1. делаем цикл по всем строкам
2. проверяем строка четная или нет
- четная выводим <tr class="even">
- нечетная выводим <tr class="odd">
3. цикл по всем полям
4. выводим <td></td>
5. завершаем цикл по полям
6. выводим </tr>
7. завершаем цикл по строкам

Здесь вам и зебра и принцип темизации данных в таблицу.

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 13:26

так я в ноде тупо хтмл таблицы нарисовал и туда поля от ноды... поэтому пост выше наверное не подойдет. нужно таблицу в ноде как то по другому выводить...

Аватар пользователя nyhm nyhm 28 мая 2012 в 13:29

"iNFerNo" wrote:
когда через вьюху она сразу все строки красит (зеброй).

а если я буду ручками в шаблоне. откуда я узнаю какая строка должна быть... цвета зебры........


у друпала есть переменная $zebra для этих целей

Аватар пользователя divined divined 28 мая 2012 в 13:44

вы неправы
не у друпала, а у полей есть такая переменная, причем эта переменная доступна не во всех щаблонах.

Если вы вручную нарисовали тем проще, добавьте тэгам tr попеременно классы odd и even.
Это и есть классы зебры.

Аватар пользователя nyhm nyhm 28 мая 2012 в 13:47

"divined" wrote:

вы неправы
не у друпала, а у полей есть такая переменная, причем эта переменная доступна не во всех щаблонах.

Если вы вручную нарисовали тем проще, добавьте тэгам tr попеременно классы odd и even.
Это и есть классы зебры.


простите мою безграмотность, коллега, работать с друпалом начал полгода назад, использую API около месяца.

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 13:48

так я еще раз повторюсь что. некоторые поля могут быть а могут не быть в этой таблице... поэтому могут быть случаи

типа

odd
even
odd
odd
even

Аватар пользователя nyhm nyhm 28 мая 2012 в 13:50

"iNFerNo" wrote:
так я еще раз повторюсь что. некоторые поля могут быть а могут не быть в это таблице... поэтому могут быть случай

типа

odd
even
odd
odd
even


если вручную выводить классы, то такой ситуации возникнуть не может.

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 13:56

вы не правы. вот хтмлка таблицы с вручную заведенными классами

  <table>
<tbody>
<tr class="even">
<th> Категория </th>
<td> <?php      print  $node->field_type_arch[0]['value'];      ?>      </td>
</tr>
<tr class="odd">
<th> URL для закачки </th>
<td>
<?php print $node->field_download_link[0]['view'] . ' (' . $node->field_name_of_file_hosting[0]['value'] . ')'; ?>
</td>
</tr>
<tr class="even">
<th> Размер файла </th>
<td> <?php      print  $node->field_size_of_the_file[0]['value'];       ?>  Мб </td>
</tr>

<?php if ($node->field_capabilities_vip[0]['value']): ?>
<tr class="odd">
<th> Качество изображения </th>
<td> <?php      

print  t('HD');         ?>  </td>
</tr>
<?php endif; ?>  

<?php if ($node->field_advises_project[0]['value']): ?>

<tr class="even">
<th> Оценка записи </th>
<td> <?php      print  $node->field_advises_project[0]['view'];         ?>  </td>
</tr>
    <?php endif; ?>  

</tbody>
</table>

если все поля присутствуют то все ок. если какого то поля нет то получается дырка в зебре и повторы классов...

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 13:55

тупо в лоб прописать все случаи со своими зебро разметками... но это не айс. мало ли что еще накручу потом. хочеться чтобы таблица сама строилась и зебра сама раставлялась...

Аватар пользователя iNFerNo iNFerNo 28 мая 2012 в 14:00

а вообще мне как то сюда нужно свои поля засунуть

<?php
  // Flip the table.
  $row = array();
  foreach ($rows as $col){
    foreach ($col as $ltr => $value){
      $row[$ltr][] = $value;
    }
  }
  $first = isset($row['title']);
  $element = 'odd';
?>
<table class="<?php print $classes; ?>">
  <?php if (!empty($title)) : ?>
    <caption><?php print $title; ?></caption>
  <?php endif; ?>

  <?php if ($first) : ?>
  <thead>
    <tr class="<?php print $element; ?>">
      <th>
      </th>
      <?php foreach ($row['title'] as $title) : ?>
      <th>
      <?php print $title; ?>
      </th>
      <?php endforeach; ?>
    </tr>
  </thead>
  <?php  
    $first = FALSE;
    endif; //$first
    $element = 'even';
  ?>
  <tbody>
    <?php foreach ($row as $field => $rowname) : ?>
      <?php if ($field != 'title') : ?>
      <tr class="<?php print $element; ?>">
        <th>
          <?php print $header[$field]; ?>
        </th>
      <?php foreach ($rowname as $count => $item): ?>
        <td>
          <?php print $item; ?>
        </td>
      <?php endforeach; ?>
      </tr>
      <?php
        if ($element == 'odd'){
          $element = 'even';
        } else {
          $element = 'odd';
        }
      ?>
      <?php endif; // field != title ?>
    <?php endforeach; ?>
  </tbody>
</table>

Аватар пользователя nyhm nyhm 28 мая 2012 в 14:02

так есть код

<?php
 $custom_zebra 
true;
 <
table>
 ...
 if (...):
 <
tr>
...
print (
$custom_zebra) ? 'even':'odd';
$custom_zebra = !$custom_zebra;
</
tr>
endif;
...
?>
Аватар пользователя nyhm nyhm 28 мая 2012 в 14:22
<?php  
$custom_zebra
=true;
<
table>
<
tbody>
<
tr <?php print ($custom_zebra)? 'even':'odd'$custom_zebra= !$custom_zebra?>>
<th> Категория </th>
<td> <?php     print  $node->field_type_arch[0]['value'];     ?>      </td>
</tr>
<tr <?php print ($custom_zebra)? 'even':'odd'$custom_zebra= !$custom_zebra?>>
<th> URL для закачки </th>
<td>
<?php print $node->field_download_link[0]['view'] . ' (' $node->field_name_of_file_hosting[0]['value'] . ')'?>
</td>
</tr>
<tr <?php print ($custom_zebra)? 'even':'odd'$custom_zebra= !$custom_zebra?>>
<th> Размер файла </th>
<td> <?php     print  $node->field_size_of_the_file[0]['value'];     ?>  Мб </td>
</tr>
 
<?php if ($node->field_capabilities_vip[0]['value']): ?>
<tr <?php print ($custom_zebra)? 'even':'odd'$custom_zebra= !$custom_zebra?>>
<th> Качество изображения </th>
<td> <?php     
 
 
print  t('HD'); ?>  </td>
</tr>
<?php endif; ?>   
 
<?php if ($node->field_advises_project[0]['value']): ?>
 
<tr <?php print ($custom_zebra)? 'even':'odd'$custom_zebra= !$custom_zebra?>>
<th> Оценка записи </th>
<td> <?php     print  $node->field_advises_project[0]['view'];     ?>  </td>
</tr>
    <?php endif; ?>   
 
</tbody>
</table>?>
Аватар пользователя nyhm nyhm 28 мая 2012 в 14:29

"iNFerNo" wrote:

увы выше код вообще ничего не разукрашивает...


Это ваш код, с моей коррекцией вывода классов зебры

Аватар пользователя iNFerNo iNFerNo 29 мая 2012 в 8:28

"divined" wrote:

гранд мерси. теперь буду знать и о такой возможности для таблиц.

"nyhm" wrote:

и вам спасибо!

Аватар пользователя iNFerNo iNFerNo 29 мая 2012 в 8:31

один момент только. для расширения знаний.

Собрал я вид (для всех пользователей) из полей вывел страницей по желаемому адресу.

А как по условиям можно для тех же гостей скрыть поле (заголовок и значение) для всех выводимых нод... что бы не строить лишние виды. через темизацию вьюхи...

если да, то где можно пример из практики поглядеть???

Аватар пользователя divined divined 29 мая 2012 в 10:13

Опишите на примере, покажите эту вьюху, я опять не могу вкурить что вы хотите )

Аватар пользователя iNFerNo iNFerNo 29 мая 2012 в 10:29

есть табличный вид вьюхи с полями.

вид доступен всем ролям

но для гостей например нужно убрать видимость именно в это вьюхе одного поля (поле кастомное вьюшное в котором выводиться необходимое)

делать 2 вида ради скрытия поля для гостей не хочется... есть ли еще решение, например через темизацию вида вьюхи

Аватар пользователя iNFerNo iNFerNo 29 мая 2012 в 10:32

РхБ пора вместо трепа лучше лишний раз дельный совет давать раз умнее всех, всяко от постов смысла было бы ваших больше.

Аватар пользователя divined divined 29 мая 2012 в 10:47

Да, я думаю можно через темизацию этот вопрос решить.

<?php
  
global $user;
  if (!
in_array('anonymous user'array_values($user->roles))) {
     
//код который отображает поле
  
}
?>

Думаю этого должно хватить. Где происходит темизациия вьюхи я уже говрил.
Могу только добавить:

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

После этого изменения этого файла темизации не затронут другие созданные вами ранее вьюхи )

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 29 мая 2012 в 10:55

"iNFerNo" wrote:
РхБ пора вместо трепа лучше лишний раз дельный совет давать раз умнее всех, всяко от постов смысла было бы ваших больше.

Тебе советы дельные дают регулярно, но ты не ищешь лёгких путей

Аватар пользователя iNFerNo iNFerNo 29 мая 2012 в 11:03

"divined" wrote:

с темизацией вьюх я дело имел давно уже.

//код который отображает поле

с этим не понятно, что за код и в каком виде его добавлять.

Аватар пользователя divined divined 29 мая 2012 в 11:06

Код у вас уже есть в файле темизации.

Я вам привел обертку для кода, который переводится так...
Если пользователь не аноним то:

И потом код вывода поля. Там только нужно будет добавить второе условие на имя поля что скрыть только нужное поле.

Аватар пользователя iNFerNo iNFerNo 29 мая 2012 в 11:09
<?php
  global $user;
  if (!in_array('anonymous user', array_values($user->roles))) {
     //код который отображает поле

<div class="<?php print $classes; ?>">
  <?php if ($admin_links): ?>
    <div class="views-admin-links views-hide">
      <?php print $admin_links; ?>
    </div>
  <?php endif; ?>
  <?php if ($header): ?>
    <div class="view-header">
      <?php print $header; ?>
    </div>
  <?php endif; ?>

  <?php if ($exposed): ?>
    <div class="view-filters">
      <?php print $exposed; ?>
    </div>
  <?php endif; ?>

  <?php if ($attachment_before): ?>
    <div class="attachment attachment-before">
      <?php print $attachment_before; ?>
    </div>
  <?php endif; ?>

    <?php if ($pager): ?>
    <?php print $pager; ?>
  <?php endif; ?>

 
  <?php if ($rows): ?>
    <div class="view-content">
      <?php print $rows; ?>
    </div>
  <?php elseif ($empty): ?>
    <div class="view-empty">
      <?php print $empty; ?>
    </div>
  <?php endif; ?>

  <?php if ($pager): ?>
    <?php print $pager; ?>
  <?php endif; ?>

  <?php if ($attachment_after): ?>
    <div class="attachment attachment-after">
      <?php print $attachment_after; ?>
    </div>
  <?php endif; ?>

  <?php if ($more): ?>
    <?php print $more; ?>
  <?php endif; ?>

  <?php if ($footer): ?>
    <div class="view-footer">
      <?php print $footer; ?>
    </div>
  <?php endif; ?>

  <?php if ($feed_icon): ?>
    <div class="feed-icon">
      <?php print $feed_icon; ?>
    </div>
  <?php endif; ?>

</div><?php /* class view */ ?>

  }
?>

а условие на поле в виде $data->название поля?

Аватар пользователя divined divined 29 мая 2012 в 11:19

Ну я думаю надо обернуть только эту часть:

<?php print $rows; ?>

//Посмотрите содержимое переменной $rows там будет видно по чему добавить условие, примерно так как вы написали, но немного по другому.

<?php drupal_set_message("

".print_r($rows,1)."

"); ?>
<?php print $rows; ?>

Аватар пользователя divined divined 29 мая 2012 в 11:20

Да и кстати, надо бы это сделать вообще в другом файде, а именно который темизирует саму строку а не весь вид.

Аватар пользователя iNFerNo iNFerNo 29 мая 2012 в 11:21

я это значение $data->node_data_field_noderef_catalog_field_funding_value

взял добавив в виде вьюхи print_r($data)

а как для $rows; так же???

Аватар пользователя divined divined 29 мая 2012 в 11:49

Попробуйте сами, я этим не занимался никогда, просто пишу как бы я поступил если бы мне это потребовалось.

<?php drupal_set_message("

".print_r($rows,1)."

"); ?>

Я же написал как правильно и структуировано получать значения массивов в переменных.