web-dev-qa-db-fra.com

Comment récupérer des données de la base de données Joomla via jQuery.ajax sans contrôleur

J'ai besoin de récupérer des données de #__ virtuemart_order_histories dans templates/active_tmpl/html/com_virtuemart/orders/details_history.php via jQuery.ajax. Je sais que je peux le faire avec un nouveau contrôleur & task = in mais est-il possible d'effectuer la requête ajax vers la base de données dans le fichier ci-dessus sans toucher aux fichiers de base de Virtuemart?

2
stckvrw

J'ai trouvé la solution simple suivante: ajouter .../orders/details_history.php le script:

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);

et pour créer le fichier raw.php dans le dossier du modèle actif avec la requête au DB:

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

Toute autre meilleure solution sera appréciée

1
stckvrw

Vous pouvez également créer une vue, dans mon cas nommée "ajax". Tout ce que vous avez à faire est de créer un répertoire "ajax" dans le répertoire d'affichage. Dans ce répertoire, placez le fichier view.html.php contenant la classe d'affichage:

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

        //do whatever you want to to

        echo json_encode($returnData);
        exit;
    }
}

Il est important de définir la sortie. commande, ce qui empêche d’obtenir un template html dans votre requête.

Dans votre script jQuery, appelez cette vue avec des données de publication comme ceci:

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

IMHO, la solution la plus claire pour cette situation serait:

ajouter &format=json à votre requête et la diriger vers la vue de votre choix

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"
});

Ensuite, vous devez ajouter view.json.php À components/com_virtuemart/view/order/ Et faire ce dont vous avez besoin à la fonction display().

1
Alexandr

Vous pouvez créer un plugin et utiliser l’extension com_ajax . Merci de ne jamais utiliser $ _REQUEST pour recevoir des données à la demande. Surtout si vous allez utiliser les données pour les requêtes de base de données. Veuillez utiliser l'objet JInput pour cela.

1
Radek Suski