Drupal 7无法清除自定义模块中的视图缓存

时间:2014-09-15 13:24:01

标签: drupal-7

我有一个视图,它对我提供的过滤器反应很好。但是当我在我的模块中的for循环中多次运行时,无论我应用哪个过滤器,都会得到相同的响应。

我在网上搜索并找到了关闭视图缓存的代码。我还禁用了来自structure-> views-> settings-> advanced的视图数据缓存。但这不起作用。

以下是示例代码:

foreach ($term_ids as $term_id) {

    $view2 = test_generate_view($view_name, $display_handler, $page, $count, $term_id);

    echo "<pre>";
    print_r($view2);

}

function test_generate_view($view_name, $display_handler, $page, $count, $term_id = null) {

    $view = views_get_view($view_name, TRUE);

    $view->set_display($display_handler);

    if (!empty($term_id)) {
        $term_item                   = $view->get_item($display_handler, 'filter', 'field_ref_issue_target_id');
        $term_item['value']['value'] = $term_id;

        $view->set_item($display_handler, 'filter', 'field_ref_issue_target_id', $term_item);

    }

    $view->init_pager();
    $view->pager['items_per_page']               = $count;
    $view->pager['use_pager']                    = true;
    $view->display_handler->options['use_pager'] = true;
    $view->set_items_per_page($count);
    $view->pager['current_page'] = $page;

    $view->is_cacheable = FALSE;

    $view->pre_execute();
    $view->execute();

    return $view;
}

如果我不循环运行它们并为每个term-id单独尝试它的工作正常。但是如果我在上面的循环中运行它们,那么任何term-id的输出都是相同的。

1 个答案:

答案 0 :(得分:0)

代码看起来并不那么糟糕,因为过滤器发生了变化,即使打开了缓存,缓存也应该会产生不同的结果。因为代码在没有循环的情况下工作,所以你应该研究一下。 $ term_ids真的是一个整数值数组还是一个术语对象数组?如果是这样,函数调用将回退到默认值,对于term_ids为null,并且不会添加过滤器。

顺便说一句:你应该看一下你可以轻松使用的上下文过滤器。

相关问题