Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-01-2014 17:44:36

romsVLM
Membre
Date d'inscription: 23-01-2014
Messages: 89

ViewJsonStrategy + DataTables ne fonctionne pas

Bonjour,

j'ai de nouveau un problème avec le livre de Sebastien Chazallet au niveau du controlleur Ajax.

Il nous propose d'ajouter le plugin DataTables à une liste de Gallerie afin d'y mettre une pagination, recherche, tri en Ajax.

Voici l'action listAction de mon IndexController :

Code:

    public function listAction()
    {
        // Récupération de l'objet requête
        $request = $this->getRequest();
    
        $start = $request->getQuery('iDisplayStart', 0);
        $length = $request->getQuery('iDisplayLength', 10);
        $tri = $request->getQuery('iSortCol_0');
        $senstri = $request->getQuery('sSortDir_0', 'asc');
        $filtre = $request->getQuery('sSearch');
    
        // Préparation pour le requêtage
        $modelManager = $this->_getGalerieInfoTable();
    
        // Récupération des galeries sous la forme d'un tableau d'entités
        $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
    
        // Préparation pour la mise en forme du résultat
        $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
        $translator = $this->_getTranslator();
        $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
        $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
        $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
        $url = $this->url();
        // Mise en forme du résultat pour que cela corresponde à
        // l'attendu, c'est à dire un tableau de tableaux
        $result = array();
        foreach($galeries as $g) {
            $result[] = array(
                    "<strong>{$g->name}</strong><em>{$g->description}</em>",
                    $g->username,
                    $g->nb,
                    sprintf(
                            $action_template,
                            $url->fromRoute('galerie/view', array('id' => $g->id)),
                            $action_voir,
                            $url->fromRoute('galerie/edit', array('id' => $g->id)),
                            $action_editer,
                            $url->fromRoute('galerie/del', array('id' => $g->id)),
                            $action_supprimer
                    ),
            );
        }
    
        // Construction du resultat
        return new JsonModel(array(
                "sEcho" => $request->getQuery('sEcho', 1),
                "iTotalRecords" => $modelManager->count_all(),
                "iTotalDisplayRecords" => count($result),
                "aaData" => $result,
        ));
    }

Voici ma vue index.phtml :

Code:

<h1><?php echo $this->translate('Galerie_index_title', 'galerie'); ?></h1>
<table id="galeries" class="sorted">
<thead>
    <tr>
        <th>
            <strong><?php echo $this->translate('Galerie_index_table_name', 'galerie'); ?></strong>
            <em><?php echo $this->translate('Galerie_index_table_description', 'galerie'); ?></em>
        </th>
        <th>
            <?php echo $this->translate('Galerie_index_table_username', 'galerie'); ?>
        </th>
        <th>
            <?php echo $this->translate('Galerie_index_table_nb', 'galerie'); ?>
        </th>
    </tr>
</thead>
<tbody>

</tbody>
</table>

Voici mon fichier perso.js qui s'occupe d'initialiser le plugin DataTables :

Code:

$(document).ready(function() {
    $('table#galeries.sorted').dataTable({
        "oLanguage": {
            "sLengthMenu": "Afficher _MENU_ galeries par page",
            "sZeroRecords": "Aucune galerie n'est enregistré pour le moment",
            "sInfo": "Affichage des galeries _START_ à _END_ sur _TOTAL_",
            "sInfoEmpty": "Affichage des galeries 0 à 0 sur O",
            "sInfoFiltered": "(filtre appliqué sur un total de _MAX_ galeries)",
            "sSearch": "Recherche",
        },
        "aoColumnDefs": [
            {"bSortable": false, "aTargets": [3]}
        ],
        "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource": "/galeries/liste",
    });
});

Lorsque je me rend sur ma page qui affiche les Galeries (/galeries),  les données ne sont pas affichées, j'ai uniquement, les élements html, et css, et les images de navigation de la pagination et du tri.

Hors lorsque je me rend sur la page (/galeries/liste), j'ai bien les données JSON affichés tel quelle :

Code:

