Bonjour,

Dans le tuto "Développer un site de A à Z : jour 4, Gestion des routes", à l'instant 0:10:18, j'aimerais savoir pourquoi dans ma vue, je récupère non seulement les items de type "post", mais aussi ceux de type "page". Comment fais-tu pour ne sélectionner que les "post" ?
A présent, à l'instant 0:11:34, j'ai donc mes pages, mes posts, et des liens "lire la suite", qui pointent respectivement pour les éléments de type "page" vers "tuto/posts/view/1" et "tuto/posts/view/2", et affichent "page introuvable", et pour les éléments de type "post" vers "tuto/posts/view/3" et "tuto/posts/view/4" et affichent bien les éléments de type "post" correspondants.

Comment ne sélectionner que les éléments de type "post" ?

En effet, dans le fichier ".../view/posts/index.php", j'ai :

<div class="page-header">
    <h1>Le blog</h1>
</div>
<?php foreach ($posts as $k => $v): ?>
<div class="container">
    <h2><?php echo $v->name; ?></h2>
    <?php echo $v->content; ?>
    <p><a href="<?php echo BASE_URL.'/posts/view/'.$v->id; ?>">Lire la suite →</a></p>
</div>
<?php endforeach ?>

(le HTML est légèrement différent de la vidéo, tout simplement parce que je n'avais pas le même résultat à l'écran en raison des changements du nom des classes dans bootstrap)
et dans PostsController.php, j'ai :

<?php 
class PostsController extends Controller{
    function index(){
        $this->loadModel('Post');
        $d'posts'] = $this->Post->find(array('online' => 1,'type' => 'post'));
        $this->set($d);
    }
    function view($id){
        $this->loadModel('Post');
        $d'page'] = $this->Post->findFirst(array(
            'conditions' => array('online'=>1,'id'=>$id,'type' => 'post')
        ));
        if(empty($d'page'])){
            $this->e404('Page introuvable');
        }

        $this->set($d); 
    }
}

2 réponses


Markos
Auteur
Réponse acceptée

J'ai trouvé l'erreur :

dans mes fonctions "view(), getMenu() et index(), j'ai oublié plusieurs fois une partie du code, en m'emmêlant les pinceaux avec les différents "array" :
au lieu d'écrire

$d'posts'] = $this->Post->find(array(
    'conditions'=>array('online' => 1,'type' => 'post')));

qui est correct, j'avais :

$d'posts'] = $this->Post->find(array(
    'online' => 1,'type' => 'post')));

où j'ai téléscopé les deux occurrences de "array", et, du coup, escamoté les "conditions" !
CQFD. Voilà...

Markos
Auteur

J'ajoute un élément : je m'aperçois que sur la barre de navigation, c'est l'inverse : les liens correspondant aux éléments de type "post" ne mènent nulle part, et les liens correspondant aux éléments de type "page" fonctionnent correctement. En effet, ces liens pointent respectivement vers "tuto/pages/view/3" et "tuto/pages/view/4".

Tout cela semble dû au fait que l'id est auto-incrémentée normalement, et que nous avons une page avec id=1, une autre page avec id=2, mais que id=3 et 4 correspondent à des posts. Or, quelque part dans mon code, lorsque je récupère les éléments de ma base de données, la redirection ne se fait pas différemment selon le type.

Alors ? Où ai-je raté quelque chose ? Dans mes fichiers (mais où ?) ? Dans ma base de données ?