自定义视图中的第一项


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修改输出,除非那是我唯一的选择。

鉴于此,使输出更接近我所需要的最简单的方法是什么?

编辑:这是我在customfield php代码字段中使用的一些粗略的php代码(基于杰里米·弗兰奇的建议:这是我在PHP代码customfield中使用的代码:

<?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>";
  }
?>

Answers:



8

我个人使用预处理功能来执行此操作,如下所示:

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

6

我不确定我是否正确理解了您的问题,但是我相信您可以为此使用语义视图模块。如果将“基本设置”下的“样式”设置为“语义视图”,那么您将在“语义视图”设置下具有一个选项来设置“一流属性”,这将帮助您以主题的样式来定位视图中的第一个列表项。 css文件。


语义视图看起来很棒,并且肯定会清理输出,但是我想避免依赖CSS隐藏我将要输出的额外标记。否则,我可能只会使用li:first-child做我需要的事情。
丹尼尔·尼切

我只是好奇,因为我还在学习自己,但是不希望使用CSS修改列表视图中的第一项的背后原理是什么?
杰伊(Jay)

1
大部分会产生额外的HTML。恰当的例子:我正在使用的站点将被一些具有拨号连接的用户使用-在这种情况下,每个字节都很重要。另外,使用CSS就像是一种hack:在维护方面,管理员不必修改CSS即可修改HTML输出。那应该在Drupal中完成。
Daniel Nitsche

4

最简单的解决方案是使用自定义模板。不过,它不需要做很多工作。使用视图界面中可用的主题信息,您可以查看需要更改的模板。您需要做的就是添加一些代码以打印第一个节点的其他项。视图将遍历每一行,因此应该很容易。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.