Voila je fait actuellement le tuto sur le mvc,pour les 3 premier pas de soucis. Mais la j'ai un problème avec la limite d'affichage des posts.
je limite bien a 1 mais tous les posts s'affiche ....
voici le postsController:
<?php
class PostsController extends Controller {
function index(){
$perPage = 1;
$this->loadModel('Post');
$condition = array('online' => 1, 'type'=>'post');
$d'posts'] = $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');
$condition = array('online' => 1, 'id' => $id, 'type' => 'post');
$d'posts'] = $this->Post->findFirst(array(
'conditions' => $condition
));
if(empty($d'posts'])){
$this->e404('Page introuvable');
}
$this->set($d);
}
}
Et ensuite model
<?php
class Model{
static $connections = array();
public $conf = 'default';
public $table = false;
public $db;
public $primaryKey = 'id';
public function __construct(){
/**
* Initialisation de variales
**/
if ($this->table === false) {
$this->table = strtolower(get_class($this)).'s';
}
/**
* Je me connecte à la base
**/
$conf = Conf::$databases$this->conf];
if(isset(Model::$connections$this->conf])){
$this->db = Model::$connections$this->conf];
return true;
}
try {
$pdo = new PDO(
'mysql:host='.$conf'host'].';
dbname='.$conf'database'].';
',$conf'login'],
$conf'password'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
Model::$connections$this->conf] = $pdo;
$this->db = $pdo;
}catch(PDOException $e){
if(Conf::$debug >= 1){
die($e->getMessage());
}else{
die('Impossible de se connecter à la base de donnée');
}
}
}
public function find($req){
$sql = 'SELECT ';
if(isset($req'fields'])){
if(is_array($req'fields'])){
$sql .= implode(', ',$req'fields']);
}else{
$sql .= $req'fields'];
}
}else{
$sql .= '*';
}
$sql .= ' FROM '.$this->table.' as '.get_class($this).' ';
/**
* Construction de la condition
**/
if(isset($req'conditions'])){
$sql .= 'WHERE ';
if(!is_array($req'conditions'])){
$sql .= $reg'conditions'];
}else{
$cond =array();
foreach ($req'conditions'] as $k => $v) {
if(!is_numeric($v)){
$v = '"'.mysql_real_escape_string($v).'"';
}
$cond] = "$k=$v";
}
$sql .= implode(' AND ', $cond);
}
}
if(isset($reg'limit'])){
$sql .= 'LIMIT '.$reg'limit'];
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
public function findFirst($req){
return current($this->find($req));
}
public function findCount($conditions){
$res = $this->findFirst(array(
'fields' => 'COUNT('.$this->primaryKey.') as count',
'conditions' => $conditions
));
return $res->count;
}
}
je ne sais pas si le problème viens d'ailleur,car toute aller bien avant.Enfin si oui dite et je poste le fichier
en cas de changement et de solution... je passerais le post en résolu.
Merci d'avance
Bonjour,
Ton probleme est du je pense à une erreur de frappe.
if(isset($reg'limit'])){
$sql .= 'LIMIT '.$reg'limit'];
}
Dans cette partie de code, tu recherche $reg au lieu de $req , remplace $reg par $req et ça devrait être bon.
Cordialement