7
votes

Générer la navigation à partir d'une matrice multidimensionnelle

La question: Comment générer la navigation, permettant d'appliquer différentes classes à différents sous-éléments, d'un tableau multidimensionnel? strong>

Voici comment je le faisais avant d'avoir eu Tout besoin de navigation multi-niveaux: p> xxx pré>

et a été généré par appel de navigation (): p> xxx pré>

ici est Buildlinks (): p> xxx pré>

ma question, encore une fois: strong> p>

Comment puis-je réaliser la valeur liquidative suivante (et avis que les éléments de sous-navigation visibles ne sont présents que sur cette page spécifique): p> xxx pré>

et ... p> xxx pré>


ce que j'ai essayé fort> p>

de la regarder, il semblerait que certains itérateurs dans le SPL seraient un bon ajustement, mais je ne sais pas comment approcher cela. J'ai joué avec Revursiveiteratère, mais je ne sais pas comment appliquer un style différent sur uniquement les éléments du sous-menu et comment montrer ces éléments que si vous êtes sur la bonne page. P>

J'ai construit cette Array pour tester mais ne sait pas comment travailler avec les éléments sous-menu1 individuellement: p> xxx pré>

Les suivants imprimeront le lot en ordre mais comment puis-je postuler, disons un nom de classe aux éléments sous-menu1 ou ne les montrer que lorsque la personne est allumée, disons, la page "Accueil"? P>

Home
something1
something2
Pics
About


0 commentaires

7 Réponses :


1
votes

On dirait que vous voudrez peut-être faire cela de manière plus orientée objet. Sinon, on dirait que vous devriez au moins définir un algorithme qui a du sens, vous êtes maintenant aveugle de deviner aveuglément. Au lieu de cela, définissez.

Par exemple:

Je défini ma navigation pour être un arbre à base de hasch PHP. Un élément de navigation aura les suivants:

a) S'il y a un lien de niveau supérieur, le hachage de tableau contiendra un élément (sous réseau) marqué "feuille de navigation"

B) Une feuille de navigation contiendra des éléments étiquetés "Valeur d'affichage", "Valeur de liaison" et "Valeur Alt". Ces articles seront utilisés pour générer une balise d'ancrage.

c) Si un élément comporte un sous-menu, en plus de contenir une "feuille de navigation", un élément "de sous-navigation" sera présent. Un élément de sous-navigation aura une "feuille de navigation" s'il a un élément de navigation affichable.

Vous pouvez ensuite écrire des fonctions / méthodes qui afficheront votre navigation en fonction de la définition que vous choisissez.


0 commentaires

1
votes

Ce que je ferais, c'est quelque chose dans ces lignes: xxx pré>

puis, tout ce que vous avez est une collection d'éléments de menu racine dans une matrice ... pour construire votre menu, vous venez de construire votre menu. FAIRE: P>

$rootItems = array($item1, $item2);
$out = '<ul>';
foreach ($rootItems as $item) {
    $out .= (string) $item;
}
$out .= '</ul>';


0 commentaires

1
votes

Qu'en est-il de la fonction de réwrite NAV à la prochaine manière: xxx

et que l'appelez-le: xxx


0 commentaires

1
votes

Le moyen le plus simple, IMHO, est de simplement effectuer un appel récursif et d'utiliser une description structurée de l'arbre de votre navigation (c'est-à-dire des tableaux imbriqués). Exemple non testé Code: xxx


0 commentaires

3
votes

Ne réinventez pas la roue, utilisez Zend_navigation et vous sera heureux.


3 commentaires

L'utiliser à l'extérieur du domaine de tout le cadre semble moins que facile. Quoi qu'il en soit plus délicat que d'utiliser d'autres composants tels que le courrier ou le journal.


Maintenant que je l'ai examiné en profondeur, il ne semble pas possible d'intégrer Zend_navigation sur un site sans utiliser la totalité des composants MVC de ce cadre. Corrige moi si je me trompe.


Si vous n'avez pas à utiliser des modèles et des contrôleurs Zend. Vous n'avez même pas besoin d'utiliser la vue, mais dans ce cas, vous devez faire quelques astuces pour utiliser facilement Zend_View_Helper_navigation, qui constitue une partie importante de Zend_navigation.



1
votes

Vous étiez sur la bonne voie avec Récursiveiteratoriterator. Il aplatit essentiellement un itérateur récursif. Voici la bonne façon: xxx

donne xxx


0 commentaires

1
votes

@catchmeifyOréy

Merci, vous avez sauvé ma vie lol. P>

J'ai changé votre fonction un peu pour l'adapter à mon utilisation et cela est sorti: P>

$html['navi'] = array(
    "Home"          => "/home/",
    "DJs & Shows"   => "/djs-shows/",
    "Playlists"     => "/playlists/",
    "Newsbeat"      => "/newsbeat/",
    "Reviews"       => "/reviews/",
    "TV"            => "/tv/",
    "Contact"       => "/contact/",
    "Test"          => array("/test/",
        array("Submenu 1" => "/test/link1",
            "Submenu 2" => "/test/link2",
            "Submenu 3" => "/test/link3",
            "Submenu 4" => "/test/link4",
            "Submenu 5" => "/test/link5",
            "Submenu 6" => "/test/link6"
        )
    )
);

$classes = array(
    'first-level',
    'second-level',
    'third-level',
);

function siteNavi($links, $classes) {
    // The best way for MultiArray navigation (LOVE IT!)
    // Array Shift selects first element and removes it from array
    $class = array_shift($classes);

    echo "<ul class=\"$class\">\n";

    foreach($links as $name => $link) {

        if (is_array($link) AND $class != "") {

            list($link, $sublinks) = $link;
            if ($_GET['site'] == basename($link)) { $selected = ' class="current"'; } else { $selected = ""; }

            echo "<li{$selected}><a href=\"{$link}\">{$name}</a>\n";
            // recursively show subitems
            // NOTE: path starts now with the selected subitem
            siteNavi($sublinks, $classes);
            echo "</li>\n";

        } else {

            if ($_GET['site'] == basename($link)) { $selected = ' class="current"'; } else { $selected = ""; }

            echo "<li{$selected}><a href=\"{$link}\" >{$name}</a></li>\n";
        }
    }

    echo "</ul>\n";
}


0 commentaires