J'ai développé un site Web pour une station de radio locale et ils m'ont demandé s'il était possible de suivre le nombre de lectures ou de téléchargements des podcasts. J'utilise le plugin mp3 Browser Fork ( https://extensions.joomla.org/extensions/extension/multimedia/multimedia-players/mp3-browser-fork/ ) pour générer les pages de podcast, donc J'ai ajouté du code au plug-in MP3 Browser Fork pour créer une publication Ajax dans un nouveau plug-in que j'ai créé pour enregistrer l'événement cliqué dans une table de base de données.
Ce code fonctionnait correctement sur mon environnement Localhost (voir les spécifications au bas de cet article), mais lorsque j'ai migré les modifications de codage dans mon sous-domaine de développement, les transactions n'étaient pas enregistrées.
J'ai simplifié le code jusqu'à ce que Ajax publie une chaîne et que la fonction PHP renvoie immédiatement une valeur de chaîne. La publication retourne 200 OK et la publication Ajax semble réussir, mais PHP n'étant jamais exécutée, le corps de la réponse affiche une chaîne de données vide.
Je l'ai répliqué sur mon environnement localhost en mal orthographiant le nom du plug-in dans l'URL de la publication Ajax. À l'aide de l'EDI Eclipse et des outils de développement F12 de Microsoft Edge, j'ai pu confirmer que POST avait réussi, mais que la fonction PHP ne s'était pas exécutée.
Voici ce que j'ai essayé jusqu'à présent:
Aucune de ces choses n'a permis à la fonction PHP de s'exécuter. Je pense qu'il y a quelque chose dans l'environnement hébergé qui ne permet pas à Ajax Post de localiser le PHP = fonction, mais puisque le message reçoit une réponse du serveur, aucun message d'erreur n'est généré.
Voici tous les codes et réponses applicables:
Modèle modifié pour inclure la bibliothèque JQuery
<head>
<?php echo $this['template']->render('head'); ?>
<script src="http://content.jwplatform.com/libraries/3sVcGVbK.js"></script>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
PHP Plugin (première fonction)
<?php
// No direct access
defined('_JEXEC') or die;
// Import library dependencies
jimport('joomla.plugin.plugin');
class plgAjaxPodcastTracker extends JPlugin
{
Public function onAjaxPodcastTracker()
{
return "Test";
}
Fichier XML du plugin:
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.7"
type="plugin"
group="ajax"
method="upgrade">
<name>Ajax - PodcastTracker</name>
<version>0.1</version>
<creationDate>July 28, 2017</creationDate>
<author>Brian Benedum</author>
<authorEmail>[email protected]</authorEmail>
<authorUrl>http://www.readyfm.com</authorUrl>
<license>GNU General Public License version 2 or later</license>
<copyright>Copyright (C) 2017 All rights reserved.</copyright>
<description>Joomla Ajax Plugin</description>
<files>
<filename plugin="PodcastTracker">podcasttracker.php</filename>
</files>
</extension>
Nouvelle fonction ajoutée au fichier Configuration.php du plugin MP3 Browser Fork
public function getDownloadTrackerscript() {
$format = "<script type=\"text/javascript\">";
$format .= "$(document).ready(function(){";
$format .= "$(\"#download_%2\").click(function(){";
$format .= "$.ajax({";
$format .= "type: \"POST\",";
$format .= 'data: {"data": "mydata"},';
$format .= "url: \"index.php?option=com_ajax&plugin=PodcastTracker&method=PodcastTracker&format=json\",";
$format .= "success: function(results) {";
$format .= "console.log(results);";
$format .= "}";
$format .= "});";
$format .= "});";
$format .= "});";
$format .= "</script>";
return $this->get("DownloadTrackerscript", $format);
}
Les en-têtes, corps de requête et de réponse
Environnements hôte local et hébergé
LOCALHOST:
Serveur Web: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP 5.6.23 Joomla: 3.7.4
Sous-domaine de développement et domaine de production:
Fournisseur d'hébergement: Bluehost
Serveur Web: Apache 2.2.32 PHP 7.0.12
Merci d'avance pour toute idée. Je suis à court d'idées!
Le bon appel est:
index.php? option = com_ajaxplugin = PodcastTrackermethod = PodcastTrackerformat = json
Noms de plugins et de méthodes sans "plgAjax" et "onAjax". Le plugin doit être installé dans le groupe ajax.
Exemple de plug-in: https://github.com/Joomla-Ajax-Interface/Ajax-Latest-Articles
Documentation de l'interface Ajax: https://docs.joomla.org/Using_Joomla_Ajax_Interface
Script de test par exemple plugin:
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<button id="download">Test</button>
<?php
$format = "<script type=\"text/javascript\">";
$format .= "$(document).ready(function(){";
$format .= "$(\"#download\").click(function(){";
$format .= "$.ajax({";
$format .= "type: \"POST\",";
$format .= 'data: {"data": "mydata"},';
$format .= "url: \"index.php?option=com_ajax&plugin=Latestarticles&method=Latestarticles&format=json\",";
$format .= "success: function(results) {";
$format .= "console.log(results);";
$format .= "}";
$format .= "});";
$format .= "});";
$format .= "});";
$format .= "</script>";
echo $format;
?>