2010-10-21 6 views
3

Je développe une nouvelle version de mon composant Joomla TTVideo. J'essaye de mettre en place un système de notation en utilisant le plugin jQuery. J'ai le problème jQuery noconflict résolu, mais je suis un peu confus quant à la façon d'envoyer le vote en toute sécurité à une classe d'aide qui met à jour la base de données avec la valeur du vote.Utiliser jQuery pour mettre à jour la base de données via le composant Joomla MVC

Habituellement, cela est fait par un script externe qui est seulement accessible à chaque requête ajax. Je voudrais le faire afin qu'il soit incorporé dans mon composant, et de telle manière que les variables std Joomla soient disponibles à la classe d'aide, par exemple. getDBO() et la référence de la base de données #__nom_table.

Tous les commentaires sur la façon d'y parvenir seront grandement appréciés. Merci.

Répondre

4

C'est assez simple. D'abord, vous devez créer un contrôleur avec une tâche spécifique qui gère votre mise à jour d'évaluation. Pour le sécuriser, validez le jeton! Le jeton viendra avec la requête AJAX.

Considérons cet exemple

function rate() { 
    // Check for request forgeries 
    JRequest::checkToken() or jexit('Invalid Token'); 

    // Get ID of item 
    // update rating, etc... 
} 

Ensuite, créez votre requête AJAX dans la vue, évidemment déclenché par une action. Assurez-vous d'envoyer votre demande comme POST car vous allez écrire des données ... Vous pouvez avoir votre script dans un document externe obtenir des valeurs du document html (id, jeton, url, etc qui sont dans les entrées cachées) ou vous peut générer du javascript avec PHP et l'inclure dans la tête (comme dans l'exemple ci-dessous). Vous devrez peut-être modifier quelques éléments, mais c'est l'idée derrière AJAX dans MVC.

REMARQUE: vous pouvez également appeler le JRequest::checkToken('get') pour vérifier le jeton dans l'URL. Ceci est utile pour les appels AJAX qui lisent les données.

+0

Merci Alex, j'ai implémenté ceci hier comme vous l'avez décrit ci-dessus. La seule chose que j'ai laissée de côté était le jeton, je serai sûr de l'inclure. Une autre chose à noter est ce qui est très important si vous voulez recevoir une réponse de la requête ajax par exemple. json, xml, html, c'est que vous devriez ajouter & format = raw sur votre URL de demande, par exemple. index.php? option = my_component & controller = mon_controller & format = raw. Si vous ne le faites pas, vous obtiendrez le template html Joomla enroulé autour de votre réponse. – Martin

+0

si vous ajoutez 'format = raw',' view.raw.php' sera appelé. C'est quelque chose dont vous n'avez pas besoin pour l'appel AJAX, qui entraînera une charge supplémentaire et une charge de vue inutile (le contrôleur et le modèle sont suffisants pour ajax). Meilleure sortie de la tâche et utilisez 'jexit()' pour empêcher l'exécution du script. Cependant, si vous voulez toujours utiliser l'affichage ... faites les formats liés à la sortie. raw - raw html ('view.raw.php'), json - json réponse (' view.json.php'), etc ... – Alex

+0

format = brut ** n'appelle pas ** une vue. view = raw appelle une vue, ** format ** est une option Joomla std pour ne renvoyer aucun autre html en dehors de ce que le composant renvoie. Ceci est utile lorsque vous renvoyez JSON car vous ne voulez pas du tout d'autre HTML/texte, jQuery ne le reconnaîtra pas. – Martin

Questions connexes