0

Sk8erPeterの助けを借りて、Drupal 7 で特定のコンテンツ タイプのノード作成とノード更新で Javascript コードを実行することができました。

私の問題は、このモジュールの js ファイルから関数 FB.api を呼び出せないことです。Javascriptの名前空間と何か関係がありますか? コンソールから FB.api() 関数を実行すると正常に動作します...

助けてくれてありがとう。

ニルス

4

1 に答える 1

0

あなたのコメントに基づいて...私はあなたの を見ているだけで、他のトピックでここtestModule.behaviors.jsに書いた機能とは似ていません。

あなたの現在のコードは次のようなものです:

FB.api(
    '/me/shareatear:share',
    'post',
    { tear: document.URL },
    function(response) {
       if (!response || response.error) {
          alert('Error occured');
       } else {
          alert('done. ' + response.id);
       }
    });

Drupal.behaviorsと、前に示したその機能はどこにありattachますか? 他のすべてのものはどこにありますか?:)
現在のコードがエラーを出力することは驚くべきことではありません。なぜなら、この JavaScript ファイルはオブジェクトを定義する前にFBインクルードされていると思うからです。この方法では、このコードをヘッダーで直接呼び出します。

ファイルは次のようになると思いますtestModule.behaviors.js(前のコードに基づいて):

(function ($) {
    Drupal.behaviors.testModule = {
        doitnow: function () {
            alert("A new \"tear\" content has just been added!");

            // change this code to the appropriate one
            FB.api('/me/shareatear:share', 'post', {
                tear: document.URL
            }, function (response) {
                if (!response || response.error) {
                    alert('Error occured');
                } else {
                    alert('done. ' + response.id);
                }
            });

        },

        attach: function (context, settings) {
            try {
                if (settings.testModule.tear_just_added) {
                    this.doitnow();
                }
            } catch (ex) {}
        }
    };
})(jQuery);

そのため、現在のコンテンツ ( Drupal 固有の動作「ラッパー」 FB.apiなしで呼び出している場合) を置き換え、そのコンテンツをこれに変更します。


編集:

OK、このモジュールの重みを次のように 1 回だけ高く設定してみてくださいdb_query()。そうすれば、そのフックは他のモジュールのフックよりも遅く呼び出されます。これらの行をコードに追加したら、ファイルを保存し、Drupal キャッシュを削除してから、適切な行をコメント アウトします。すべてのページが読み込まれるたびに、常に実行する必要はありません!

/**
 * Implements hook_init()
 * @see http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_init/7
 */
function testModule_init() {
    // after putting this in your file, save it, delete cache, then COMMENT OUT THE FOLLOWING LINE!!! It should only RUN ONCE (it's enough).
    db_query("UPDATE {system} SET weight = 111 WHERE type = 'module' AND name = 'testModule'");
}
于 2012-06-02T21:19:55.883 に答える