Drupal 7 및 Views 3을 사용할 때 뷰 필터 값을 변경하여 렌더링하려는 컨텐츠에 영향을주는 올바른 방법은 무엇입니까?
D6에 대해 여기 에 언급 된 모든 것을 시도했습니다 .
Merlin은 display_options를 수정하는 것이 이것을 달성하는 잘못된 방법이라고 말하지만 일부 사람들은 작동하도록 조치를 취했지만 조치에 대한 애매 모호합니다 ( http://drupal.org/node/789710#comment- 2927556 ).
나는 시도했다 :
function pages_views_pre_view($view){
$view = views_get_view('north_carolina');
$view->set_display('default');
$view->display_handler->options['filters']['province']['value'] = 'Georgia';
dsm($view->display_handler->options['filters']['province']);
}
노트:
1) north_carolina
페이지와 블록 (page_1과 block_1)의 두 가지 유형의 디스플레이 가있는 뷰가 생성되었습니다 .
2) 내 필터는 내 디스플레이에서 동일하므로 '기본'디스플레이를 변경하여 모든 필터에 영향을 미치려고합니다.
3) 필터의 기본값은 'North Carolina'(View UI에서 설정)이지만 'Georgia'로 변경하려고합니다.
4) 직후 DSM을 실행하면 필터가 변경되었음을 알 수 있지만 결과에는 여전히 '노쓰 캐롤라이나'결과가 표시됩니다. 캐싱이 꺼져 있고 drush cc all을 실행 한 후에도 여전히 동일한 내용을 얻습니다.
또한 hook_views_pre_build
and를 통해 동일한 코드를 실행하려고했습니다 hook_views_pre_execute
.
어떤 제안?
편집하다:
제안한대로 추가 정보를 얻는 것이 도움이 될 수 있습니다. 다음은 뷰 덤프입니다.
$view = new view();
$view->name = 'north_carolina';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'North Carolina';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'test nc block';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
/* Sort criterion: Content: Post date */
$handler->display->display_options['sorts']['created']['id'] = 'created';
$handler->display->display_options['sorts']['created']['table'] = 'node';
$handler->display->display_options['sorts']['created']['field'] = 'created';
$handler->display->display_options['sorts']['created']['order'] = 'DESC';
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter criterion: Location: Province */
$handler->display->display_options['filters']['province']['id'] = 'province';
$handler->display->display_options['filters']['province']['table'] = 'location';
$handler->display->display_options['filters']['province']['field'] = 'province';
$handler->display->display_options['filters']['province']['value'] = 'North Carolina';
$handler->display->display_options['filters']['province']['exposed'] = TRUE;
$handler->display->display_options['filters']['province']['expose']['operator_id'] = 'province_op';
$handler->display->display_options['filters']['province']['expose']['label'] = 'State';
$handler->display->display_options['filters']['province']['expose']['operator'] = 'province_op';
$handler->display->display_options['filters']['province']['expose']['identifier'] = 'province';
$handler->display->display_options['filters']['province']['expose']['remember_roles'] = array(
2 => '2',
1 => 0,
3 => 0,
4 => 0,
);
/* Display: Block */
$handler = $view->new_display('block', 'Block', 'block_1');
$handler->display->display_options['block_description'] = 'test nc block';
이러한 핸들러는 위치 모듈에서 제공합니다. 특히 "위치 : 주"필터의 경우 자동 완성 양식이 제공됩니다. 노스 캐롤라이나에 입력하면 팝업이 표시되므로 선택해야합니다. 그러나 SQL 문에서 뷰가 생성하면 상태에 대해 두 문자 약어가 사용됩니다.
SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created
FROM
{node} node
LEFT JOIN {location_instance} location_instance ON node.vid = location_instance.vid
LEFT JOIN {location} location ON location_instance.lid = location.lid
WHERE (( (node.status = '1') AND (location.province = 'NC') ))
ORDER BY node_created DESC
LIMIT 10 OFFSET 0