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)
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 <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>Voici le Controller avec la méthode Index qui dois récupérer le dernier id affiché:
Code php : 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 <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>
Voila j'espère avoir bien exposé mon problème est qu'une solution existe
Code php : 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 <?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); } }
Merci d'avance
Partager