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;
}
}
なぜ「テストテスト」を出力しないのですか?私のコードの何が問題になっていますか?
テストとビューの出力はまだありません。私のコードの何が問題になっていますか?ありがとうございました
正しい。モジュール内のビューで何かを「実行」するには、hook_views_apiを実装する必要があります。これがなければ、あなたのモジュールはビューによってまったく認識されません(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.を想定しています。これらがあなたの選択した武器ではないかどうか周りに尋ねるのが最善です。
3つのことをテストできます。
dpm()
の代わりにecho()
を使用しますdpm()
で_$view->name
_をテストするYourmodule.views.incファイルをサブディレクトリ内ではなく、モジュールディレクトリに配置する必要があります。そうしないと、ビューが自動的にそれを取得できません。
$query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";
する必要があります
$query->orderby[0]['field'] = "field_name ASC";
yourmodule.views.incのディレクトリを使用している場合は、次のようなコードを使用して、モジュールファイルでそのパスを指定する必要があります。
'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';