web-gelistirme-sc.com

Hook_views_query_alter () nasıl kullanılır?

hook_views_query_alter () için belgelerde bildirilenlerin ardından, alterform.views.inc ve alterform adlı etkin bir modüle yerleştirin. Aşağıdaki kodu alterform.views.inc. ama çalışmıyor.

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

neden "test testi" vermiyor? Kodumdaki sorun ne?

test ve görünüm çıktısı hala yoktur. kodumda sorun ne? teşekkür ederim

20
enjoylife

Sağ. Bir modülde görünümleri olan herhangi bir şeyi "yapmak" için hook_views_api'yi uygulamanız gerekir. Bu olmadan, modülünüz Views tarafından hiç tanınmayacaktır (AFAIK).

Lütfen modül kodunuza aşağıdakileri ekleyin:

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

Bu, modülünüzün en azından tanınması için düzeltilmelidir, daha sonra hata ayıklamaya başlayabilirsiniz :)

Bir görünümde hata ayıklamaya başlamanın iyi bir yolu (yani bir bebek adımı), uyguladığınız görünümler işlevinin başına dpm($view); koymaktır. Çoğu durumda, bu bilgileri bulunduğunuz yeri görmenize yardımcı olacak ekrana dökecektir. Devel.module yüklü/açıkken bunu yapmanızı öneririm.

Düzenleme: Bu Görünüm 2 ve Drupal 6 varsayar. En iyi seçim silahları olup olmadığını sormak istiyorsunuz.

22
NikLP

3 şeyi test edebilirsiniz:

  • önbelleğini temizle
  • indir ve etkinleştir Devel ,
  • dpm() yerine echo() kullanın
  • dpm() ile $view->name test et
4
Manu

Yourmodule.views.inc dosyasını bir alt dizine değil, modül dizinine koymanız gerekir, ya da Views otomatik olarak almaz.

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

olmalı

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

modül.views.inc için bir dizin kullanıyorsanız, aşağıdakine benzer bir kod kullanarak modül dosyasındaki yolunu belirtmeniz gerekir:

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