web-dev-qa-db-ja.com

テーマでPrivatemsg管理フォームを使用します(機能がありません!)

サイトのテーマで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()で遊んでみましたが無駄です。

提案?

Updatemodule_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');
        }
    }
} 

これは表面的には機能しているように見えますが、正しい方法ではないと確信しています。このファイルを含めるために使用するより良い関数フックはありますか?

1
emc

これは不適切な回避策だと思いますが、解決策は、カスタムモジュールの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()を使用します。

0
emc