it-swarm-eu.dev

Jak mohu použít hook_views_query_alter ()?

Podle toho, co bylo uvedeno v dokumentaci pro hook_views_query_alter () , vytvořil jsem soubor s názvem alterform.views.inc a vložte jej do aktivovaného modulu s názvem alterform. Následující kód jsem přidal do alterform.views.inc. ale nefunguje to.

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

proč nevystupuje „testovací test“? Co se stalo s mým kódem?

stále neexistuje žádný výstup testů a pohledů. co se děje s mým kódem? Děkuju

20
enjoylife

Že jo. Aby bylo možné dělat cokoli s pohledy v modulu, musíte implementovat hook_views_api. Bez tohoto nebude váš modul vůbec rozpoznán (AFAIK).

Přidejte do kódu modulu následující text:

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

To by mělo opravit, aby váš modul byl alespoň rozpoznán, pak můžete začít ladit :)

Dobrým způsobem, jak začít ladit pohled (tj. Krok dítěte), je umístit dpm($view); přímo na začátek implementované funkce zobrazení. Ve většině případů to vypíše informace na obrazovku, která vám pomůže zjistit, kde jste. Doporučuje se to provést s nainstalovaným/zapnutým programem devel.module.

Upravit: Toto předpokládá Zobrazení 2 a Drupal 6. 6. Nejlépe byste se zeptali, jestli to nejsou vaše zbraně výběru.

22
NikLP

můžete vyzkoušet 3 věci:

  • vymažte mezipaměť
  • stáhnout a povolit Devel ,
  • použijte dpm() místo echo()
  • test $view->name s dpm()
4
Manu

Musíte soubor yourmodule.views.inc vložit do adresáře modulů, nikoli do podadresáře, nebo jej nelze automaticky zobrazit.

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

mělo by

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

pokud používáte adresář pro yourmodule.views.inc, musíte uvést jeho cestu v souboru modulu pomocí kódu podobného následujícímu:

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