web-dev-qa-db-fra.com

Comment charger une vue partielle dans une vue normale via AJAX?

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é?

5
codinghands

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!';
3
Valentin Despa