Estou desenvolvendo um componente personalizado para o Joomla! 3.xe deseja fazer uma chamada AJAX dentro dele para recuperar alguns dados. Qual é a maneira correta de fazer isso?
Um conselho importante nunca é interromper o fluxo do Joomla. Por exemplo, poucos componentes isten ajax request onAfterRoute e executam a tarefa e eliminam a solicitação aqui. Isso causa erros difíceis de depurar.
Você quer dizer - não feche um aplicativo? Você pode elaborar mais?
Sim, se o joomla fechar o aplicativo, será melhor. Portanto, a extensibilidade da sua extensão será mantida.
— Shyam 23/04
Ainda não entendo completamente. O que eu estou falando é $ app-> close () no controlador. Você quer dizer o mesmo? :)
Sim, falando o mesmo ponto. Por que devemos fechar o aplicativo no controlador, enquanto o mesmo será feito pelo próprio joomla.
Observe que esta resposta já tem alguns anos e não foi atualizada. Sinta-se livre para editar / comentar se você acha que algo não é mais exato.
Quase não existe uma maneira oficial de lidar com isso, depende muito da complexidade e do quanto você deseja confiar no padrão MVC para fazer o trabalho.
Antes do Joomla! 3.2 a única coisa que você precisa para usar os exemplos abaixo é a component. Após o Joomla 3.2 (para tarefas menos complexas), você pode lidar com solicitações de módulos e plugins.
Seu URL para a tarefa precisa ter a seguinte aparência:
Do que o nome do seu subcontratado (para a visualização bruta) precisa ser abc.raw.php.
Isso significa também que você terá / poderá ter 2 subcontroladores chamados Abc.
Se você retornar JSON, pode fazer sentido usar format=jsone abc.json.php. No Joomla 2.5. Eu tive alguns problemas para que essa opção funcionasse (de alguma forma, a saída foi corrompida), então usei raw.
Resposta JSON válida (após o MVC novo / legado)
Não se esqueça de procurar falsificações de pedidos. JSession::checkToken()venha a calhar aqui. Leia a documentação em Como adicionar anti-spoofing CSRF aos formulários
Joomla! Interface Ajax - O Joomla agora oferece uma maneira leve de lidar com a solicitação do Ajax em um plug-in ou módulo. Você pode querer usar o Joomla! Interface Ajax se você ainda não possui um componente ou se precisa fazer solicitações de um módulo que já possui.
Resposta da melhor qualidade que já vi no joomla.stackexchange.com até agora - muito bem feita e maneira de elevar a fasquia. Excelente trabalho!
Concordo, mas e quanto JRequest? Ele está obsoleto, deve ser simplesmente $this->inputdesde que eu uso a v3.x?
Abordei sua preocupação em relação a JRequest. Obrigado
Resposta Nice, apenas queria dizer que há uma classe Joomla desde 3.1 que alças JSON de saída: API , Usage
@ fl0r sim, Valentin mencionou na Valid JSON Responseseção.
Esta é uma resposta tardia para esta pergunta muito bem respondida, mas eu queria adicionar esta solução simples para aqueles que precisam apenas de uma maneira simples de acessar os dados de seus componentes com uma chamada AJAX.
Com todas as versões do Joomla, possibilidades de terceiros e hacks que eu encontrei ao longo de vários dias pesquisando no Google, essa foi a abordagem mais simples que eu pude criar - e o feedback é DEFINATAMENTE apreciado.
Função adicionada executeao meu controlador principal existente
Utilizou a classe JResponseJson incorporada no Joomla para lidar com a saída ( é muito bom! )
URL para chamar / executar a tarefa:
Controlador principal modificado \ com_example \ controller.php
Novo subcontrolador \ com_example \ controllers \ forajax.php
A resposta do Valentin é boa, mas é um pouco complexa, se tudo o que você precisa fazer é adicionar 1 ou 2 chamadas ajax a um componente que já foi criado. É perfeitamente possível evitar não criar arquivos controller.raw.phpou view.raw.phparquivos separados .
No jobsubcontrolador
Legal, mas por que não usar JResponseJsonclasse para lidar com isso?
O JResponseJson foi introduzido no Joomla 3
Não houve Joomla SE onde eu poderia pedir;)
Se você tem 100% de certeza de que não há um plug-in thrid-party que adicione qualquer saída Javascript, um json_encode puro funciona.