Bonjour à tous,

J'ai pas mal retravaillé le MVC du tuto de Graf, et je me posais une question:
Quelle est la logique que l'on devrait adopter pour modifier l'affichage des posts de type post (les news quoi).
Par exemple, on voit très souvent sur les sites l'affichage des dernières news sur la page d'accueil.

Hors ici, l'affichage se fait via une page "actualités", donc comment devrait-on s'y prendre si on souhaite modifier cela?

Merci de m'éclairer!

3 réponses


Tu peux créer un controller "home" par exemple, qui va récupérer les 3 derniers billets, commentaires, produits etc .
En bref, une page d'accueil banal qui te permet en un rapide coup d'oeil de voir les différents modules du site .

Est ce que cela répond à ta question ?

caema
Auteur

Donc, dans ce cas, pour "ajouter" ce module de news, il suffirait de l'inclure dans mon layout par défaut via une condition? (si on est sur la page d'accueil id = 1, on ajoute le module).

A vrai dire j'avais plutôt penser à adapter ce qui a été fait pour les actualités dans le tuto sans trop toucher aux controllers, mais je ne sais pas si c'est possible...
En gros, pouvoir intégrer la vue posts/index, toujours grâce à une condition, dans le layout par défaut.

caema
Auteur

Bon, et bien dans ma vue qui affiche les pages (view/pages/view.php), j'ai laissé la gestion classique des pages, et j'ai ajouté ceci:

<?php 
if ($page->id == 1){
    include_once(dirname( __DIR__ ) .'/posts/index.php');
}
?>

Mon inclusion "fonctionne bien", et le fichier view/posts/index.php est bien inclus.
Pour rappel, voici ce que contient ce fichier:

<div>
    <div class="row">
        <div class="span13">
            <div class="page-header">
                <h1><?php echo isset($title)?$title:'Le blog'; ?></h1>
            </div>
            <?php foreach ($posts as $k => $v): ?>
                <div class="clearfix">
                    <h3><?php echo $v->name; ?><small>,<a href="<?php echo Router::url('posts/category/slug:'.$v->catslug); ?>"><?php echo $v->catname; ?></a></small></h3>
                    <?php echo substr(strip_tags($v->content),0,300); ?>...
                </div>
                <p style="text-align:right"><a href="<?php echo Router::url("posts/view/id:{$v->id}/slug:$v->slug"); ?>">Lire la suite →</a></p>
                <p> </p>
            <?php endforeach ?>
            <div class="pagination">
              <ul>
                  <?php for($i=1; $i <= $page; $i++): ?>
                    <li <?php if($i==$this->request->page) echo 'class="active"'; ?>><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
                  <?php endfor; ?>
              </ul>
            </div>
        </div>
        <?php require('sidebar.php'); ?>
    </div>
</div>

Mais j'ai un paquet d'erreurs:

Undefined variable: posts et Invalid argument supplied for foreach() in... pour la ligne

<?php foreach ($posts as $k => $v): ?>

J'ai également 2 erreurs Object of class stdClass could not be converted to int in... pour cette ligne:

<?php for($i=1; $i <= $page; $i++): ?>

Je comprends bien que le soucis, c'est que j'essaye d'accéder à une vue(posts/index.php) sans passer par son controller puisque je suis sur une action des pages mais... est-ce vraiment impossible à faire?