{"sEcho":1,"iTotalRecords":"11","iTotalDisplayRecords":10,"aaData":[["\u003Cstrong\u003EEspagna\u003C\/strong\u003E\u003Cem\u003EPhoto de famille en Espagne\u003C\/em\u003E","Paul Cah","0","\u003Ca href=\u0022\/galerie\/galeries\/voir\/5\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/5\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/5\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003EGrece\u003C\/strong\u003E\u003Cem\u003Ephoto des greques\u003C\/em\u003E","Paul Cah","0","\u003Ca href=\u0022\/galerie\/galeries\/voir\/9\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/9\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/9\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003EHimalaya\u003C\/strong\u003E\u003Cem\u003EEntrainement requis\u003C\/em\u003E","Paul Cah","5","\u003Ca href=\u0022\/galerie\/galeries\/voir\/1\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/1\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/1\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003EIrlande\u003C\/strong\u003E\u003Cem\u003EPhoto de bierre\u003C\/em\u003E","Paul Cah","0","\u003Ca href=\u0022\/galerie\/galeries\/voir\/7\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/7\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/7\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003EMaroc\u003C\/strong\u003E\u003Cem\u003EVacance au maroc\u003C\/em\u003E","Paul Cah","0","\u003Ca href=\u0022\/galerie\/galeries\/voir\/6\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/6\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/6\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003ETibet\u003C\/strong\u003E\u003Cem\u003Ephoto du tibet\u003C\/em\u003E","Paul Cah","0","\u003Ca href=\u0022\/galerie\/galeries\/voir\/8\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/8\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/8\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003ETunisie\u003C\/strong\u003E\u003Cem\u003EPhoto de la Tunisie\u003C\/em\u003E","Paul Cah","0","\u003Ca href=\u0022\/galerie\/galeries\/voir\/10\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/10\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/10\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003EZambi\u003C\/strong\u003E\u003Cem\u003EPhoto africaine\u003C\/em\u003E","Paul Cah","0","\u003Ca href=\u0022\/galerie\/galeries\/voir\/11\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/11\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/11\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003EFrancee\u003C\/strong\u003E\u003Cem\u003EPhotos des vacances en France, 2013\u003C\/em\u003E","Alain Finy","0","\u003Ca href=\u0022\/galerie\/galeries\/voir\/4\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/4\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/4\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"],["\u003Cstrong\u003EParapente\u003C\/strong\u003E\u003Cem\u003EPhotos de vol en parapente\u003C\/em\u003E","Alain Finy","3","\u003Ca href=\u0022\/galerie\/galeries\/voir\/2\u0022\u003EGalerie_index_table_lien_view\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/editer\/2\u0022\u003EGalerie_index_table_lien_edit\u003C\/a\u003E\u003Ca href=\u0022\/galerie\/galeries\/supprimer\/2\u0022\u003EGalerie_index_table_lien_del\u003C\/a\u003E"]]}

Pourquoi mes données ne sont pas transmise et affichées sur ma vue ?

Merci!

Dernière modification par romsVLM (28-01-2014 12:23:38)

Hors ligne

 

#2 27-01-2014 23:20:47

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: ViewJsonStrategy + DataTables ne fonctionne pas

Salut ! Là ça sort un peu du contexte du ZF2 ton problème vient plus de la datatable qu'autre chose je pense. Est-ce que la datatable fait correctement l'appel aux données ? Tu as bien une requête get qui va récupérer le json et le json est bien récupéré par le navigateur ?

Hors ligne

 

#3 28-01-2014 12:22:59

romsVLM
Membre
Date d'inscription: 23-01-2014
Messages: 89

Re: ViewJsonStrategy + DataTables ne fonctionne pas

Pourtant je suis allé vérifier sur le site du plugin comment l'utilisé, et mon code est correct.

En gros j'ai ma page index.phtml qui va afficher le dataTable. J'ai un script perso.js qui s'occupe d'initialiser mon DataTable, qui lui effectu une requête Ajax sur mon action listAction, qui elle s'occupe de récupérer les données dans ma BDD grâce à un modèle. Jusque la tout fonctionne bien, car lorsque je me rend directement sur l'action listAction (/galeries/liste) je vois bien les données récupérées au format Json.

Le problème vient donc du retour des données à l'action indexAction (index.phtml). Cette page ne reçoit pas les données. Mais pourquoi?

Hors ligne

 

#4 28-01-2014 14:00:40

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: ViewJsonStrategy + DataTables ne fonctionne pas

Je te repose donc la même question. Es-tu sûr que l'appel ajax a bien lieu ? Que le résultat json est correct et que le parsing du json fonctionne bien ?

Parce là ce que tu décris c'est que t'as juste testé que l'url /galeries/liste tu as bien un retour json ça ne dit pas si l'appel ajax est bien fait, ni si l'url appelée en ajax est correcte (trace réseau du navigateur etc ...)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages