Dis*_*sco 6 drupal views drupal-views
我有一个巨大的公司列表(nodetype:公司,只有字段是标题),我希望以一种很好的方式显示它们的第一个字母像这样的字典:
A
Abc company
Alot of work company
B
Beautiful company
Best company
Run Code Online (Sandbox Code Playgroud)
试图找到一种以优雅的方式做到这一点的方法; 似乎没有模块存在.任何的想法 ?
mes*_*dup 12
你真的不需要沿着代码路径去实现这个目标.你可以在这里看到一些描述:http://drupal.org/node/641342
基本上,将节点标题添加到视图两次.第一个是带有链接等的正常字段.第二个用于分组.
标记为要从显示中排除的第二个字段,删除标签,并将字段修剪为最大长度1(取消选中单词边界,省略号和html选项).
然后,在"行样式"选项下,您将找到"分组依据"设置,并且您只需选择第二个节点标题字段.
如果你想让它看起来像某种方式或者可能为每个字母添加锚点,你可能需要应用额外的主题,否则这应该适用于具有视图2模块的Drupal版本6
此外,我应该指出模块组http://drupal.org/project/views_groupby,它可以提供一些额外的功能,但原始问题并不是真正需要的.
看看Views模块,它提供了一个名为"词汇表"视图.按字母顺序对内容进行排序,并创建各种字母索引.另请参阅http://drupal.org/node/441024,尽管她可能使用了Glossary模块.还有一个名为Dictionary(demo)的模块.
要使用视图而不是其他贡献的模块(例如词汇表)来完成您想做的事情,您必须定义自己的视图并为其设置主题。
首先,您需要创建一个新的节点视图。我将把它命名为 myglossary,但这并不重要。确保其中一个字段是节点标题,并且它按节点标题升序排序。换句话说,就是按字母顺序排列。我假设您将使用未格式化的行样式(这是默认的),但您可能可以对其他行样式执行类似的操作。
然后,你必须进入你的主题。从views/theme 文件夹中,将views-view-unformatted.tpl.php 模板复制到您正在使用的主题的文件夹中。将其重命名为views-view-unformatted--myglossary.tpl.php,以便它仅用于此视图。然后,打开主题的 template.php 文件,并添加预处理函数:
//Change mytheme to your theme name
function mytheme_preprocess_views_view_unformatted__myglossary(&$vars) {
//If you have the devel module installed,
//this is a great way to see all the available variables
//dpm($vars);
$results = $vars['view']->result;
$rows = $vars['rows'];
//Sort rows into letter sets
$letters = array();
$i = 0;
foreach ($results as $result) {
$first_letter = strtolower(substr($result->node_title, 0, 1));
if (is_array($letters[$first_letter])) {
array_push($letters[$first_letter], $rows[$i]);
}
else {
$letters[$first_letter] = array($rows[$i]);
}
$i++;
}
//Generate glossary navigation
$nav = '';
foreach($letters as $letter => $rows) {
$num = count($rows);
$cap_letter = strtoupper($letter);
$nav .= <<<NAV
<a href="#$letter" class="letter_link">
$cap_letter
</a>
($num)
NAV;
}
//Add to variables
$vars['nav'] = $nav;
$vars['letters'] = $letters;
}
Run Code Online (Sandbox Code Playgroud)
然后,您必须更改之前复制的模板文件以添加到导航中,并以术语表样式输出行:
<?php if (!empty($title)): ?>
<h3><?php print $title; ?></h3>
<?php endif; ?>
<?php if (!empty($nav)): ?>
<div id="glossary_nav">
<?php print $nav; ?>
</div>
<?php endif; ?>
<?php foreach ($letters as $letter=>$rows): ?>
<a name="<?php print $letter ?>"></a>
<h4 class="letter">
<?php print strtoupper($letter); ?>
</h4>
<?php foreach ($rows as $id=>$row): ?>
<div class="<?php print $classes[$id]; ?>">
<?php print $row; ?>
</div>
<?php endforeach;?>
<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)
您可能需要重新生成主题注册表才能使更改显示在您的网站上。