Drupal 7 ve Views 3'ü kullanırken, Görünümler filtre değerini değiştirmenin, görüntülenmek üzere olan içeriği etkilemesi için doğru yolu nedir?
Burada D6 için bahsedilen her şeyi denedim .
Birkaç kişi işe koysa da Merlin, display_options'ı değiştirmenin bunu başarmanın yanlış yolu olduğunu belirtiyor, ancak ne yapacağına cevabında belirsiz ( http://drupal.org/node/789710#comment- 2927556 ).
Denedim:
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']);
}
Notlar:
1) north_carolina
Bir sayfa ve bir blok (sayfa_1 ve blok_1) olmak üzere iki tür ekrana sahip bir görünüm oluşturdum .
2) Filtrelerim ekranlarımda aynı olduğundan, 'varsayılan' ekranı değiştirmeye çalışıyorum, böylece hepsini etkiler.
3) Filtremin varsayılan değeri 'Views (Kullanıcı Arayüzünde ayarladığım)' North Carolina ', ancak' Georgia 'olarak değiştirmeye çalıştığımı fark ettim
4) DSM'yi hemen sonra çalıştırırsam filtrenin değiştiğini görüyorum, ancak sonuçlarım hala 'Kuzey Carolina' sonuçlarını gösteriyor. Önbelleğe alma kapalı ve drush cc hepsini çalıştırdıktan sonra hala aynı şeyi alıyorum.
Ayrıca hook_views_pre_build
ve aracılığıyla aynı kodu çalıştırmayı denedim hook_views_pre_execute
.
Herhangi bir öneri?
DÜZENLE:
Önerildiği gibi ek bilgiye sahip olmak yardımcı olabilir. İşte görüşün bir dökümü:
$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';
Bu işleyicilerin konum modülü tarafından sağlandığını unutmayın. Özellikle "Konum: İl" filtresi için otomatik doldurma formu verildi. Kuzey Carolina'ya yazdığımda ortaya çıkıyor ve bunu seçmek zorundayım. Ancak, SQL deyiminde, görünümlerin durum için iki karakter kısaltması kullandığını oluşturduğuna dikkat edin:
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