IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

[ZF 2] Refresh AJAX vue


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Par défaut [ZF 2] Refresh AJAX vue
    Bonjour,

    Je prends mes marques sur le framework ZEND (version 2), et développe divers
    modules.
    Sur le dernier, j'ai une liste de données dans un tableau, que je pagine avec "Paginator", cela fonctionne bien.
    En javascript, je modifie les liens de la pagination afin de recharger en AJAX le tableau.

    Dans mon controleur, je retourne dans indexAction, et capte l'événement AJAX avec $this->getRequest()->isXmlHttpRequest().

    Maintenant, impossible de charger une autre vue que index.phtml.
    J'ai créer deux vues, une au premier chargement, l'autre pour l'ajax :

    index.phtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    	$title = 'My Sample Data';
    	echo $this->headTitle($title);
    	?>
    	<h1><?php echo $this->escapeHtml($title); ?></h1>
     
    	<p><a href="<?php echo $this->url('SanSamplePagination/default', array(
    			'action'=>'add'));?>">Add new Sample Data</a></p>
    	<div id="winpopup"></div>
    	<div id="div_content_pagination">
    	<?php require_once('list.phtml'); ?>
    	</div>
    list.phtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    echo ( count($this->sample) > 0 ) ? $this->paginationControl($this->sample, 'Sliding', 'pager.phtml') : ""; ?>
    <table class="table">
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Gender</th>
            <th></th>
        </tr>
        <?php foreach($this->sample as $row) : ?>
        <tr>
            <td><?php echo $this->escapeHtml($row['id']); ?></td>
            <td><?php echo $this->escapeHtml($row['name']); ?></td>
            <td><?php echo ($row['gender'] == 2) ? 'Female' : 'Male'; ?></td>
            <td>
            <a href="<?php echo $this->url('SanSamplePagination/sample-id',
                array('action'=>'edit', 'id' => $row['id'], 'controller'=>'tablesample'));?>">Edit</a>
            <a href="<?php echo $this->url('SanSamplePagination/sample-id',
                array('action'=>'delete', 'id' => $row['id']));?>">Delete</a>
        </td>
        </tr>
        <?php endforeach; ?>
    </table>
     
    <?php echo ( count($this->sample) > 0 ) ? $this->paginationControl($this->sample, 'Sliding', 'pager.phtml') : ""; ?>
    Comment faire dans le contrôleur pour appeler uniquement list.phtml, et non index.phtml ? Peut-être créer une nouvelle action dans celui-ci ?
    Quelques exemples ? Car malheureusement, la version 2 n'est pas encore très bien documentée/partagée sur le net...

    Merci,

  2. #2
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Salut,

    Pour afficher une vue différente, tu peut faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $viewModel = new ViewModel();
    $viewModel->setTemplate('technicalerror');
    $viewModel->setVariable('variable', 'valeur');
    return $viewModel;
    N'oublie pas de mapper ta vue dans ton module.config.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'view_manager' => array(
        'template_map' => array(
            'technicalerror' => __DIR__ . '/../view/application/index/technicalerror.phtml',
        );
    );

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Par défaut
    Merci pour ta réponse,

    J'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call to a member function setTemplate()
    Il me manque peut être un use ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    use Zend\Mvc\Controller\AbstractActionController;
    use Zend\View\Model\ViewModel;
    use SanSamplePagination\Form\SampleForm;
    use SanSamplePagination\Model\Sample;
     
    class TablesampleController extends AbstractActionController
    {
        protected $sampletable;
        public $viewmodel; 
     
        public function indexAction()
        { 
    ...

  4. #4
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Non tu a le namespace qu'il faut (Zend\View\Model\ViewModel)

    Tu peut faire voir le reste du code de ton controller ?

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 42
    Par défaut
    Oui bien sûr, je limite le c/c à l'action "index" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
    /**
     * Zend Framework (http://framework.zend.com/)
     *
     * @link      http://github.com/zendframework/SanSamplePagination for the canonical source repository
     * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
     * @license   http://framework.zend.com/license/new-bsd New BSD License
     */
     
    namespace SanSamplePagination\Controller;
     
    use Zend\Mvc\Controller\AbstractActionController;
    use Zend\View\Model\ViewModel;
    use SanSamplePagination\Form\SampleForm;
    use SanSamplePagination\Model\Sample;
     
    class TablesampleController extends AbstractActionController
    {
        protected $sampletable;
        public $viewmodel; 
     
        public function indexAction()
        { 
            $viewmodel = new ViewModel;
            $matches = $this->getEvent()->getRouteMatch();
            $page      = $matches->getParam('page', 1);
            $iteratorAdapter = new \Zend\Paginator\Adapter\ArrayAdapter(  $this->getSampleTable()->fetchAll() );
            $paginator = new \Zend\Paginator\Paginator($iteratorAdapter);
     
            $paginator->setCurrentPageNumber($page);
            $paginator->setItemCountPerPage(2);
     
            $viewmodel->setVariable('sample', $paginator);
    		if ($this->getRequest()->isXmlHttpRequest()){
    			$viewModel->setTemplate('ajaxList');
    			$viewModel->setVariable('isajax', '1');
    		}
     
            return array(
                'sample'  => $paginator,
            );
        }
    }
    Erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function setTemplate() on a non-object in /home/intranetdauchez/www/module/SanSamplePagination/src/SanSamplePagination/Controller/TablesampleController.php on line 35
    Merci !

  6. #6
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    L'erreur vient du fait que tu à mal orthographié le nom de la variable dans ton if (tu passe de $viewmodel à $viewModel)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] refresh ajax IE8
    Par ZnhaarX dans le forum AJAX
    Réponses: 3
    Dernier message: 27/06/2011, 20h36
  2. problème session avec refresh ajax
    Par fraternity dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 26/04/2011, 18h05
  3. Récupérer valeurs avant refresh(Ajax.PeriodicalUpdater)
    Par jcaction dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 17/07/2009, 14h48
  4. [Prototype] Refresh Ajax Php
    Par ccsuperstar dans le forum Bibliothèques & Frameworks
    Réponses: 13
    Dernier message: 17/03/2008, 09h38
  5. Réponses: 2
    Dernier message: 06/12/2004, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo