我希望这不是我一直在寻找的一个愚蠢的问题!
我有一个内容类型(文档),它只包含标题,文件和类别。类别值是必需的,并且由Taxonomy“提供”。
我现在希望创建一个视图,该视图将显示按分类术语分组和标题的这些文档。
使用我有限的Drupal知识,我打算迭代相关的术语ID(使用taxonomy_get_tree($vid)
),然后相应地渲染每个视图。
要做到这一点,我一直希望使用这个片段。
view = views_get_view('documents');
$view->set_display($display_id);
$filter = $view->get_item($display_id, 'filter', 'field_dl_category');
$filter['value']['value'] = $filter_value;
$view->set_item($display_id, 'filter', 'field_dl_category', $filter);
$viewsoutput = $view->render();
但这不起作用;当我查询$filter
($view->get_item($display_id, 'filter', 'field_dl_category'))
的值时,我会返回null。
这可能是我的过滤器名称与CCK字段名称不同吗?
我正在使用Drupal 7.
任何帮助都非常感激,我的想法(和时间)已经不多了。
答案 0 :(得分:0)
我终于设法让这个工作,但我采取了一个稍微不同的方法。
我更改了视图并添加了相关的上下文过滤器,然后使用此函数views_embed_view来获取我所需的结果。
如果这有帮助!这是我的解决方案:
$display_id = 'default';
$vid = 7;
$terms = taxonomy_get_tree($vid);
foreach($terms As $term){
$content = views_embed_view('documents', $display_id, $term->tid);
//now we see if any content has been provided
if(trim($content) != ''){
print "<h3>" . $term->name . "</h3>";
print $content;
}
}
在我的情况下,修剪($ content)在没有数据的情况下返回'',因为视图模板已被编辑,所有情况可能并非如此。
我是一个非常新的Drupal开发人员,所以我确信有更好的方法可以做到这一点,如果是这样,请发帖。
答案 1 :(得分:0)
我将继续并假设您希望使用“视图”显示按其标记的类别分组的文档节点列表。
在视图3中有两种(可能更多)方法可以做到这一点:
(a)选择允许您选择分组字段的显示样式。 (您可以尝试默认情况下附带View的表格样式)。假设您已通过“视图”关系将node
表与taxonomy_term_data
表正确关联,您可以选择taxonomy_term_data.name
作为分组字段。
请注意,此分组是在呈现视图之前完成的。因此,您的查询只需选择(内容,标记)对的平面列表。
(b)您还可以使用附件显示类型来实现类似的功能。在列表视图中首先显示使用过的类别,单击该列表将显示一个页面(附件),其中包含所选类别中标记的所有文档。
要了解如何执行(a)或(b),请先启用advanced_help
模块(不是视图必备但建议使用)。
对于(a),请阅读样式分组部分,即views/help/style-grouping.html
和
对于(b),请阅读附件显示部分,即views/help/display-attachment.html
关于你的方法的一些事情:
(a)它将显示该词汇表中的所有术语,无论它们是否用于标记至少一个文档。
(b)即使当前查看的用户无权访问该视图,views_embed_view()
也将返回NULL。所以,确保你抓住那个案子。
答案 2 :(得分:0)
这是另一种选择:
$view = views_get_view('view_machine_name');
$view->init_display('default');
$view->display_handler->display->display_options['filters']['your_filter_name']['default_value'] = 'your_value';
$view->is_cacheable = FALSE;
$view->execute();
print $view->render();
我知道你可以用一些复杂的方法设置它,显然会更好。但是如果你只是想要一个快速而又脏的直接访问而不会搞乱,那么就会让你在那里。