Bonjour,
j'ai un soucis dans mes pages avec mes paginations.
Je m'explique, dans ma page où je souhaite mettre la pagination AJAX, j'ai plusieurs div. J'aimerai recharger que la partie avec l'id 'disco'.
Pour ce faire j'ai fait comme ceci:
dans ma vue thisisreggae.ctp

...
<div id="disco">
            <?php
                echo $this->element('multidisc');
            ?>
            <div class="clearAll"></div>
            <?php 
                $this->Paginator->options(array('url' => array('controller' => 'pages','action' => 'thisisreggae'))); 
            ?>
            <div id="pagination">
                <ul>
                    <?php echo $this->Paginator->numbers(array('separator'=>'','tag'=>'li','currentClass'=>'active')); ?>
                </ul>
            </div>
        </div>
....
<script type="text/javascript">
    $(document).ready(function() {
            loadPiece("<?php echo $this->Html->url(array('controller'=>'pages','action'=>'thisisreggae'));?>","#disco"); 
    });
            }
            function loadPiece(href,divName) {     
                $(divName).load(href, function(){ 
                    var divPaginationLinks = divName+" #pagination a"; 
                    $(divPaginationLinks).click(function() {      
                        var thisHref = $(this).attr("href"); 
                        loadPiece(thisHref,divName); 
                        return false; 
                    }); 
                }); 
            }
</script>

Ma fonction thisisreggae dans ma page PagesController.php

public function thisisreggae($id = null){    
        $this->paginate = array(
                'order' => 'id DESC',
                'limit' => 9
        );
        if(empty($id)){
            $page=$this->Post->find('first',array(
                'conditions'=> array('Post.slug'=>'this-is-reggae','type'=>'page')
            ));
            $d'page']= current($page);
            $disk=$this->Disk->find('first',array(
                'order' =>  array('Disk.id DESC')
            ));
            $d'disk']= $disk;
            $d'diskAll'] = $this->Paginate('Disk');
            $this->set($d);
        }
        else{
            $page=$this->Post->find('first',array(
                'conditions'=> array('Post.slug'=>'this-is-reggae','type'=>'page')
            ));
            $d'page']= current($page);
            $disk=$this->Disk->find('first',array(
                'conditions'=> array('Disk.id'=>$id)
            ));
            $d'disk']= $disk;
            $d'diskAll'] = $this->Paginate('Disk');
            $this->set($d);
        }
    }

J'avais aussi pensé ne mettre qu'une fonction envoyant la paginate, la fonction multidisc

public function multidisc(){
        $this->paginate = array(
                'order' => 'id DESC',
                'limit' => 9
        );
        $d'diskAll'] = $this->Paginate('Disk');
        $this->set($d);
        $this->render('/posts/thisisreggae');
    }

Je suis un peu perdu car lorsque j'emploi la fonction thisisreggae dans les liens de la pagination il me recharge dans ma div #disco toute la page au complet, header footer... et je ne souhaite recharger que la pagination ainsi que la liste de disques.
Quand j'utilise la fonction multidisc plus rien ne fonctionne.

Pouvez vous m'aider?

4 réponses


Essai $this->layout = false dans la fonction thisisreggae, logiquement tu ne devrai avoir que la vue qui est renvoyée

duffJohn
Auteur

Enfait la fonction thisisreggae permet aussi de m'afficher ma page appelé thisisreggae qui contient l'ensemble de la page dont les disque et la pagination :s
Donc si dans le controlleur je met $this->layout = false, tout va péter...

Peut on lui dire la même chose depuis un link?

ok pas sur que ça fonctionne mais essai

<?php
if($this->request->is('ajax'))
    $this->layout=false;
duffJohn
Auteur

Oui et non enfait.
La mise en page n'est plus bonne mais toutes les infos reviennent quand meme comme le slide de disque, la presentation textuel de celui-ci... :s