Salut la compagnie,

Tout d'abord, un grand respect pour ce site et il y'a du travail ! J'adore.

Bon j'ai un problème. Je code habituellement en PHP sans Objet et ce tuto m'a donné l'envie de m'y lancer. Pour le moment tout fonctionne mais j'aimerais afficher dans une nouvelle page avec un nouveau contrôleur et une nouvelle view des articles appartement qu'a une catégorie. Oui, j'ai créé dans la Base posts une entrée 'id_cat' et 'category'.

La ou je bloque, c'est créer la bonne boucle pour n'afficher par exemple que les catégories 'Enfants', son slug 'enfants',son id et id_cat '5'.

Je vous montre certains de mes fichiers hébergé sur un serveur mutualisé :

webroot/index.php

<?php
define('WEBROOT',dirname( __FILE__ )); 
define('ROOT',dirname(WEBROOT)); 
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'core');
define('BASE_URL','http://monsite.com'); 
// define('BASE_URL',dirname(dirname($_SERVER'SCRIPT_NAME']))); 
if (!isset($_SERVER'REQUEST_URI'])) {
    $_SERVER'REQUEST_URI'] = '';
}
$_SERVER'PATH_INFO'] = substr(urldecode($_SERVER'REQUEST_URI']),-strlen($_SERVER'REQUEST_URI'])+0);
require CORE.DS.'includes.php'; 

new Dispatcher(); 
?>
</div>

config/conf.php

class Conf{

    static $debug = 1; 
    static $databases = array(
        'default' => array(
            'host' => '',
            'database'  => '',
            'login' => '',
            'password'  => ''
        )
    );

}

// Routeur principale des liens du site 
Router::connect('category/:slug-:id', 'categories/index/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect('category/:action','categories/:action');
Router::connect('category/','categories/index');
Router::connect('category','categories/index');
Router::connect('activity/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect('activity/:action','posts/:action');
Router::connect('home','posts/view/');
Router::connect('home','posts/');
Router::connect('home','posts');

Comme vous voyez, je veux afficher toutes les activités à cette adresse url: http://monsite.com/category/enfants-5

Donc j'ai créé un controleur controller/CategoriesController.php

<?php 
class CategoriesController extends Controller{

    public $layout = 'default-categorie'; // Layout à utiliser pour rendre la vue
    private $id_cat;

    function index(){
        $perPage = 1; 
        $this->loadModel('Post');
        $condition = array('online' => 1,'id_cat'=>$id_cat,'id'=>$id, 'slug'=>$slug); 
        $d'post'] = $this->Post->find(array(
            'conditions' => $condition,
            'limit' => ($perPage*($this->request->page-1)).','.$perPage
        ));
        $d'total'] = $this->Post->findCount($condition); 
        $d'page'] = ceil($d'total'] / $perPage);
        $this->set($d);
    }
    function view($id){
        $this->loadModel('Post');
        $d'post'] = $this->Post->findFirst(array(
            'fields' => 'id,slug,content,name,category,id_cat',
            'conditions' => array('online' => 1,'id_cat'=>$id_cat,'id'=>$id)
        ));
        if(empty($d'post'])){
            $this->e404('Page introuvable'); 
        }
        if($id_cat != $d'post']->id_cat){
            $this->redirect("categories/index/id:$id_cat/slug:".$d'post']->slug,301);
        }
        $this->set($d);
    }

    function getMenu12(){
        $this->loadModel('Post');
        return $this->Post->find(array(
            'conditions' => array('online' => 1,'type'=>'post','id_cat'=>$id_cat)
        ));
    }
    function loadActivite(){
        $this->loadModel('Post');
        return $this->Post->find(array(
            'conditions' => array('online' => 1,'id_cat'=>$id_cat)
        ));
    }

}

La je bloque... Je pense c'est la ou ca ne va pas...

pour finir je vous montre mes deux boucles de ma view/layout/default-categorie.php

<?php $pagesMenu = $this->request('Categories','getMenu12'); ?>
<?php foreach($pagesMenu as $k => $v): ?>
    <h2><?php echo $v->name; ?></h2>
    <?php echo $v->content; ?>
    <p><a href="<?php echo Router::url("posts/view/id:{$v->id}/slug:$v->slug"); ?>">Lire la suite →</a></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>
?>

Je bloque, j'ai beau regarder sur google, dans le forum, je ne trouve aucunes aides... Comme vous voyez, Je Root le maximum de lien, et je protégerai plus tard pour ne pas afficher les erreur de controller/....Controller.php. Je le partegarai en tous cas.

Donc SVP, si vous avez une solution ou besoin d'un autre élément, n'hésitez pas. ;)

++
Maxou

3 réponses


Mikachu
Réponse acceptée

Tout d'abord:

Peux tu essayer de mettre dans les méthodes view - getMenu12 - loadActivite de ton controller/CategoriesController.php :

$this->id_cat

a la pace de :

$id_cat

Ensuite:

Tu initialise nulle part $id_cat. Tente en dure pour commencer, lors de ta déclaration au début en mettant la variable

private $id_cat = '5';

Si ca fonctionne. Il te manquera plus qu'a récuperer la valeur a id_cat et d'initaliser $id_cat dans index comme ca:

$this->id_cat = "recuperation de l'id_cat dans la table";
Maxou79
Auteur
Réponse acceptée

Bon en faites, je me suis rendu compte que je ne travaillais pas avec les bons scripts... J'ai télécharger la dernière source, modifié un peu et j'ai enfin réussi à mes fin. Pour afficher le menu, tout est dans l'ordre, par catégorie parente. Merci à toi Mikachu de ton aide. Maintenant, je vais essayé de trouver un moyen pour un espace membre mais je sens que ca va être compliqué même trop... ++

Maxou79
Auteur

Énorme ce petit MVC maison !!! Mon espace membre arrive à terme. Bon j'ai fait une inscription et une modification des données membre dans les views (pas trop le but du MVC), mais la connexion se fait avec le UsersController et c'est pratique à souhait. Merci Graphikart !!!