ti-enxame.com

Como recuperar dados do banco de dados Joomla via jQuery.ajax sem controlador

Preciso recuperar alguns dados de #__ virtuemart_order_histories in templates/active_tmpl/html/com_virtuemart/orders/details_history.php via jQuery.ajax. Eu sei que posso fazer isso com um novo & task = no controlador, mas é possível fazer a consulta ajax no banco de dados no arquivo acima sem tocar nos arquivos principais do Virtuemart?

2
stckvrw

Encontrei a seguinte solução simples: para adicionar .../orders/details_history.php o 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);

e para criar o arquivo raw.php na pasta do modelo ativo com a consulta ao banco de dados:

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

Qualquer outra solução melhor será apreciada

1
stckvrw

Você também pode criar uma exibição, no meu caso, chamada "ajax". Tudo o que você precisa fazer é criar um diretório 'ajax' no diretório de exibição. Dentro deste diretório, coloque o view.html.php que contém a classe display:

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

        //do whatever you want to to

        echo json_encode($returnData);
        exit;
    }
}

É importante definir a saída; comando, que impede a obtenção de html de modelo dentro da sua solicitação.

Dentro do seu script jQuery, chame essa visualização com dados de postagem como este:

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, a solução mais clara para esta situação seria:

adicionando &format=json à sua consulta e aponte-a para a visualização que você deseja

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

Então você precisa adicionar view.json.php Em components/com_virtuemart/view/order/ E fazer o que for necessário em display() function.

1
Alexandr

Você pode criar um plugin e usar a extensão com_ajax para ele. Por favor, nunca, nunca use $ _REQUEST para receber quaisquer dados da solicitação. Especialmente se você estiver usando os dados para solicitações de banco de dados. Por favor, use o objeto JInput para isso.

1
Radek Suski