วิธีการเปลี่ยนตัวกรองที่เปิดเผยโดยทางโปรแกรมในมุมมอง


10

ฉันมีการดูหน้าเว็บพร้อมตัวกรองที่เปิดเผย หนึ่งในตัวกรองคือคำศัพท์และนั่นคือรายการแบบเลื่อนลงผู้ใช้สามารถเลือกได้เพียงหมวดเดียว (คำ)

ฉันต้องการตั้งโปรแกรมหนึ่งคำจากรายการแบบเลื่อนลงเมื่อฉันมาจาก URL ที่ระบุ ฉันพยายามที่มีviews_query_alterที่เป็น$categorytid

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

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

นี่คือลิงค์ที่มีประโยชน์: groups.drupal.org/node/82219#comment-1116663
Andrey Rudenko

คำตอบ:


14

สำหรับ drupal 7 คุณสามารถใช้

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

นี่คือ

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

สำหรับตัวอย่างแบบเต็มคุณสามารถลอง:

$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);

วิธีอื่นใช้ฟังก์ชัน views set_option

$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
คุณวางมันไว้ที่ไหนในมุมมองก่อนสั่งเอ็กซีคิวต์หรืออะไรแบบนั้น?
Mika A.

ในมุมมอง tpl! และตัวอย่างเต็มรูปแบบทุกที่มันมีฟังก์ชั่นโหลดมุมมอง
rafinskipg

1
คุณสามารถเพิ่มลงใน hook_views_pre_view
Quentin Campbell

5
ไฟล์ tpl ควรใช้เพื่อแสดงเนื้อหาที่แสดงผลไม่ให้ตั้งค่าตรรกะทางธุรกิจ โปรดลองหนึ่งในจำนวนการดูอื่น ๆ อีกมากมาย hooks: api.drupal.org/api/views/views.api.php/7
aaronbauman

สิ่งที่เกี่ยวกับตัวกรองที่ไม่เปิดเผย? ฉันมีกรณีการใช้งานที่หายากมากและฉันจำเป็นต้องตั้งค่าตัวกรองด้วยรหัสที่กำหนดเอง
Codium

1

ตั้งค่าตัวกรองที่เปิดเผยดังนี้:

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

1

ด้วย Drupal 7.54 เมื่อคุณต้องการประมวลผลตัวกรองที่เปิดเผยโดยทางโปรแกรมนี่คือวิธีที่คุณทำเมื่อคุณมีฟิลด์ที่มีค่าหลายอัน วิธีแก้ปัญหาเพื่อดูวิธีการผ่านตัวกรองแบบเปิดเผยคือทำตามวิธีที่ URL ถูกสร้างขึ้น

ที่นี่: 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();

คุณสามารถดำเนินการได้จากทุกที่ที่คุณต้องการ โดยเฉพาะอย่างยิ่งจากไฟล์โมดูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.