Menu Personnalisé sur la base du tuto site de A à Z

Par patou, il y a 13 ans


Je vous mets mes différents fichiers, car j 'aimerais avoir votre opinion sur la methode que j ai employé.
c est a dire :
1- recupération des données et mise en forme en tableau ordonné pour trois niveaux de nenu(fichier \model\menu.php)
2- fonction de recuperation et d envoi vers la vue + fonction d'administration (fichier \controller\menuscontroller.php)
3- récuperation du tableau de données et mise en forme dans la partie navigation du header.php
je me pose des questions, vaut-il mieux recuperer le tableau ordonné en entier ou recuperer les differents niveaux de menus
a la suite des un et des autres au niveau du controller? mon code est tres similaire pour le model et la vue.....
pour ceux qui veulent tester valeur pour level (0,1,2) active et has_children(0,1) button_order(1,2.../par niveau)
le fichier sql
[code]
-- http://www.phpmyadmin.net

-- Client: localhost
-- Généré le: Ven 10 Mai 2013 à 01:35
-- Version du serveur: 5.1.67-community
-- Version de PHP: 5.4.9
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT /;
/!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS /;
/!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION /;
/!40101 SET NAMES utf8 /;

-- Structure de la table menus

CREATE TABLE IF NOT EXISTS menus (
id mediumint(8) NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT NULL,
href varchar(255) DEFAULT NULL,
active tinyint(1) NOT NULL DEFAULT '0',
link_type tinyint(1) NOT NULL DEFAULT '1',
button_order mediumint(8) DEFAULT NULL,
level tinyint(1) NOT NULL DEFAULT '0',
id_parent mediumint(8) NOT NULL DEFAULT '0',
has_children tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=29 ;
/!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT /;
/!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS /;
/!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION /;
[/code]
fichier \model\menu.php
[code]
public $test=array();

var $validate = array(
    'name' => array(
        'rule' => 'notEmpty',
        'message' => 'Vous devez préciser le nom du boutton menu'
    ),
    'button_order' => array(
        'rule' => 'notEmpty',
        'message' => "Vous devez préciser un numero d'ordre"
    ),
    'link_type' => array(
        'rule' => 'notEmpty',
        'message' => 'Vous devez préciser un lien'
    )   
);
/**
* Permet de récupérer le menu de trois niveau dans un tableau ordonné
**/
function niveau(){
    $test['menu0']=  $this->find(array('conditions' => array('level' => 0,'active' => 1),'order'=> 'button_order ASC'));
    foreach($test['menu0'] as $k => $v){
        if($test['menu0'][$k]->has_children == 1){
            $test['menu0'][$k]->menu1 = $this->find(array('conditions' => array('level' => 1,'active' => 1,'id_parent' => $test['menu0'][$k]->id ),'order'=> 'id_parent ASC, button_order ASC'));               
            foreach($test['menu0'][$k]->menu1  as $k1 => $v1){
                if($test['menu0'][$k]->menu1[$k1]->has_children == 1){
                    $test['menu0'][$k]->menu1[$k1]->menu2 = $this->find(array('conditions' => array('level' => 2,'active' => 1,'id_parent' => $test['menu0'][$k]->menu1[$k1]->id ),'order'=> 'id_parent ASC, button_order ASC'));                   
                }
            }   
        }   
    } 
return $test;
}

}

[/code]
fichier menuscontroller.php
[code]
<?php
class MenusController extends Controller{
/**

<table class="table">
<thead>
<tr>
<th>ID</th>
<th>En ligne ?</th>
<th>Nom du Bouton</th>
<th>Lien</th>
<th>Type Lien</th>
<th>Ordre</th>
<th>Niveau</th>
<th>Parent</th>
<th>Enfant</th>
<th>Actions</th>
</tr>
</thead>
<tbody>

    <?php foreach ($menus as $k => $v): ?>
        <tr>
            <td><?php echo $v->id; ?></td>
            <td><span class="label <?php echo ($v->active==1)?'success':'error'; ?>"><?php echo ($v->active==1)?'Actif':'Inactif'; ?></span></td>
            <td><?php echo $v->name; ?></td>
            <td><?php echo $v->href; ?></td>
            <td><span class="label <?php echo ($v->link_type==1)?'success':'error'; ?>"><?php echo ($v->link_type==1)?'Externe':'Interne'; ?></span></td>
            <td><?php echo $v->button_order; ?></td>
            <td><?php echo $v->level; ?></td>
            <td><?php echo $v->id_parent; ?></td>
            <td><?php echo $v->has_children; ?></td>
            <td>
                <a href="<?php echo Router::url('admin/menus/edit/'.$v->id); ?>">Editer</a>
                <a onclick="return confirm('Voulez vous vraiment supprimer ce contenu'); " href="<?php echo Router::url('admin/menus/delete/'.$v->id); ?>">Supprimer</a>
            </td>
        </tr>
    <?php endforeach; ?>
</tbody>

</table>

<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>

<a href="<?php echo Router::url('admin/menus/edit'); ?>" class="primary btn">Ajouter un bouton</a>
[/code]

Aucune réponse