it-swarm-id.com

Bagaimana cara menggunakan hook_views_query_alter ()?

Mengikuti apa yang dilaporkan dalam dokumentasi untuk hook_views_query_alter () , saya membuat file bernama alterform.views.inc dan memasukkannya ke dalam modul yang diaktifkan yang disebut alterform. Saya menambahkan kode berikut dalam alterform.views.inc tetapi tidak berhasil.

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;
  }
}

mengapa itu tidak menghasilkan "tes tes"? Apa yang salah dengan kode saya?

masih belum ada hasil tes dan tampilan. apa yang salah dengan kode saya? Terima kasih

20
enjoylife

Baik. Untuk "melakukan" apa pun dengan tampilan dalam modul, Anda harus mengimplementasikan hook_views_api. Tanpa ini, modul Anda tidak akan dikenali oleh Views, at all, ever (AFAIK).

Silakan tambahkan yang berikut ini ke kode modul Anda:

/**
 * 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'),
  );
}

Ini harus memperbaikinya sehingga modul Anda setidaknya dikenali, maka Anda dapat mulai men-debug-nya :)

Cara yang baik untuk mulai men-debug tampilan (mis. Langkah kecil) adalah dengan meletakkan dpm($view); tepat di awal fungsi tampilan yang Anda laksanakan. Dalam kebanyakan kasus, itu akan membuang info ke layar yang akan membantu Anda melihat di mana Anda berada. Sarankan melakukan ini dengan devel.module diinstal/dihidupkan.

Sunting: Ini mengasumsikan Tampilan 2 dan Drupal 6. Anda sebaiknya bertanya-tanya apakah itu bukan senjata pilihan Anda.

22
NikLP

anda dapat menguji 3 hal:

  • kosongkan cache Anda
  • unduh dan aktifkan Devel ,
  • gunakan dpm() alih-alih echo()
  • test $view->name dengan dpm()
4
Manu

Anda perlu meletakkan file yourmodule.views.inc di direktori modul, bukan di dalam subdirektori, atau Views tidak dapat mengambilnya secara otomatis.

3
shaneonabike
    $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";

seharusnya

    $query->orderby[0]['field'] = "field_name ASC";
2
tan

jika Anda menggunakan direktori untukmodule.views.inc, Anda perlu menyebutkan path-nya di file module, menggunakan kode yang mirip dengan yang berikut:

    'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';
1
tan