Bonjour à tous,

Voilà j'ai bien suivi le tuto en entier sur le MVC de a -> z, je suis entrain de faire des modifs dessus pour que le design (bootstrap twitter) corresponde plus à ce que je veux comme base.

Dans la partie admin j'ai rajouter une barre de navigation :

<ul class="breadcrumb">
  <li><a href="#">Home</a> <span class="divider">/</span></li>
  <li><a href="#">Middle page</a> <span class="divider">/</span></li>
  <li><a href="#">Another one</a> <span class="divider">/</span></li>
  <li class="active">You are here</li>
</ul>

et pour qu'il m'affiche ce que je veux j'ai fait ceci :

<ul class="breadcrumb">
<?php
$menu = $_SERVER'PATH_INFO'];
if (isset($id)){
  $a = $id;
}else{
  $a = '';
}
if ($menu == '/cockpit') {
  echo '<li class="active">Administration <span class="divider">/</span></li>';
}
elseif ($menu == '/cockpit/posts/index'){
  echo '<li><a href="' . Router::url('admin') . '">Administration</a> <span class="divider">/</span></li>
        <li class="active">Gestion des Articles <span class="divider">/</span></li>
  ';
}
elseif ($menu == '/cockpit/posts/edit'){
  echo '<li><a href="' . Router::url('admin') . '">Administration</a> <span class="divider">/</span></li>
        <li><a href="' . Router::url('admin/posts/index') . '">Gestion des Articles</a> <span class="divider">/</span></li>
        <li class="active">Ajouter un article</li>
  '; 
}elseif ($menu == '/cockpit/posts/edit/' . $a){
  echo '<li><a href="' . Router::url('admin') . '">Administration</a> <span class="divider">/</span></li>
        <li><a href="' . Router::url('admin/posts/index') . '">Gestion des Articles</a> <span class="divider">/</span></li>
        <li class="active">Edition de l\'article : "' . $this->request->data->name . '"</li>
  '; 
}
?>
        </ul>

C'est pas très joli je pense que l'on pourrait passer par une fonction mais je vois pas comment faire car je voudrai faire la même chose pour la partie site aussi ...

Donc si vous avez des idées pour me mettre sur la voie.

Cordialement

9 réponses


Bahamut45
Auteur
Réponse acceptée

Merci Mikachu, j'ai gardé mon systeme car j'ai besoin de renommer les noms qui sont dans l'url.

Je vous met ma dernière version pour le partage.

admin_index.php :

<ul class="breadcrumb">
    <?php $breadcrumb = $this->request('Posts', 'breadcrumb'); ?>
    <?php foreach($breadcrumb as $k => $v) : ?>
        <?php if (!empty($v)): ?>
            <?php if ($_SERVER'PATH_INFO'] == $v): ?>
                <li <?php if($_SERVER'PATH_INFO'] == $v) echo 'class="active"'; ?>><?php echo $k; ?></li>
            <?php else: ?>
                <li><a href="<?php echo Router::url($v); ?>"><?php echo $k; ?></a> <span class="divider">\</span></li>
            <?php endif ?>
        <?php endif ?>
    <?php endforeach; ?>
</ul>

PostsController.php

function breadcrumb() {
        $breadcrumb = explode('/', trim($_SERVER'PATH_INFO'], '/'));
        if (end($breadcrumb) == 'posts') {
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'','Gestion des Articles' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'');
        }elseif (end($breadcrumb) == 'index') {
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'','Gestion des Articles' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'');
        }elseif (end($breadcrumb) == 'edit') {
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'','Gestion des Articles' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'','Ajouter un article' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'/'.$breadcrumb[2].'');
        }elseif (is_numeric(end($breadcrumb))) {
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'','Gestion des Articles' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'','Edition de l\'article' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'/'.$breadcrumb[2].'', $breadcrumb[3] => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'/'.$breadcrumb[2].'/'.$breadcrumb[3].'');
        }else{
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'');
        }
        return $breadcrumb;
    }

Cordialement

Personne n'as d'idée ?

Salut,

Tu pourrais faire un Element à la manière de Cake?

Bonjour extrarox, je suis désolé mais je ne connais pas Cake donc je ne vois pas de quoi tu parle ;)

Sans réfléchir je penses que tu devrais faire comme pour le menu dans default.

