视图-按结果的首字母分组


7

正如标题所描述的,我正在尝试按视图的第一个字母分组视图的结果。谷歌搜索向我展示了一种方法,一半完成了:显示标题两次,从显示中排除,限制为第1个字符,并以此分组。聪明的我必须承认,但是即使其中没​​有结果,我也需要显示一个分组字段,例如:

A
  Alpha
  Anekin

B
  Bravo
  Borvo
C

D
  Delta
  Dooku

关于如何去做的任何想法?

Answers:


4

一个简单的解决方案是添加一个仅包含第一个字母和分组的字段。

视图还支持做词汇表,这是一个不同的过程,但是允许您按首字母分组并计算结果数并显示fx

A(2)B(2)C(0),作为暴露的过滤器,这是通过视图3中的上下文完成的。


“一个简单的解决方案是添加一个仅包含第一个字母并以此分组的字段。” 我实际上是在说我的问题,但是看到“ C”并没有给我任何结果,但我仍然希望它呈现出来,但我看不出这对我有什么帮助。我将研究词汇表。
magtak 2012年

1
@magtak您可以使用主题添加丢失的字母
googletorp

1
你能详细说明一下吗?
magtak 2012年

我试图理解“一个简单的解决方案是添加仅包含第一个字母的字段”。我应该在内容类型中添加一个字段,并用每个节点的字母填充它吗?
brainHax 2014年

1

确实令人沮丧,但最终我发现了这一点:

在视图行中输出样式tpl文件:

<?php print $wrapper_prefix; ?>
  <?php if (!empty($title)) : ?>
    <h3><?php print $title; ?></h3>
  <?php endif; ?>

<?php $letters = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
foreach ($letters as $letter):?>
<div class="letter family">
  <div class="letter-header"><?php print $letter;?></div>
<?php print $list_type_prefix;  ?>
  <?php foreach ($rows as $id => $row):?>
    <?php $rest = substr($view->result[$id]->node_title,0,1);?>
  <?php if ($rest == $letter):?>
        <li class="<?php print $classes_array[$id]; ?>"><?php print $row; ?></li>
      <?php endif;?>
  <?php endforeach; ?>
<?php print $list_type_suffix; ?>
</div>
<?php endforeach;?>
<?php print $wrapper_suffix; ?>

这对我有用,因为该视图可以输出所有结果,因此我可以放心地假设$ view-> result与$ rows具有相同的元素。$ rows afaik是当前页面的输出。我不确定$ view-> result的行为是否相同。



0

实际上,我们在视图的“标题”部分添加了代码(将输入法选择为PHP代码)。这是我们的php代码,它可以满足您的需求(并且不需要单独的模板文件)。

<?php
  $letters = array(
    'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','y','z'
  );  
?>  
<h2>Browse by Last Name</h2> 
<ul> 
  <li style="display:inline; padding-right:8px;"> 
    <a href="/Full_time_Faculty_Listing" >All</a>
  </li>
  <?php for ($i=0; $i<count($letters); $i++): ?> 
    <li style="display:inline; padding-right:8px;"> 
      <a href="https://drupal.stackexchange.com/Full_time_Faculty_Listing/<?php print $letters[$i];?>"><?php print strtoupper($letters[$i]);?></a>
    </li> 
  <?php endfor; ?> 
</ul>

非常类似于我的主题解决方案:)
magtak'1
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.