Je pense que cela pourrait être utile à l'avenir pour beaucoup d'autres. Tout d'abord, je sais qu'il existe un com_ajax pour ce type de travail, mais je ne veux pas l'utiliser. Y a-t-il une alternative?
Ce que j'ai:
default.php
<form method="post" name="filterForm">
<input type="checkbox" name="checkboxList[]" value="1">value1</input>
<input type="checkbox" name="checkboxList[]" value="2">value2</input>
<input type="checkbox" name="checkboxList[]" value="3">value3</input>
</form>
jQuery(function($) { // DOM is now ready
$("input[type=checkbox]").on("change", function() {
var data = $("filterForm").serialize();
$.ajax({
url: "/modules/mod_mymodule/mymodule.php",
type: "POST",
async: true,
cache: false,
data: ({data: data}),
dataType: "text",
});
});
});
mymodule.php
//defined('_JEXEC') or die; <-- So it's possible to access this file
print_r($_POST);
Je reçois un tableau vide. Qu'est-ce qui ne va pas?
Je ne comprends pas pourquoi vous essayez de contourner le cadre. Je sais que cela concerne les ressources, mais cela vous expose à des risques de sécurité. L'autre chose est que vous ne pouvez pas utiliser les classes/fonctions du framework aussi facilement. Ce que je ferais c'est:
JURI::current()
autant que je m'en souvienne). Cela dirigera les données POST) vers une vue où votre module a été exécuté afin que vous puissiez y accéder à partir de votre module.JFactory::getApplication()->input
dans votre module pour accéder aux données de publication envoyées par la requête jQuery. De cette façon, vous êtes dans la structure, toutes les options de sécurité/filtrage sont disponibles et fonctionnent.JFactory::getApplication()->close("OK")
, puis vérifiez simplement la réponse dans jQuery.Se rapporte à Envoi POST données dans le module - AJAX
Et j'ai posté la réponse là déjà.
En deux mots: utilisez com_ajax
.
Comment? Vérifiez la réponse dans le post mentionné ci-dessus. Ou regardez dans le code de com_ajax
C'est assez simple: vous allez envoyer des requêtes à index.php?option=com_ajax&ignoreMessages&module=YMODULE&method=YMETHOD&format=json
. La description de la logique du module se trouve dans l'article ci-dessus.
Et j'ajouterai la description call plugin
Ici:
index.php?option=com_ajax&ignoreMessages&plugin=EVENT&group=PLUGINGROUP&format=json
il chargera les plugins du groupe PUGINGROUP
(ajax
le groupe par défaut) et déclenchera l'événement onAjaxEVENT()
si vous ne souhaitez pas utiliser com_ajax, vous pouvez créer votre propre composant pour gérer les appels ajax. Une autre solution consiste à utiliser un plug-in système qui capturerait votre URL et la traiterait.
si vous décidez d'utiliser votre propre fichier php au lieu de le traiter via le fichier index.php principal de joomla, vous risquez d'être confronté à de nombreux problèmes de sécurité, en particulier si vous distribuez votre module à différents clients/utilisateurs.
le pare-feu php idéal détecterait les exécutables php, alors que dans le site idéal, il n'y aurait que index.php. Par conséquent, refuser les fichiers exécutables en dehors du fichier 2 index.php dans joomla est l’une des meilleures mesures de sécurité dans le monde joomla.