Je passe un appel AJAX à mon JController et souhaite renvoyer une vue "partielle" à afficher dans la page existante, contenant certaines données.
Est-il possible de charger un fichier à partir de <view>/tmpl/
, injectez des données et stockez le fragment obtenu?
Je pense que je dois faire quelque chose comme:
controller.php (en méthode d'action)
$view = $this->getView('MyView', 'results'); // loads view.results.php
$view->assignRef('data', $response); // assign data
$storedView = $view->display(); // store the view
view.results.php
function display($tpl = null){
return $this->loadTemplate('results'); // loads '/<view>/tmpl/default_results.php'
}
EDIT
J'ai modifié le code incorrect précédemment indiqué ci-dessus en ce qui semble fonctionner.
Est-ce la meilleure pratique pour ce cas d'utilisation particulier? Serait-il considéré comme une mauvaise forme d'ajouter simplement une nouvelle méthode à l'existant view.html.php
qui renvoie le modèle chargé?
Votre URL pour la vue/tâche partielle doit ressembler à ceci:
index.php?option=com_example&view=partial&format=raw
Vous pouvez également créer une nouvelle méthode dans le contrôleur, si nécessaire. Assurez-vous que la méthode display()
par défaut n'est pas remplacée de manière à empêcher le réglage d'une vue différente.
Maintenant, créez les fichiers suivants:
JROOT/composants/com_example/views/partial/view.raw.php
<?php
defined('_JEXEC') or die;
class ExampleViewPartial extends JViewLegacy
{
function display($tpl = null)
{
// Get the data needed for the view ...
// Call parent
parent::display($tpl);
}
}
JROOT/components/com_example/views/partial/tmpl/default.php
<?php
echo 'Hello partial world!';