2014-09-15 2 views
0

У меня есть представление, и оно отлично подходит для фильтров, которые я даю. Однако, когда я запускаю это несколько раз в цикле for в моем модуле, я получаю тот же ответ на любой фильтр, который я применяю.Drupal 7 Невозможно очистить кеш представления в настраиваемом модуле

Я искал в Интернете и нашел код для отключения кэширования. Я также отключил кэширование данных просмотров из структуры-> 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.

ответ

0

Код выглядит не так плохо, и поскольку фильтр изменяется, кеширование должно давать другой результат, даже если он включен. Поскольку код работает без цикла, возможно, вы должны изучить это. $ term_ids действительно представляет собой массив целочисленных значений или массив терминных объектов? Если это так, вызов функции вернется к умолчанию, который является null для term_ids и не будет добавлять фильтр.

Кстати: Вы должны взглянуть на контекстные фильтры, которые вы можете использовать очень легко.