[РЕШЕНО] Проблема с Views, пляшут колонки

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

Аватар пользователя Artemiy-tlt Artemiy-tlt 19 августа 2014 в 15:56

Столкнулся с такой проблемой во Views.
Создал новый тип материала. Добавляю к нему поля:
- Поле 1
- Поле 1.1
- Поле 2
Создаю Представление. Задача вывести таблицей все поля, но "Поле 1" и "Поле 1.1" должны быть в одной колонке и разделяться символом "/". В представлении в настройках формата выставляю второму поле выводиться в первой колонке. Проблем не возникает, результат радует.

Заголовок | Поле 1 | Поле 2
-------------------------------
test | A/B | C

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

Для проверки стираю в ноде значение поля "Поле 2", колонка исчезает, все работает отлично.

Заголовок | Поле 1
--------------------
test | A/B

Стираю в ноде значение поля "Поле 1.1", исчезает значение поля "Поле 1.1", все работает отлично.

Заголовок | Поле 1 | Поле 2
-------------------------------
test | A | C

Стираю в ноде значение полей "Поле 1" и "Поле 1.1", колонка, точнее метка исчезает, но само поле нет и получается, что происходит сдвиг заголовков в шапки

Заголовок | Поле 2
-------------------------------
test | | C

Кто сталкивался, помогите советом.

Комментарии

Аватар пользователя Artemiy-tlt Artemiy-tlt 19 августа 2014 в 22:07

VasyOK wrote:
Вообще в CSS можно ширину колонки задать.

Вам это надо?

Нет, там происходит нарушение hmtl разметки. Т.е. th убирается, а td нет.

<table>
  <thead>
    <tr>
      <th>Заголовок</th>
      <th>Поле 2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Заголовок</td>
      <td></td>
      <td>Поле 3</td>
    </tr>
  </tbody>
</table>
Аватар пользователя Artemiy-tlt Artemiy-tlt 20 августа 2014 в 14:49

Решил проблему, правда на скорую руку.
В шаблоне вьюшки views-view-table добавил код на проверку наличия данного заголовка (th) и если его нет, значит вьювс убрал заголовок колонки, и забыл убрать td.
Код шаблона:

<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): ?>
      <tr <?php if ($row_classes[$row_count]) { print 'class="' . implode(' ', $row_classes[$row_count]) .'"';  } ?>>
        <?php foreach ($row as $field => $content): ?>
          <?php // Fix
          if(isset($header[$field])): ?>
            <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 endif; ?>
        <?php endforeach; ?>
      </tr>
    <?php endforeach; ?>
  </tbody>
</table>