Sk8erPeterの助けを借りて、Drupal 7 で特定のコンテンツ タイプのノード作成とノード更新で Javascript コードを実行することができました。
私の問題は、このモジュールの js ファイルから関数 FB.api を呼び出せないことです。Javascriptの名前空間と何か関係がありますか? コンソールから FB.api() 関数を実行すると正常に動作します...
助けてくれてありがとう。
ニルス
Sk8erPeterの助けを借りて、Drupal 7 で特定のコンテンツ タイプのノード作成とノード更新で Javascript コードを実行することができました。
私の問題は、このモジュールの js ファイルから関数 FB.api を呼び出せないことです。Javascriptの名前空間と何か関係がありますか? コンソールから FB.api() 関数を実行すると正常に動作します...
助けてくれてありがとう。
ニルス
あなたのコメントに基づいて...私はあなたの を見ているだけで、他のトピックでここ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'");
}