Görünümlerde programlı olarak açık filtreler nasıl değiştirilir


10

Açık filtrelerle bir sayfa görünümü var. Filtrelerden biri terim kelime, ve bu açılan liste, kullanıcı sadece bir kategori (terim) seçebilir.

Belirli bir URL'den geldiğimde, açılır listeden programlı olarak bir terim ayarlamak istiyorum. views_query_alterNerede $categoryolduğunu denedim tid.

 $set_exposed_input  = array();
 $set_exposed_input['field_category_tid'] = $category;

 if ($set_exposed_input) {
    $view->set_exposed_input($set_exposed_input);
 }


Yanıtlar:


14

Drupal 7 için şunları kullanabilirsiniz:

$view->exposed_input[$key] = $value;

Bu

$view->exposed_input['title'] = 'My title is a cat';

Tam bir örnek için şunu deneyebilirsiniz:

$name = 'name_of_view';
$display = 'page_1';
$alter = array('exposed' =>array('title' => 'title_value'));

$view = views_get_view($name);
$view->init_display($display);
$view->preview=TRUE;
$view->is_cacheable = FALSE;


if(isset($alter['exposed'])){
  foreach($alter['exposed'] as $key => $valor){

     $view->exposed_input[$key] = $valor;

  }
}

$view->pre_execute();
$output = $view->display_handler->preview();
$view->post_execute();

print_r($view->result);

Başka bir yol da görünümler set_option işlevini kullanmaktır

$filters = $view->display_handler->get_option('filters');

foreach($alter['exposed'] as $key => $valor){
   $filters[$key]['value'] = $valor;
   $view->display_handler->set_option('filters', $filters);
}

1
bunu nereye yerleştirirsiniz, ön görünüm veya benzeri bir görünümde?
Mika A.17

Görünümlerde tpl! Ve tam örnek, her yerde, bir yük görüntüleme işlevi var
rafinskipg

1
Bunu hook_views_pre_view'a da ekleyebilirsiniz
Quentin Campbell

5
Tpl dosyası iş mantığını ayarlamak için değil, işlenen içeriği görüntülemek için kullanılmalıdır. Lütfen diğer sayısız görünüm kancalarından birini deneyin: api.drupal.org/api/views/views.api.php/7
aaronbauman

Açıkta olmayan filtre ne olacak? Çok nadir kullanım durumum var ve özel kod ile filtre değerini ayarlamam gerekiyor.
Codyum

1

Görünen filtre değerini şu şekilde ayarlayın:

$view->exposed_input['field_category_tid'] = $category;

1

maruz kalan filtreyi programlı olarak işlemek istediğinizde Drupal 7.54 ile, çok değerli bir alanınız olduğunda bunu böyle yaparsınız. Maruz kalan filtreyi nasıl geçireceğinizi görmenin çözümü URL'nin nasıl yapıldığını takip etmektir.

Burada: view_name? Alias ​​[1] = 1

$view = views_get_view('view_name');
$view->init_display('display_id');

$filters = array('alias' => array('1'));
$view->set_exposed_input($filters);

$view->execute();

Bunu istediğiniz yerden yürütebilirsiniz. Tercihen modül dosyasından.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.