6

サイト用の基本的な Joomla モジュールをシャウトボックスとして作成しました。しかし、私はそれにAJAXを入れたいと思っています(AJAXを使用した同様のモジュールがすでにJEDに存在することは知っていますが、これはJoomlaモジュールでAJAXがどのように機能するかを学ぶためのプロジェクトです)。

ファイルが次のように定義されないため、新しいphpファイルにリダイレクトする通常のAJAXのものは明らかに機能しません

   defined('_JEXEC') or die('Restricted access');

新しいページで失敗します。Joomla Docs で読んだ限りでは、_JEXEC を 1 に等しく定義することは (SO に関するいくつかの投稿で読んだように)、サイトへのエントリ ポイントを提供するため、セキュリティ リスクです。

私が見た他のシャウトボックス モジュールが行う方法は、helper.php ファイル内の関数をポイント バックすることです。これは、すべての関数が通常格納される場所であるため、私には理にかなっています。ただし、モジュールが onSubmit() (または関連する) コマンドで helper.php ファイルにアクセスする方法については不明であり、誰かがこれに光を当てることができることを望んでいました。

シャウトボックス モジュールに固有のものは実際には必要ありません。これは、Joomlaモジュールで AJAX 機能を取得する方法と、それをどのように配置するかという問題です。

4

5 に答える 5

5

他の 2 つは、AJAX 呼び出しを行うときに Joomla の php ファイルに直接アクセスできないことを覚えておく必要がある正しい軌道に乗っていました。代わりに、モジュールを呼び出す方がよいでしょう。この場合、モジュールに POST または URL 内の変数をチェックさせます。

私は JQuery の ajax の大ファンです。それは、そのシャウトボックスを構築した人が使用した方法よりもはるかに自己完結型です。

$( "#addShout" ).click( function(event, ui) {
                $.ajax({
                    type: 'GET',
                    url: "<?php echo JURI::base() . "index.php?option=mod_mymodule&task=getCustomerJson&selectedCustomer="?>"  + encodeURIComponent(value),
                    success:function(data){
                        $('#shouts').append(data);
                    },
                    error:function(){
                        $('#errors').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
                    }
                });  
        });

それから、バレンティンへのコメントで述べたように:

$task = JRequest::getVar('task'); 
if($task == "getCustomerJson"){mySuperHelper::getCustomerJson();}

変数が存在する場合にのみ、必要な関数を呼び出します。

プロセスの一部を説明すると、次のようになります。

  1. POST または URL に変数がない場合は、Joomla が期待する方法でモジュールを表示するだけです。
  2. 変数が検出された場合は、メソッドを呼び出してデータベースに追加し、それを表示に追加する JavaScript 関数を呼び出します。また、正常な表示が起こらないようにします。

あなたが参照したモジュールは非常に興味深いものでした。メイン ファイルが参照するヘルパー関数は、MVC でモデルが通常処理することを行います。それがどのように機能したかを本当に理解したい場合は、fatAjax.js ファイルを掘り下げる必要があります。このファイルにはすべての AJAX が含まれており、mod_shoutbox.php がリッスンする変数が設定されています。

于 2012-11-20T17:10:23.617 に答える
0
jQuery(document).ready(function () { 
    jQuery(".btnshow").click(function () {
        var pagename, pid;
        pid=jQuery(this).attr('rel');
        pagename="<?php echo JURI::root();?>index.php?option=com_componentname&view=result&Id="+pid;    
        jQuery.get(pagename, function (data) {
            jQuery('.para1').html(data);
        });
    }); 
});


<a href="JavaScript:void(0);" rel="<?php echo $id; ?>" title="<?php echo $id; ?>"><img src="<?php echo $image; ?>" alt="" /></a>
于 2012-11-19T08:44:23.483 に答える
0

私の知る限り、モジュールからモジュール自体の関数 (または類似のもの) への AJAX 呼び出しを行うことはできません。

コンポーネントを構築し、RAW または JSON を応答として返すビューを作成できます。Joomlaだから!それ自体が呼び出され、Joomla! を使用できます。API とそこから得られるすべての利点。機密データを取得する必要がある場合は、ACL / ユーザー チェックも実行できるため、これはセキュリティ上の問題でもあります。

モジュールから次のようなものを呼び出すことができる場合:

index.php?option=com_mycomponent&task=getJson

JSON 出力の生成に関する記事は、出発点として適しています。

于 2012-11-19T07:36:43.107 に答える