Drupal的 - 视图。编程设置过滤器

问题描述 投票:2回答:3

我希望这不是一个愚蠢的问题,我一直在寻找了大半天!

我有一个内容类型(文件),它只是包含一个标题,文件和类别。类别值是必需的,并且由分类“供电”。

我现在想创建它将显示这些文件由分类项分组,题为视图。

用我有限的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'))我得到空返回。

也许这是我的筛选器名称是不一样的CCK字段名?

我使用的Drupal 7。

任何帮助非常感谢,我运行的想法(和时间)。

drupal drupal-views
3个回答
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;        
    }
}

在我与作为视图模板已被编辑没有数据的情况下修剪($内容)返回“”,这可能不适用于所有的情况。

我是一个很新的Drupal开发人员,所以我敢肯定有这样做,如果是的话请不要交的更好的方法。


0
投票

我要继续前进,假设你想显示,使用意见,由他们已经标注了类别分组的文档节点的列表。

有(的也许更多)两种方式,通过它可以在3次做到这一点:

(一)选择的显示风格,让您选择一个分组字段。 (你可以尝试表格的样式附带的默认查看)。假设你已经正确地通过浏览关系关联的node表到taxonomy_term_data表,您可以选择taxonomy_term_data.name作为分组字段。

注意视图只是呈现在此之前的分组已经完成。所以,你的查询将只需要选择(含量,标签)对一个平坦的列表。

(b)您也可以利用附件显示类型来实现类似的东西。首场演出中使用的类别列表视图上点击它会显示一个页面(附件)与标签在所选类别的所有文件。

要了解如何做(一)或(b),打开advanced_help模块(这不是一个必要的意见,但建议)第一。

对于(a)中,读出的部分上在样式分组即views/help/style-grouping.html和 对于(b)中,读取附件显示即views/help/display-attachment.html上部分

一对夫妇的有关做法事:

(一)会否无论显示从词汇的所有条款无论它们是否被用于标记至少一个文档。

(二)views_embed_view()将返回NULL即使当前正在查看用户没有访问该视图。因此,确保能赶上那这种情况下。


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();

我知道你大概可以设置此使用一些令人费解的方法,显然会更好。但是,如果你只想要一个快速和肮脏的直接访问,而解决此搞乱将让你有。

© www.soinside.com 2019 - 2024. All rights reserved.