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