วิธีใช้ hook_views_query_alter () เพื่อแก้ไขเงื่อนไขที่ไหน


12

ฉันพยายามแก้ไขเงื่อนไขการสืบค้นของมุมมอง จนถึงตอนนี้ผมก็ประสบความสำเร็จกับการเปลี่ยนแปลง"สั่งซื้อโดย"แต่ฉันมีความคิดวิธีการแก้ไขที่สภาพ ฉันต้องการตรวจสอบ search_term และหากเป็นตัวพิมพ์ใหญ่ให้เปลี่ยนเป็นตัวพิมพ์เล็กเพื่อให้สามารถค้นหาได้ นอกจากนี้ยังมีอักขระพิเศษบางอย่างในภาษาของฉัน (เปอร์เซีย) ที่ฉันต้องแทนที่ก่อนที่แบบสอบถามจะทำงาน ทุกคนสามารถช่วยฉันได้ว่าจะเริ่มจากที่ใดหรือใช้ hooks หรือ views_handlers ในการใช้งานที่ไหน?

<?php
/**
 * Implementation of hook_views_query_alter
 * @param type $view
 * @param type $query
 */
function nashreneydev_views_query_alter(&$view, &$query) {
  //krumo($query);
  //krumo($view);
  if ($view->name == 'custom_search') {
    $search_term = $view->exposed_raw_input['combine'];

    **//$query->where[0]['conditions'][0]['field']= "?????";**
    $view->query->orderby[1]['field'] = "CASE node_type WHEN 'product_display' THEN 1 ELSE 2 END";
    $view->query->orderby[1]['direction'] = "ASC";
    $view->query->orderby[0]['field'] = "CASE node_title WHEN '".$search_term."' THEN 1 ELSE 2 END";
    $view->query->orderby[0]['direction'] = "ASC";
    //krumo($view->query->orderby);
  }
}
?>

ผลลัพธ์ devel สำหรับที่ซึ่งเงื่อนไขเป็นดังนี้ในขณะนี้ : views_combine เท่ากับ% s%

CONCAT_WS ('', node.title, '', field_data_body.body_value, '', field_data_field_tags_field.taget_field.taget_field_tags_tagle_tagle_tags_field_txt_tagle_test_files_conferencing_target_id_tagler_target_target_id_target_target_id_tagle_converter_conformat_conformat_con_txt) CONCAT_WS ('', node.title, '', field_data_body.body_value, '', field_data_field_tags_tag_tags_field.tags_field.taget_tag_tags_field_tagler_field_tags_tagler_tagle_test_files/converter_target_id_tags


ไม่จำเป็น (ไม่สนับสนุน) เขียนพารามิเตอร์ของ hook ในความคิดเห็น "@param ... " พารามิเตอร์เหล่านี้มักจะเหมือนกันและมีการบันทึกไว้อย่างดีสำหรับทุก hook
wranvaud

ถูกต้องดีที่สุดที่จะใช้@inheritdoc
ajmedway

คำตอบ:


9

คุณสามารถเข้าถึงเนื้อหาของเงื่อนไขที่แก้ไขค่าของมัน

$query->where[0]['conditions'][0]['value'] = 'something...';

คล้ายกับสิ่งที่คุณทำกับออเดอร์บาย นอกจากนี้คุณสามารถเพิ่มที่กำหนดเองที่มีสภาพ ( https://api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/function/views_plugin_query_default%3A%3Aadd_where/7และhttps://api.drupal.org/api/ มุมมอง / ปลั๊กอิน% 21views_plugin_query_default.inc / ฟังก์ชั่น / views_plugin_query_default% 3A% 3Aadd_where_expression / 7 )


tanx มากนั่นคือสิ่งที่ฉันกำลังมองหา
nooshinha


2
function mymodule_views_query_alter(&$view, &$query) {
  // Term id's to unset from result set.
  $tids = array(346,355,359);
  if ($view->name == 'yourviewname') {

    $query->add_where(1,'taxonomy_term_data_node.tid', $tids, 'NOT IN');
    $query->orderby[0]['field'] = "CASE WHEN taxonomy_term_data_taxonomy_term_hierarchy.weight IS NULL THEN taxonomy_term_data_node.weight ELSE taxonomy_term_data_taxonomy_term_hierarchy.weight END";
    $query->orderby[0]['direction'] = "ASC";
    $query->orderby[1]['field'] = "taxonomy_term_data_node.weight";
    $query->orderby[1]['direction'] = "ASC";
  }
}

0

ลองนี้

 $location_value = strtolower($string);
 $query->where[1]['conditions'][0] = array('field'=>"node.title","value"=>'%'.$location_value.'%',"operator"=>"LIKE");

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