web-dev-qa-db-fra.com

Joomla AJAX request

Je développe un composant Joomla dans lequel j'ai un arbre dans la barre latérale avec le contenu d'une table de base de données. Lorsque je clique sur un nœud de cette barre latérale, je souhaite afficher les nœuds enfants de la partie principale de la fenêtre sous forme de liste (comme le fait l'explorateur de fenêtres). Pour ce que je lisais, la meilleure façon de faire est une requête ajax comme expliqué ici .

Je lie à l'URL dans chaque noeud: href="index.php?option=com_nautilus&task=datalist&format=raw"

Dans controller.php j'ajoute:

Blockquote

public function datalist()
{   
    $this->input->set('view', 'Datalist');

    parent::display();
}   

Je crée/vues/datalist avec le fichier view.raw.php

Blockquote

<?php
    defined('_JEXEC') or die;

    jimport('joomla.application.component.view');

    class SimilarViewDatalist extends JViewLegacy
    {
        function display($tpl = null)
        {
            parent::display($tpl);
        }
    }

et/views/datalist/tmpl avec le fichier default.php

Blockquote

   <?php

           echo "Hello World from /views/datalist/tmpl/default.php";

Mais je reçois:

Une erreur est survenue. 500 Classe de vue non trouvée [classe, fichier]: nautilusViewDatalist, C:\xampp\apps\joomla\htdocs\administrateur\components\com_nautilus\views\dataList\view.raw.php

3
republicca

Le nom de votre composant est com_nautilus. Avec Joomla MVC, votre contrôleur recherche une classe appelée "nautilus ViewDatalist" dans le fichier view.raw.php mais vous avez nommé votre classe "SimilarViewDatalist". C’est là que l’erreur 500 vient.

3
fruppel

Comment implémenter Ajax dans le composant Joomla

Créer un fichier contrôleur où vous enverrez une requête ajax de javascript à PHP

controller.php

<?php
defined('_JEXEC') or die('Access Deny');
jimport('joomla.application.component.controller');
class OpenChatController extends JController
{

    function saveChatViaAjax()
    {
        $app=JFactory::getApplication();
        $jinput=$app->input;
        $res=array();
        //Implement Your Logic i am giving some sample response
        $res['status']=true;
        $res['msg']=$jinput->get('msg');
        echo json_encode($res);
        $app->close();
    }


}

À partir de la page de vue Vous allez envoyer une requête Ajax en utilisant Jquery (vous pouvez aussi utiliser du javascript xhr natif)

<script>
$(document).ready(function()
{
        //Sending Ajax Request to saveChatViaAjax method on Controller OpenChatController
        var param={};
        param.option='com_openchat';
        param.task='saveChatViaAjax';
        param.msg='Please save this mesage';

        $.post('index.php',param,function(res){
            console.log(res);
        });
});
</script>

Vous pouvez télécharger https://f10df5600a7c9a74bb22e6b8df498775b8d .Zip

Vous pouvez regarder toute la série de vidéos https://www.youtube.com/playlist?list=PL7kkxuLFYIDOrj395REpd0golrCV7XLcY

2
biswarupadhikari