Bonjour,

Je suis actuellement en train de créer un blog avec une architecture MVC. Je souhaite faire une sorte d'index qui affiche tous mes articles, mais à la place de mettre une pagination, j'ai décidé de faire un scroll infini avec JQuery. Le soucis c'est que j'ai quelque problème avec mon script qui au lieu de me retourner les articles au fur et a mesure du scroll, celui ci(le script) me fait une sorte d'inception de page(il m'affiche le contenu de la page plein de fois).
Même si je n'aime pas foutre des blocs de codes complet, je vais fournir quelque parti afin de comprendre mon problème.

Voici ma vu qui comporte le script JQuery et l'affichage des articles (appelé post)

<script>
    $(window).scroll(function(){
        var offset = $('#container_01_block a:last').offset();
        if($(window).scrollTop()+ $(window).height() > $(window).height())
        {
            $("#loader").show();
            $.ajax({
                url : "?lastid="+ $("#container_01_block a:last").attr("id"),
                success : function(html)
                {
                    $("#content").append(html);
                    $("#loader").hide();

                }
            });
        }
    });
</script>
<div id="content">
<?php
foreach ($posts as $k => $v) {
?>
    <div id="container_01_block">
        <div id="categ"><a href="<?php echo Router::url("categorie/$v->categorie_id");?>"><?php echo strtoupper($v->categorie_name);?></a></div>
        <h2><?php echo $v->name; ?></h2><br/>
        <cite>le <?php echo $v->created;?></cite> par <strong><?php echo $v->user_id;?></strong><br/>
        <?php echo $v->intro;?>
        <a id="<?php echo $v->id ?>" href="<?php echo Router::url("posts/view/id:{$v->id}/slug:$v->slug");?>">Lire la suite →</a>
    </div>
<?php
}
?>
    <div id="loader">
        <img src="http://www.bandedessinee.info/zone/templates/tmpl_tc/images/loading.gif" alt="loader" title="" />
    </div>

Voici le Controller avec la méthode Index qui dois récupérer le dernier id affiché:

<?php 
class PostsController extends Controller{

    function index(){
        $perPage = 2;
        $this->loadModel('Post');
        if (isset($this->request->lastid)) {
            $conditions = array('online' => 1, 'type' => 'post', 'id <'=>($this->request->lastid));
        }
        else{
            $conditions = array('online' => 1, 'type' => 'post');
        }
        $d'posts'] = $this->Post->find(array(
            'conditions' => $conditions,
            'limit' => '0,'.$perPage

        ));
        $this->loadModel('User');
        $this->loadModel('Categorie');
        foreach ($d'posts'] as $k => $v) {
            $user_name = $this->User->findFirst(array(
                'fields' => 'login',
                'conditions' => array('id' =>$d'posts']$k]->user_id )
            ));
            $categ_name = $this->Categorie->findFirst(array(
                'fields' => 'name',
                'conditions' => array('id' =>$d'posts']$k]->categorie_id )
            ));
            $d'posts']$k]->categorie_name = ucfirst($categ_name->name);
            $d'posts']$k]->user_id = ucfirst($user_name->login);
            $d'posts']$k]->created = date('d-m-Y à H:i',strtotime($d'posts']$k]->created));
        }
        $d'total'] = $this->Post->findCount($conditions);
        $d'page'] = ceil($d'total']/$perPage);
        $this->set($d);
    }
}

Voila j'espère avoir bien exposé mon problème est qu'une solution existe

Merci d'avance :)

1 réponse


Bonjour,
demandes-toi ce que contient la variable js html ..
Tu devrais comprendre le soucis.
(fait un petit console.log(html) ou alert(html) tu verras par toi même ce qu'il se passe