Slaut,
j'ai un probléme lors de affichage des articles pour la modification dans la view admin_index (http://localhost/Site/cockpit/posts/index)
il n'y a d'affichage des article seulement que le nombre de article et aussi ni les liens de suppression ou de édition
voici mon code

<div class="page-header">
    <h1><?php echo $total; ?> Article</h1>
</div>
<table>
    <thead>
        <tr>
            <th>ID</th>

            <th>Titre</th>
            <th>Content</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($posts as $k => $v):?>
        <tr>
            <td><?php echo $v->id; ?> </td>
            <td><?php echo $v->name; ?> </td>
            <td>
                <a href="<?php echo Router::url('admin/posts/edit/'.$v->id); ?>">Editer</a>
                <a href="<?php echo Router::url('admin/posts/delete/'.$v->id); ?>">Supprimer</a>
            </td>
        </tr>
    <?php endforeach; ?>
    </tbody>

</table>

merci en avence

12 réponses


Xtr3me
Réponse acceptée

Tu t'es trompé:

'limit'=>($perPage*$this->request->page=1).','.$perPage

Devient:

'limit'=>($perPage*($this->request->page - 1)).','.$perPage

Bonjour

Je ne comprend pas vraiment la question mais ma première observation est celle ci : 4 fois <th> et 3 fois <td>. Je ne pense vraiment pas que ça soit le problème mais tu peux toujours essayer. Ta variable $posts est probablement vide, tu pourrais voir si debug($posts) te retourne null. Peut-être que tu as mal envoyé la variable à partir de ton controlleur ? À toi de voir maintenant. :-)

Bonne chance.
Ramz.

Salut,
@ Ramzz1994 Si je fais debug($posts); aprés le tableau
C:\wamp1\www\Site\View\posts\admin_index.php l .30

C:\wamp1\www\Site\Core\Controller.php l.32
C:\wamp1\www\Site\Core\Dispatcher.php l.19
C:\wamp1\www\Site\Webroot\index.php l.10
Array
(
)
si dans le tableau rien ne change (c'est a dire dan la boucle ) aucun affichage
aidez moi svp

Tu dois mal récupérer tes articles montre nous le controller correspondant il faut que tu stockes le tout dans un tableau et que tu l'envoie à la vue avec la fonction set. Admettons un tableau $d'posts'] tu fais un $this->set($d); pour envoyer à la vue tout le tableau $d.
Chaque indice sera convertis en variable dans la vue la variable $posts sera donc définis.
Si tu fais un debug($this) tu verras ce qui est disponible dans la vue.

@Ramz: Avoir 4 Th et 3 TD ne posera aucun problème au niveau php... ni même récupération du contenu c'est du simple html de base pour faire des tableaux s'il y a moins de TD que de TH il y aura décalage des colonnes tout simplement donc un problème d'affichage mais rien de plus.

voici mon controller.php

<?php
class Controller{
    public $request;
    private $vars= array( );
    public $layout='default';
    private $rendered=false;

    function __construct($request=null){
        if($request){
        $this->request=$request;
        }

    }
    public function render($view)
    {
        if($this->rendered){return false;}
        extract($this->vars);
        if(strpos($view, '/')===0){
            $view= ROOT.DS.'view'.$view.'.php';

        }else{
            $view= ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
        }

        ob_start();
        require($view);
        $content_for_layout=ob_get_clean();
        require ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php';
        $this->rendered=true;
    }
    public function set($key ,$value=null){
        if(is_array($key)){
        $this->vars +=$key;
    }else{
        $this->vars$key]=$value;
        }
    }

    function loadModel($name)
    {
        $file=ROOT.DS.'model'.DS.$name.'.php';
        require_once($file);
        if(!isset($this->$name))
        {
        $this->$name= new $name();
         }

    }
    //Permet de gerer les erreur 404 
    function e404($message){
      header("http://1.0 404 Not Found");
      $this->set('message',$message);
      $this->render('/error/404');
      die();
    }

    //permet d'appler un controller de puis une view
    function request($controller,$action){
        $controller .='Controller';
        require_once ROOT.DS.'Controller'.DS.$controller.'.php';
        $c=new $controller;
        return $c->$action();

    }
    function redirect($url,$code = null){
        if($code==301){
            header("HTTP/1.1 301 Moved Permanently");
        }
        header("location: ". Router::url($url));
    }

}

?>

Je parlais du controller gérant l'administration pas du controller principal qui lui met à disposition des fonctions ;) .

@Xtr3me dans la première fois j'ai 2 article dans ma base de donneés le lien /Site/cockpit/posts/index affiche seulement un seul article aprés la suppression de l'article je tombe dans se problémm d'affichage
rq: rien changé dans la vue admin_index

Je vais pas pouvoir t'aider sans le code approprié... ensuite si tu n'as qu'un article sur les deux regardes du côté du type dans la bdd.

<?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,$slug){
    $this->loadModel('Post');
    $condition=array('online'=>'1','id'=>$id,'type'=>'post');
    $d'post']=$this->Post->findFirst(array(
        'fields'=>'id,slug,content,name',
        'conditions'=>$condition));

    if(empty($d'post'])){
        $this->e404('Page Introvable');
    }

    //if ($slug!=$d'post']->slug) {
            //$this->redirect("posts/view/id:$id/slug:".$d'post']->slug,'301');
    //}
$this->set($d);

}
/**
**admin
*/
function admin_index(){
        $perPage=10;

        $this->loadModel('Post');
        $condition=array('type'=>'post');
        $d'posts']=$this->Post->find(array(
            'fields'=>'id,name,online',
        'conditions'=>$condition,
        'limit'=>($perPage*$this->request->page=1).','.$perPage

        ));
        $d'total']=$this->Post->findCount($condition);
        $d'page']=ceil($d'total'] /$perPage);
                $this->set($d);

}
//Permet de suprimer un article 
function admin_delete($id){
    $this->loadModel('Post');
    $this->Post->delete($id);
    $this->redirect('admin/posts/index');
}

}
?>

Si je mettre $perPage=1; il m'affiche que un seul article mais mois j'ai 3 article si je change par 10 aucun affichage

Exactement Xtr3me aussi mon système de pagination fonction trés bien a ci pour grand merci pour vous ++++++

De rien ;) .
Quand tu as un problème qui change de comportement par rapport à la valeur d'une variable, vérifie toutes les lignes où cette variable est utilisé, simple conseil pour débugger.