web-dev-qa-db-ja.com

モジュールの「フック」名は機能していないようです、Drupalはそれを無視します

私は何日もこの場所にいましたが、ようやく問題の一部を見つけたと思うかもしれませんが、それを修正する方法がわかりません。

DrupalサイトでCiviCRMモジュールを実行しています。データベースに保存する前にデータを変更したいフォームがあります。その結果、使用可能なCiviCRMフックのいずれかを起動するのに苦労しています。

私は「civicrm_developer」モジュールをインストールしました。これはDevelを補完するもので、オブジェクトやその他の変数を確認するのに使用されます。モジュールの.moduleファイルを見ると、すべてのCiviCRMフック関数がわかります。これらの関数は、渡された変数に関係なく、dpm()のモジュールで使用されています。例えば...

function civicrm_developer_civicrm_buildForm($formName, &$form){
    drupal_set_message("hook_civicrm_buildForm called: formName is $formName");
    dpm($form);
    dpm($formName);
}

それでおしまい。 CiviCRMで利用可能なすべてのフックについて、インクルードなどはなく、フックと印刷変数のみです。 civicrm_developerモジュールは実際に意図したとおりに機能します。私が作業している特定のページには、CiviCRMフォームがあり、civicrm_developerモジュールは、Drupalで変数をdpm()化するときに期待されるように、そのフォームの上に入力されたKrumoを出力します。

ただし、これらの同じフックの1つまたは2つを使用するカスタムモジュールを作成しようとすると、同じデータにアクセスできないように見えます。私はcivicrm_developerモジュール(1つの.moduleと.infoファイル)をカスタムモジュールにコピーして、フックの命名法を "civicrm_developer"から "mymodule"に変更しました。

したがって、フック名を除いて実質的にcivicrm_developerモジュールの正確なコピーである私のモジュールは、有効にされたときにcivicrm_developerモジュールが行ったように、フォームの上にKrumoを生成しません。はい、モジュールが有効になっていることを確認しました。

たとえば、これは私のカスタムモジュールで記述したものと同じ関数です...

 function mymodule_civicrm_buildForm($formName, &$form){
    drupal_set_message("mymodule_buildForm called: formName is $formName");
    dpm($form);
    dpm($formName);
}

使用中の「mymodule」名はそのモジュールに固有であること、つまり、名前の衝突を引き起こすテーマ名やその他の名前とは一致しないことも言及する価値があるかもしれません...少なくとも私が知っていることです。

同じフックが1つのモジュールで機能するが、他のモジュールでは機能しない理由を理解できません。それだけでは意味がありません。

1
soupmagnet

drupalにはhook_buildFormと呼ばれるフックがありません。実際に実装しようとしているフックは hook_civicrm_buildForm です。そのため、mymodule_civicrm_buildFormを使用する必要があります。常に hook_form_alterを使用できます。 またはより具体的に hook_form_FORM_ID_alter drupalの任意のフォームに変更を加える