サイトのテーマでprivatemsg_list_view()フォームを少し作業して公開しましたが、うまく表示されています。ただし、メッセージステータスを更新したり、一括メッセージを削除しようとすると、悲しいエラーが発生します。
An AJAX HTTP error occurred.
HTTP Result Code: 200
Debugging information follows.
Path: /system/ajax
StatusText: OK
ResponseText: Fatal error: Call to undefined function privatemsg_list_submit() in [...]/includes/form.inc on line 1464
これで、privatemsg_list_submit()が実際にフォーム#submitハンドラーとして設定され、modules/privatemsg/privatemsg.pages.inc
に存在することがわかりました。明らかに、/ system/ajaxと私のテンプレートの間には互いに素があります。
これを機能させるには何が必要ですか?どういうわけか、.incファイルをフォームハンドラーに添付する必要がありますか? module_load_include()で遊んでみましたが無駄です。
提案?
Update:module_load_include()
関数を追加しようとした唯一の場所は、/ include /form.incの関数呼び出しの直前です。 1464行目の直前にありました。明らかに、これはトラブルシューティングを目的とした単なるハックでした... module_load_include()
関数を別の場所に配置する必要がありますか?
参考: 未定義の関数privatemsg_list_submit()の呼び出し
更新2:カスタムmodule_init()関数とテーマmodule_load_include()
にhook_form_alter()
を挿入してみました-運がない。
アップデート3:ファイルをmodule_init()
フック内に手動で含めると機能します。外観は次のとおりです。
function MYMODULE_init(){
if($_GET['q'] == 'system/ajax'){
if ( preg_match('/privatemsg_list/', $_POST['form_id'])) {
include('/great/big/system/path/web/sites/all/modules/privatemsg/privatemsg.pages.inc');
}
}
}
これは表面的には機能しているように見えますが、正しい方法ではないと確信しています。このファイルを含めるために使用するより良い関数フックはありますか?
これは不適切な回避策だと思いますが、解決策は、カスタムモジュールのhook_init()関数をフックし、システム/ ajaxパスを監視し、必要に応じてファイルを含めることでした。
_function MYMODULE_init(){
if($_GET['q'] == 'system/ajax'){
if ( preg_match('/privatemsg_list/', $_POST['form_id'])) {
include('/great/big/system/path/web/sites/all/modules/privatemsg/privatemsg.pages.inc');
}
}
}
_
[〜#〜] update [〜#〜]:回答は https://drupal.org/nodeで入手できます。/1961776 !つまり、form_load_include()
の代わりにmodule_load_include()
を使用します。