web-dev-qa-db-ja.com

コントローラなしでjQuery.ajaxを介してJoomla DBからデータを取得する方法

templates/active_tmpl/html/com_virtuemart/orders/details_history.php#__ virtuemart_order_historiesからjQuery.ajaxを介してデータを取得する必要があります。コントローラーで新しい&task =を使用してそれを実行できることを知っていますが、Virtuemartコアファイルに触れずに上記のファイルのDBにajaxクエリを実行することは可能ですか?

2
stckvrw

私は次の簡単な解決策を見つけました:.../orders/details_history.phpスクリプトを追加するには:

var response = jQuery.ajax({
  type: "GET",   
  url: "index.php?tmpl=raw&order_id=<?php echo $this->orderdetails['details']['BT']->virtuemart_order_id; ?>",   
  async: false
}).responseText;
alert(response);

そして、アクティブなテンプレートのフォルダーにファイルraw.phpを作成し、DBへのクエリを実行します。

$order_id = $_REQUEST['order_id'];
$db = &JFactory::getDBO();
$query = $db->getQuery(true);
...

他のより良い解決策は高く評価されます

1
stckvrw

また、「ajax」という名前のビューを作成することもできます。必要なのは、ビューディレクトリに「ajax」ディレクトリを作成することだけです。このディレクトリ内に、表示クラスを含むview.html.phpを配置します。

public function display($tpl = null)    {
        //Get post data
        $input = JFactory::getApplication()->input;

        //do whatever you want to to

        echo json_encode($returnData);
        exit;
    }
}

出口を設定することが重要です。コマンド。リクエスト内でテンプレートhtmlが取得されるのを防ぎます。

JQueryスクリプト内で、次のような投稿データを使用してこのビューを呼び出します。

var post_vars = new Array();
post_vars.Push({name:'somevar', value:'somevalue'});

var data = jQuery.post('index.php?option=com_mycomponent&view=ajax', post_vars);
data.done(function(reply_data) {
  var response_json = jQuery.parseJSON(reply_data);
  //do whatever you want
});
1
Daniel

私見、この状況の最も明確な解決策は:

クエリに_&format=json_を追加し、それを任意のビューにポイントする

_var response = jQuery.ajax({
  type: "GET",   
  url: "index.php?option=com_virtuemart&view=order&order_id=<?php echo $this->orderdetails['details']['BT']->virtuemart_order_id; ?>&format=json"
});
_

次に、_view.json.php_に_components/com_virtuemart/view/order/_を追加し、display()関数で必要なことをすべて実行する必要があります。

1
Alexandr

プラグインを作成して com_ajax 拡張を使用できます。決してリクエストからデータを受け取るために$ _REQUESTを使用しないでください。特に、データベース要求にデータを使用する場合。 JInput オブジェクトを使用してください。

1
Radek Suski