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
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.
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