Empfehlungen: Erweiterte Suche

Seiten-Navigation (multi-level?) + Breadcrumb in einem

Anleitungen und Quellcode-Auszüge die den Start vereinfachen sollen.

Seiten-Navigation (multi-level?) + Breadcrumb in einem

Beitragvon euromark » Mo 7. Jul 2008, 21:06

ich habe mir überlegt, eine Seiten-Navigation mit evtl mehreren Sublevels (oder alternativ getrennte Leisten) zu machen
und da man hier die die Tiefe der Links eh in der Datenbank vermerkt, müsste sich doch dadurch recht einfach ne Breadcrumb draus machen lassen

Bsp:

-- /home
-- /profile
-- /profile/edit
---- /profile/showpic
------ /profile/showpic/active
------ /profile/showpic/all
------ /chart
-- /blog
---- blog/delete
---- blog/add

Nun müsste man nur noch bei jedem Eintrag ein Feld mit dem Namen für den Breadcrumb-Link erstellen:

- /blog/delete : Blog -> Löschen
- /chart : Dein Profil -> Zeige Profilbild -> Statisitk-Chart
etc

Letztes Beispiel zeigt, dass nicht immer direkt aus dem Link auf die hirarchie zu schließen ist, insofern ist es dann besser auf automatische Generierung via URI zu verzichten, schätze ich.
Die einzige Ausnahme könnte bei Routern sein - also /admin/.. würde dann automatisch ein "Admin ->" vorschalten etc

gibts da schon Ideen oder Versuche von euch?
ich bin grad dabei das Menü zu erstellen
Zuletzt geändert von euromark am Do 20. Aug 2009, 18:29, insgesamt 1-mal geändert.
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Seiten-Navigation (multi-level?) + Breadcrump in einem

Beitragvon Alex » Di 8. Jul 2008, 07:15

Ich setze meine Breadcrumbs immer manuell. Kann ja auch mal vorkommen, dass in der Breadcrumb was anderes stehen soll, als in der Navigation.

Einfach im entsprechenden View die Crumbs hinzufügen
Code: Alles auswählen
$html->addCrumb('Title', '/link');

und dann im View ausgeben lassen
Code: Alles auswählen
echo $html->getCrumbs(' / ', 'Start');
Alex
 
Beiträge: 120
Registriert: Di 13. Mai 2008, 13:39
Wohnort: Bremen
CakePHP-Version: 1.x.x
OS: OSX / Win 7 / Debian

Re: Seiten-Navigation (multi-level?) + Breadcrump in einem

Beitragvon euromark » Di 8. Jul 2008, 09:34

ok..
aber was, wenn man nun sich entschließt, die navigation zu ändern
dann müsste man die einzelnen views manuell durchgehen

stünde es in der datenbank direkt verknüpft mit der navigations-hirarchie
müsste sich diese änderung doch leichter durchführen lassen, oder?
ich rede deshalb im konjunktiv, weil ich es noch nicht ganz umgesetzt habe

momentan lese ich mit
Code: Alles auswählen
$this->set('test', $this->Navigationtree->findAllThreaded());

im Controller das Array aus der DB

und dann im view das ganze in eine Liste mit bis zu 3 Tiefen:
Code: Alles auswählen
<?
echo '<div class="navi"><ul class="level_0">';
foreach ($test as $tes)
{
    echo '<li>'.$tes['Navigationtree']['title'].'</li>';
    if (count($tes['children'])>0)
    {
        echo '<ul class="level_1">';
        foreach ($tes['children'] as $te)
        {
            echo '<li>'.$te['Navigationtree']['title'].'</li>';
            if (count($te['children'])>0)
            {      
                echo '<ul class="level_2">';
                foreach ($te['children'] as $t)
                {
                    echo '<li>'.$t['Navigationtree']['title'].'</li>';
                }
                echo '</ul>';
            }
                }
        echo '</ul>';
    }
}
echo '</ul></div>';
?>
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Seiten-Navigation (multi-level?) + Breadcrumb in einem

Beitragvon euromark » Di 8. Jul 2008, 22:36

mir ist inzwischen auch eingefallen, wie man die breadcrumb links ganz automatisch damit gleich umsetzen kann
ohne sie manuell in jedem view reinzuschreiben

vorrausgesetzt es gibt eine art "rückwärts findAllThreated()!
also eine Funktion, die rekursiv von unten nach oben ausliest

bsp:
wir haben den pfad
/home/users/edit/3

cakephp findet "/home/users/edit/" es in der tabelle der menüeinträge, mit ingesamt 2 parent-einträgen
per left join werden diese quasi rückwärts mit ausgelesen und dann wieder in ein array geschrieben

0 -- /home/users/edit (User editieren)
1 -- /home/users (User)
2 -- /home (Home)

dann wird das array umgedreht

und dann fügt er sie einfach mittels "->" zusammen: Home -> User -> User editieren
ändert man nun /home auf z.b. /start - lässt aber die (Namen), die restlichen Links und die Hirarchieebene gleich,
ist die Breadcrumb-Leiste sofort angepasst - bzw. in dem Fall gleichgeblieben

hat jemand techn. Tipps, wie das z.b. umzusetzen ist?
ich schätze diese reverse threated funktion wird man sich selbst bauen müssen
denn die built in variante benutzt ja id und parent_id, wir brauchen parent_id und id
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows


Zurück zu Tutorials und Snippets

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast