Joomla - le Contrôleur de la tâche qui renvoie des données JSON
J'ai la tâche de run
dans mon contrôleur. Je veux le retour de données JSON. Comme il est, je reçois mes données JSON enveloppé à l'intérieur du modèle HTML. Comment dois-je dire à Joomla à juste retour des données JSON à partir du contrôleur? C'est la fonction que j'ai:
public function run ( ) {
JFactory::getDocument()->setMimeEncoding( 'application/json' );
JResponse::setHeader('Content-Disposition','attachment;filename="progress-report-results.json"');
JRequest::setVar('tmpl','component');
$data = array(
'foo' => 'bar'
);
echo json_encode( $data );
}
Et ce retourne:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr">
...
</head>
<body class="contentpane">
<div id="system-message-container">
</div>
{"foo":"bar"}
</body>
</html>
Je voudrais obtenir:
{"foo":"bar"}
OriginalL'auteur Jeffrey Ray | 2013-05-24
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de construire un spécial JSON vue (
view.json.php
; ou contrôleurprogressreports.json.php
) pour y parvenir. La seule chose que vous avez à faire est de faire écho à la chaîne JSON et fermer l'application.Vous avez seulement besoin d'une vue séparée (ou contrôleur) si vous souhaitez fournir à l' même fonction avec HTML et sortie JSON (choisi par l'appelant).
OriginalL'auteur nibra
Eu la réponse.
J'avais besoin de faire un nouveau contrôleur. Dans mon cas, le contrôleur d'origine a été appelé, progressreports.php - j'ai fait un nouveau contrôleur appelé progressreports.raw.php.
Puis lors de l'appel de l'url, ajouter format=raw. c'est à dire
OriginalL'auteur Jeffrey Ray
Vous devez utiliser jexit() pour renvoyer les données json sans Joomla sortie.
OriginalL'auteur Nagarjun
En fonction de ce que vous faites, vous pouvez faire un document json, whatever.json.php au lieu de whatever.html.php.
OriginalL'auteur Elin
J'ai vérifié la accepté de répondre, il ne fonctionne pas avec joomla 3.4.3. Si quelqu'un a le même problème, voici la solution pour baisser joomla versions:
Le contenu de l'en-tête de disposition n'est nécessaire que si vous souhaitez proposer le fichier à télécharger.
off:
Je veux juste terminer ce projet et de boire somethink à l'oublier. Avant même de commencer à partir de zéro et de l'écriture d'un nouveau CMS serait moins douloureux. :S
OriginalL'auteur inf3rno
Je n'aime pas beaucoup JResponseJson et aussi j'aime mettre en file d'attente des messages pour la prochaine requête, donc j'ai fait la méthode suivante sur le contrôleur principal de mon composant:
Dans n'importe quelle tâche du responsable du traitement ou le sous-contrôleur, vous pouvez maintenant effectuer les opérations suivantes:
OriginalL'auteur Francisco Jiménez Cabrera