我有一个视图,它对我提供的过滤器反应很好。但是当我在我的模块中的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的输出都是相同的。
答案 0 :(得分:0)
代码看起来并不那么糟糕,因为过滤器发生了变化,即使打开了缓存,缓存也应该会产生不同的结果。因为代码在没有循环的情况下工作,所以你应该研究一下。 $ term_ids真的是一个整数值数组还是一个术语对象数组?如果是这样,函数调用将回退到默认值,对于term_ids为null,并且不会添加过滤器。
顺便说一句:你应该看一下你可以轻松使用的上下文过滤器。