Quelle est la méthode / implémentation la plus rapide pour un rappel Ajax?

18

J'ai une carte qui charge des marqueurs via ajax sur divers / nombreux événements de carte. Actuellement, je définis un rappel de page personnalisé pour mon hook_menu()article qui imprime mon json / js.

Étant donné que le rappel de ma page ne renvoie aucun contenu et n'imprime que du contenu, Drupal ne rend pas le modèle complet, le menu, etc., et me permet donc de renvoyer une page avec uniquement mon JavaScript.

Bien que cela fonctionne, je pense que Drupal continue de démarrer complètement, ce qui signifie qu'il ajoute beaucoup de frais généraux que je voudrais supprimer.

J'ai regardé le gestionnaire de rappel JavaScript haute performance , qui se présente comme un "gestionnaire de rappel JavaScript haute performance" et qui, en bref, semble offrir un js.phpcompliment index.phppour diriger vos demandes et personnaliser / limiter / optimiser le bootstrap que Drupal fait par défaut.

Malheureusement, le projet js n'a pas encore de version D7 ( pétition pour une ici ), ce qui nous amène au début ...

Quel est le moyen le plus rapide pour implémenter un rappel Ajax dans Drupal?

electblake
la source

Réponses:

8

Je définis un rappel de page personnalisé pour mon hook_menu()article qui imprime mon json / js.

C'est ce que Drupal 6 proposait. Le framework Drupal 7 AJAX peut faire un peu plus que cela. Oui, il démarre Drupal, mais il offre également de nombreuses fonctionnalités gratuitement. En bref, vous pouvez utiliser ajax_deliver () comme méthode de livraison de page et envoyer des commandes au navigateur.

... Ajax peut être activé en ajoutant des classes aux boutons et aux liens. En ajoutant la classe 'use-ajax' à un lien, le lien sera chargé via un appel Ajax. Lorsque vous utilisez cette méthode, le href du lien peut contenir «/ nojs /» dans le cadre du chemin. Lorsque le framework Ajax fait la demande, il le convertit en '/ ajax /'. Le serveur est alors en mesure de déterminer facilement si cette demande a été effectuée via une demande Ajax réelle ou dans un état dégradé, et de répondre de manière appropriée.

Cependant, si vous souhaitez contourner le framework pour des raisons de performances, rien ne vous empêche d'appeler des fichiers php dans votre module directement à partir de javascript. Vous n'obtiendrez aucune bonté Drupal mais vous aurez également un contrôle total sur la page.

Jeremy French
la source
Merci! Quelles que soient les performances, je devrais vraiment utiliser le framework Ajax (maintenant que je le connais) b / c toute amélioration du processus de demande de page ajax se produira probablement dans ce contexte :)
electblake
2
Jetez un œil aux exemples de modules, ils vous aideront beaucoup, le cadre est orienté vers les formulaires mais peut être utilisé n'importe où. J'ai édité ma réponse avec un peu sur la classe 'use-ajax'.
Jeremy French
3
Appeler directement des fichiers PHP est parfois très bien. Vous pouvez même inclure ce fichier dans le fichier bootstrap.inc, puis appeler api.drupal.org/api/drupal/includes--bootstrap.inc/function/… au niveau spécifique dont vous avez besoin.
greggles le
4

Un peu en retard, mais surtout si vous utilisez ce rappel ajax pour interrogation (vérification des nouveaux messages par exemple), il existe une alternative intéressante: l'intégration de Drupal .

Au lieu d'interroger, il vous permet de créer un système de type événementiel, où les utilisateurs (alias le JS sur leur page) gardent une connexion ouverte à votre serveur node.js. Si quelque chose se produit, vous pouvez informer directement tous les utilisateurs via node.js.

Berdir
la source
Jamais trop tard pour d'excellentes suggestions - jamais même pensé à utiliser node.js pour ce genre de chose, mais tout à coup, cela a du sens heh, merci!
electblake
3

Puisque vous souhaitez implémenter un rappel Ajax dans Drupal , l'utilisation du module JS ressemble à un bon pari. Je viens de jeter un coup d'œil au code, et c'est essentiellement ce que j'aurais suggéré (mais avec beaucoup plus d'attention aux détails). Le mainteneur est également l'un des meilleurs développeurs Drupal.

Il semble que vous devrez utiliser module_load_include()ou peut-être une include 'sites/all/modules/contrib/...';approche plus manuelle si vous devez utiliser des API d'autres modules.

Le problème dont vous parlez a été un sujet brûlant ces derniers temps. Le discours de Dries de DrupalCon Chicago a expliqué comment Drupal 8 a besoin de meilleures API pour effectuer des rappels et des formats de sortie non HTML.

Adam DiCarlo
la source
Donc, en bref - continuez à rechercher JS.php & do / project / js? Je vais commencer la pétition dans le numéro que pour la sortie de D7. Merci pour la vidéo!
electblake
Ouais, c'est vraiment dommage que le projet JS n'ait pas encore été porté sur D7. C'est dommage qu'il soit si difficile d'obtenir une demande de page légère.
Matt Collins