ฉันจะใช้ hook_views_query_alter () ได้อย่างไร


20

ต่อไปนี้สิ่งที่รายงานในเอกสารสำหรับhook_views_query_alter ()ผมสร้างไฟล์ชื่อและใส่ลงในโมดูลที่เปิดใช้งานที่เรียกว่าalterform.views.inc alterformฉันเพิ่มรหัสต่อไปนี้ใน. alterform.views.incแต่มันไม่ทำงาน

function alterform_views_query_alter(&$view, &$query) {
  switch($view->name) {
    case 'myViewName':  
      echo 'test test'; // test       
      $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";
      $query->orderby[1] = "node_title ASC";
      break;
  }
}

เหตุใดจึงไม่ส่งออก "ทดสอบทดสอบ" เกิดอะไรขึ้นกับรหัสของฉัน

ยังไม่มีผลลัพธ์ของการทดสอบและมุมมอง เกิดอะไรขึ้นกับรหัสของฉัน ขอขอบคุณ


ไม่เคยใช้ แต่เป็นไปได้หรือไม่ที่คุณจะต้องรวม / จำเป็นต้องใช้ alterform.views.incโมดูลภายในและคุณไม่ได้ทำ?
nonsenz

ฉันได้ใส่ alterform.views.inc ในไฟล์โมดูล alterform ของฉัน
EnjoyLife

วิธีรวม t / ต้องการ alterform.views.inc ภายในโมดูลของคุณ? ขอบคุณ
Enjoylife

คำตอบ:


22

ขวา. ในการ "ทำ" สิ่งใดก็ตามที่มีมุมมองในโมดูลคุณจะต้องนำ hook_views_api มาใช้ หากไม่มีสิ่งนี้โมดูลของคุณจะไม่ได้รับการยอมรับจาก Views ทุกคนตลอดไป (AFAIK)

โปรดเพิ่มสิ่งต่อไปนี้ในรหัสโมดูลของคุณ:

/**
 * Implementation of hook_views_api().
 */
function alterform_views_api() { // your module name into hook_views_api
  return array(
    'api' => 2,
    // might not need the line below, but in any case, the last arg is the name of your module
    'path' => drupal_get_path('module', 'alterform'),
  );
}

สิ่งนี้ควรแก้ไขเพื่อให้โมดูลของคุณได้รับการยอมรับอย่างน้อยจากนั้นคุณสามารถเริ่มแก้ไขข้อบกพร่องได้ :)

วิธีที่ดีในการเริ่มการดีบั๊กมุมมอง (เช่นขั้นตอนเด็ก) คือการใส่dpm($view);ฟังก์ชั่นของมุมมองที่คุณใช้งาน ในกรณีส่วนใหญ่ที่จะถ่ายโอนข้อมูลไปยังหน้าจอที่จะช่วยให้คุณเห็นว่าคุณอยู่ที่ไหน อยากจะแนะนำให้ทำเช่นนี้กับ devel.module ติดตั้ง / เปิด

แก้ไข: นี่ถือว่าเข้าชม 2 และ Drupal 6. คุณควรถามว่าสิ่งเหล่านั้นไม่ใช่อาวุธที่คุณเลือก


ใช้งานได้ดี :)
kalidasan

4

คุณสามารถทดสอบ 3 สิ่ง:

  • ล้างแคชของคุณ
  • ดาวน์โหลดและเปิดใช้งานDevel ,
  • ใช้dpm()แทนecho()
  • ทดสอบ$view->nameกับdpm()

ฉันล้างแคชแล้วและ echo $ view-> name แต่ยังไม่มีผลลัพธ์เกี่ยวกับชื่อมุมมองในบล็อกมุมมอง
Enjoylife

แปลก. ฉันปกติไม่ต้องพึ่งพาเสียงก้อง ... โดยวิธีที่ฉันสังเกตเห็นข้อผิดพลาดเล็กน้อยในรหัสของคุณมี "}" ที่ไม่ควรเป็น ... ข้อผิดพลาดการวางหรือไม่
มนู

แต่เมื่อฉัน print_r ($ views) ยังไม่มีผลลัพธ์ใด ๆ เกี่ยวกับ tit ในบล็อกมุมมอง
Enjoylife

print_r ($ views) ไม่ควรพิมพ์อะไรนอกจาก print_r ($ view) ใช่ คุณใส่สิ่งนี้ก่อนเปลี่ยนหรือไม่?
มนู

3

คุณต้องวางไฟล์ yourmodule.views.inc ในไดเร็กทอรีโมดูลไม่ใช่ภายในไดเร็กทอรีย่อยมิฉะนั้น Views จะไม่สามารถรับได้โดยอัตโนมัติ



1

หากคุณกำลังใช้ไดเรกทอรีสำหรับโมดูลของคุณวิวเวอร์คุณต้องพูดถึงพา ธ ของมันในไฟล์โมดูลโดยใช้โค้ดที่คล้ายกับโค้ดต่อไปนี้:

    'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.