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


20

Hook_views_query_alter () ile ilgili belgelerde bildirilenlerin ardından , adlı bir dosya oluşturdum alterform.views.incve adlı etkin bir modüle koydum alterform. Aşağıdaki kodu ekledim 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


Hiç kullanmadınız, ancak alterform.views.incmodülünüzün içini eklemeniz / zorunlu tutmanız ve bunu yapmadığınız mümkün mü?
nonsenz

alterform.views.inc'i alterform modül dosyama koydum
enjoylife

modülünüzün içindeki alterform.views.inc dosyasını nasıl dahil edersiniz / gerektirir? teşekkür ederim
enjoylife

Yanıtlar:


22

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 (örn. Bebek adımı), dpm($view);uyguladığınız görünümler işlevinin hemen başına 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, Views 2 ve Drupal 6'yı varsayar. En iyisi, bu silahların seçtiğiniz silahlar olup olmadığını sormaktır.


Bu işe yarıyor :)
kalidasan

4

3 şeyi test edebilirsiniz:

  • önbelleğini temizle
  • Devel'i indirip etkinleştirin ,
  • dpm()yerine kullanecho()
  • Test $view->nameiledpm()

önbelleği temizledim ve echo $ view-> name. ancak görünümler bloğunda görünüm adı hakkında hala herhangi bir çıktı yoktur.
enjoylife

tuhaf. Ben her zamanki yankı güvenmiyorum ... Bu arada kodunuzda küçük bir hata fark ettim, bir "}" olması gerekir ... bir yapıştırma hatası?
Manu

ama i print_r ($ views) görünüm bloğunda baştankara ile ilgili herhangi bir çıktı yok.
enjoylife

print_r ($ views) evet print_r ($ view) dışında bir şey basmamalıdır. Bunu geçişten önce mi koydun?
Manu

3

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


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

olmalı

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

1

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/';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.