<?php $breadcrumb = $this->request('Posts', 'breadcrumb'); ?>
<?php foreach($breadcrumb as $k => $v) : ?>
<li><a href="#"><?php echo $v; ?></a> <span class="divider">/</span></li>
<?php endforeach; ?>

Ensuite tu créer une fonction breadcrumb qui recupere les infos du path:

function breadcrumb() {
    // Je te laisse faire. Mais en attaquant $this->request ça devrait le faire.
    // du style :
    $breadcrumb = explode('/', trim($_SERVER'PATH_INFO'], '/'));
    return $breadcrumb;
}

Dans l'immédiat je le verrais comme ça. Peut être je me trompe

Merci pour cette élément de réponse, ton système fonctionne par contre je vois pas pour récuperer les urls de chaques éléments ?

Si je ocmprends ce que tu demande c'est pour les liens ?

Si oui tente ceci dans le default.php:

<?php $breadcrumb = $this->request('Posts', 'breadcrumb');
$link = '';
foreach($breadcrumb as $k => $v) :
$link .= $v.'/'; ?>
<li><a href="<?php echo Router::url($link); ?>"><?php echo $v; ?></a> <span class="divider">/</span></li>
<?php endforeach; ?>

Un truc dans le genre. La ça fait un peu sale mais ça devrait fonctionner je penses. A toi de remettre ça plus propre.

Hum si on fait ça il n'y aura pas de récursivité exemple :

$v ='cockpit' //est égale à une valeur du tableau créer par l'explode
//alors que l'on devrait avoir pour les liens des valeurs comme ceci
$v='cockpit/posts/edit' // or avec l'explode ce n'est pas possible

Donc voila ce que moi j'ai fait c'est pas encore propre mais bon ça fonctionne :

Parti admin_index.php :

<ul class="breadcrumb">
    <?php $breadcrumb = $this->request('Posts', 'breadcrumb'); ?>
    <?php foreach($breadcrumb as $k => $v) : ?>
        <?php if (!empty($v)): ?>
            <li><a href="<?php echo Router::url($v); ?>"><?php echo $k; ?></a> <span class="divider">\</span></li>
        <?php endif ?>
    <?php endforeach; ?>
</ul>

Parti PostsController.php :

function breadcrumb() {
        // Je te laisse faire. Mais en attaquant $this->request ça devrait le faire.
        // du style :
        $breadcrumb = explode('/', trim($_SERVER'PATH_INFO'], '/'));
        if (end($breadcrumb) == 'posts') {
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'','Gestion des Articles' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'');
        }elseif (end($breadcrumb) == 'index') {
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'','Gestion des Articles' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'');
        }elseif (end($breadcrumb) == 'edit') {
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'','Gestion des Articles' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'','Ajouter un article' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'/'.$breadcrumb[2].'');
        }elseif (is_numeric(end($breadcrumb))) {
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'','Gestion des Articles' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'','Edition de l\'article' => '/'.$breadcrumb[0].'/'.$breadcrumb[1].'/'.$breadcrumb[2].'/'.$breadcrumb[3].'');
        }else{
            $breadcrumb = array('Administration' => '/'.$breadcrumb[0].'');
        }
        return $breadcrumb;
    }

Si tu as une idée pour que ça soit plus propre je suis preneur xD

Bon tiens du coup je me suis amusé à me le faire pour moi aussi je te file mon code. A toi de voir si y a moyen de l'améliorer.

Fichier Conf.php :
Ajouter

Router::connect('blog', 'posts/index');

Fichier default.php :

<?php $breadcrumb = $this->request('Societes', 'getBreadcrumb'); ?>
<?php $link = ''; ?>
<ul class="breadcrumb">
    <?php foreach($breadcrumb as $k => $v) : ?>
        <?php $link .= $v.'/'; ?>
        <li><a href="<?php echo Router::url($link); ?>"><?php echo $v; ?></a> <span class="divider">/</span></li>
    <?php endforeach; ?>
</ul>

Dans Fichier PostsController.php :

function getBreadcrumb() {
    if(isset($_SERVER'PATH_INFO'])) {
        $url = trim($_SERVER'PATH_INFO'], '/');
    } else {
        $url = '';
    }
    $breadcrumb = explode('/', $url);
    return $breadcrumb;
}

Pour moi ça fonctionne :)

****************************************************************************************************

Pour la partie Admin a mon avis fais la meme chose, mais tu ajoutes le breadcrumb dans le layout admin. Avec une autre fonction admin_getBreadcrumb par exemple.