Настройка первого элемента в представлении


7

Как блок на моей домашней странице я пытаюсь вывести:

<ul>
  <li><a><img><p>Node 1</p></a></li>
  <li><a>Node 2</a></li>
  <li><a>Node 3</a></li>
  <li><a>Node 4</a></li>
</ul>

где каждый <li> представляет узел, а изображение / текст, предоставляемый полями CCK, прикрепленными к каждому узлу.

В настоящее время я использую блочное представление для вывода узлов 2-4 и представление «Вложение» для представления первого узла, как описано здесь: http://www.agileapproach.com/blog-entry/the-views2-attachment-display

Проблема в том, что мой вывод заканчивается примерно так:

<div class="attachment attachment-before">
  <div class="view view-homepage-news ..">
    <div class="item-list">
      <ul>
        <li class="views-row ...">  
          <a><img><p>Node 1</p></a>            
        </li>
      </ul>
    </div>  
  </div> <!-- /.view -->
</div>
<div class="item-list">
  <ul>
    <li class="views-row ..."><a>Node 2</a></li>
    <li class="views-row ..."><a>Node 3</a></li>
    <li class="views-row ..."><a>Node 4</a></li>
  </ul>
</div>

Я, вероятно, могу согнуть этот вывод в соответствии с моими целями, но это потребует большого количества шаблонов и конфигурации. Я также хотел бы избегать использования CSS и / или JavaScript для изменения вывода, если только это не единственный вариант.

Учитывая это, какой самый простой способ приблизить результат к тому, что мне нужно?

Редактировать: вот примерный код php, который я использую в поле кода php пользовательского поля (на основе предложения Джереми Френча: вот код, который я использую в моем пользовательском поле PHP Code):

<?php
  ++$static;
  if ($static == 1) {
    $nd=node_load($data->nid);
    $img_path = imagecache_create_path('news_image_thumbnail', $nd->field_image[0]['filepath']);
    print '<a><img src="' . $img_path . '"><p>Node 1</p></a>';
  } else {
    print "<a>Node $static</a>";
  }
?>

Ответы:


5

Вы можете сделать что-то с views_customfield .

Вы добавляете поле php, получаете его только для отображения нужной разметки (без элементов) и выводите значение только для строки номер 1.


Это выглядит великолепно! Это похоже на чистый способ сделать это.
Даниэль Ницше

8

Я лично использую функции предварительной обработки, чтобы сделать это, что-то вроде следующего:

function HOOK_preprocess_views_view_fields(&$vars) {
  if ($vars['view']->name == 'VIEW_NAME' && $vars['view']->row_index == 1) {
    // Do stuff here.
  }
}

6

Я не уверен, правильно ли я понимаю ваш вопрос, но я считаю, что вы могли бы использовать модуль Semantic Views для этого. Если вы зададите для стиля в разделе «Основные настройки» значение «Семантические представления», в настройках «Семантические представления» у вас будет возможность установить «атрибут первого класса», который поможет вам настроить первый элемент списка в представлении в стиле вашей темы. CSS-файл


Семантические представления выглядят великолепно и определенно очистят вывод, но я не хочу полагаться на CSS, чтобы скрыть дополнительную разметку, которую я бы выводил. В противном случае я бы, вероятно, просто использовал li: first-child, чтобы сделать то, что мне нужно.
Даниэль Ницше

Мне просто любопытно, так как я все еще учусь сам, но в чем причина нежелания использовать CSS для изменения первого элемента в виде списка?
Jay

1
в основном дополнительный HTML, который он будет производить. Пример: сайт, над которым я работаю, будет использоваться некоторыми пользователями с подключениями удаленного доступа - в этих случаях учитывается каждый байт. Кроме того, использование CSS выглядит как хак: с точки зрения обслуживания, администраторы не должны изменять CSS для изменения вывода HTML. Это должно быть сделано в Drupal.
Даниэль Ницше

4

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.