php Navigation wie SpryNavigation

  • Moin moin,
    ich habe mal ne Frage! Und zwar:
    Gibt es eine Möglichkeit eine Navigation im Prinzip einer sprynavigation nur mit php zu erstellen? Sprich eine Navigation mit Stichpunkten und wenn zu dem einen Unterpunkte sind das die bei hover aufgeblättert werden?
    Wäre nicht tragisch wenn es das nicht gibt, die Sprynavigation habe ich aber ein paar Einstellung die ich gern hätte wollen da irgendwie nicht funktionieren!
    z.B.:

    • Unterscheidung von Links und Überschriften
    • bewegende Grafik (von aktivier Seite zu hover)
    • Unterscheidung von normalem Link und aktiver Seite

    Wenn es geht würde ich mich freuen wenn mir jemand irgendwie nen simples Beispielscript geben könnte!?

    MfG
    Tom

  • Ich Glaub, ich erklär dier erstmal, wie PHP Funktioniert. Wenn du eine Seite aufrufst, z.B. index.html dann Schaut Apache, ob das ne Datei ist, die er ausführen muss. In diesem Fall nicht (Man kann html dateien ausführbar machen, hat aber keinen sinn). Also öffnet Apache die Datei und sendet den inhalt an den Browser - Du bekommst die HTML-Seite angezeigt.
    Ist es aber (z.B.) eine PHP-Datei, geht Apache die von oben bis unten durch, sendet alles was nicht in PHP-Tags steht an den Browser und was in den PHP-Tags steht wird an den PHP-Parser weitergegeben. Und alles echo im PHP wird dann vom parser zurückgegeben und Apache sendet es. Jetzt stell dir mal vor, die das möglich sein, mit PHP bewegte Grafiken zu machen?
    Das war jetzt nicht zur Strafe - nur zur Übung und das du PHP verstehst. Was man mit PHP Machen kann ist die aktuele seite hervorheben, denn das kann man ja beim Seitenaufruf mit einbauen. Allerdings musst du dann deine Links in eine Datenbank speichern.


    Nur die Sprynavigation kannst du mit CSS machen, wenn du es bewegen willst musst du JavaScript verwenden.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Die da dann wären???^^
    Gut, mit der Datenbank ist kein Problem da ich bis zu zwei Datenbanken machen kann mit unbegrenzt Tabellen! Müsste mich dann nur mal in dein Script reinfitzen damit ich verstehe was für was zuständig ist!
    Mit der Hilfe habe ich kein Problem da ich um genau zu sein so viel Ahnung von php hab wie nen Pinguin weiß wie nen Eisbär aussieht!
    Aber kommt mir auch etwas umständlich vor!

    MfG

  • Also für eine Navigation würd ich keine Datenbank bemühen, du kannst, wenn du schon das von Tobse verwenden solltest, direkt die Variable in deine navi.php übernehmen.

    Außer du machst dir n template, dann würd ich dafür eine extra config.php machen.


    Aber da gibts noch andere vorgehensweisen...
    Ne Schleife ist zwar am Sinnvollsten, aber Bedingungen wären auch noch möglich.

    Mal n einfacheres Beispiel mit einer Schleife.

    //p.s. natürlich gibts noch andere Möglichkeiten eine Navi aufzubauen, aber wenn man lernen will, sollte man sich auch was überlegen :P
    Und das Tobse seine Scripte nie testet bevor er sie abschickt, ist hier allen bekannt - also nicht wundern, wenn er da noch ein paar macken hat ;)

    2 Mal editiert, zuletzt von Grevas (24. April 2010 um 11:31)

  • Sicher, man kann die Komplette ausgabe parsen und das prüfen, überall wo href ist. Aber mir schien die DB-Sache einfacher.
    EDIT:
    Ach verdammt *vor den Kopf schlag* Drauf hätte ich auch kommen können....

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Da das Script von Grevas das ist wo ich überhaupt dahinter steige werde ich wenn dann das nehmen! ;)
    Sry ... das andre script ist bestimmt auch toll aber komm nicht ganz rein was da was bedeutet!


    Und jetzt wieder meine typischen ich will sicher gehen Fragen! ;)
    In

    PHP
    $navi = array(
    
    
    );


    gibt man die Navigationsnamen der links ein? Sprich wenn ich

    HTML
    <a href="index.php">Startseite</a>
    <a href="seite2.php">Hallo hier</a>


    als Navigationslinks habe müsste ich dann

    PHP
    $navi = array(
    "Startseite" => "Startseite",
    "Hallo_hier" => "Hallo hier",
    );


    schreiben oder?

    Mit

    PHP
    if($_GET['site'] == $href)


    hole ich mir erst den aktiven Navigations erweiterungslink der Navigation was wir in dem anderen Thema schon hatten!^^ und vergleiche ihn mit allen Navigationspunkten die im array oben stehen! Der Link mit dem es übereinstimmt wird dann class='selected' gesetzt was ich in der css dazu bestimmen muss!?

    das einzige wo ich noch nicht dahinter gekommen bin ist wie ich das dann in meine Navigation einbinde!?

    Bis jetzt habe ich ja:


    das als Navigation! Habe extra das komplexeste raus gesucht! ;)
    Wie müsste ich dann diesen Vergleich ob Aktiv oder nicht einbauen?

    MfG
    Tom

  • Jetzt geht PHP durch das Array, der SChlüsel ("foo"=>"bar") ist der Linkname, der eintrag ("foo"=>"bar") der Seitenname (href). Wenn der ein Array ist, also untermenü, ruft sich die Funktion selbst auf und dann passiert das gleiche. Ist es aber kein Array, sondern Text, wird <li><a href="index.php?site=$href" ausgegeben. Wenn der href = der aktuellen seite ist, wird noch class="active" ausgegeben. Dazu kommt dann noch ></li>. Dann passt das.
    Du kannst beliebig viele untermenüs machen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    3 Mal editiert, zuletzt von Tobse (24. April 2010 um 12:22)

  • Class="selected" hast richtig verstanden. Aber das Array nicht.

    Array(
    "HREF" => "TEXT"
    )

    Das ist der Aufbau in dem Fall (kann man auch tauschen).

    Und wenn du mehrere Navigationen hast mach dir ne Funktion draus.

    //P.S. Tobse, jetzte kommst ihm mit Rekursion - na ob das was wird *G*

    Einmal editiert, zuletzt von Grevas (24. April 2010 um 12:26)

  • Woher die Daten für die Navi kommen ist im Endeffekt egal, wie du es lieber haben willst, mit der DB ist es halt übersichtlicher und leicht zu verändern, wenn man aber nicht viele Links hat oder nur ne kleine Seite ist Array auch voll und ganz in Ordnung


    mfg

  • Wie rum hab ich ja erklärt, aber deine Version würde untermenüs wieder nicht zulassen

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Weiß ich, Verschachtelungen sind auch kein Anfänger-Material ;)
    Die oberen Ebenen aus seinem Code da, warn auch nicht verlinkt.

    @Pion, klar ist es einfacher und immer wieder praktisch - allerdings auch langsamer / ressourcen lastiger.


  • @Pion, klar ist es einfacher und immer wieder praktisch - allerdings auch langsamer / ressourcen lastiger.

    Nicht wirklich, MYSQL hat seit Version 4 nen Query Cache, wenn sich daten also nicht ändern (wie bei Navis) dann liest er aus dem Cache


    mfg

  • HILFE ... :eek::confused::eek::confused::eek:
    Hatte ich nicht eigentlich das Problem?^^
    Also in dem ersten Script ohne db bin ich ja noch halbwegs mitgekommen! Aber jetzt mit $class und was weiß ich sitz ich grad mit acht Fragezeichen da und gleich kommt die Feuerwehr weil mein internes Kühlsystem nimehr funktioniert!
    Wie gesagt ich bin php absoluter anfänger! ;)

    Es wäre also sehr freundlich wenn irgendeine Art der Erklärung noch dazu kommt sowas wie:
    array ist für ... da und da wird ... eingetragen!
    oder einfach gleich in die scripts einbasteln sowas wie Lückenfüller die danach übersetzt werden!
    so ähnlich wie:

    PHP
    $navi = array( 
    "{xyz}" => "{xyz}", 
    "{x_y_z}" => "x y z" 
    );


    xyz sind dann durch die jeweiligen bedeutungen zu ersetzen!^^

    Mir bringt das Script ja nichts wenn ich es nicht verstehe und somit keine Anpassungen vornehmen kann!
    Achja, und wenn irgendein Script was nicht ermöglicht dann bitte dazu sagen! Besonders wenn es nicht ermöglichen würde das wie in meiner jetzigen sprynavi unterpunkte aufgeklappt werden oder so!

    Und weil weiter vorn mal gesagt wurde das so eine ähnliche Navi wie die Sprynavi mit css geht!
    Was wäre dann der Unterschied und wie würde das gehen? Weil ohne Javascript stell ich mir das schwierig vor!?

  • Also ein Array ist was mega cooles, wenn man es richtig einsetzt.
    http://www.php-einfach.de/php-tutorial/php-array.php
    wenn du mein letztes Script nimmst, machst du ein Array, indem der Schlüssel der Linkname ist und der Eintrag der seitenname, der hinterher im GET steht.

    PHP
    $navi=array (
        "NAME"=>"SEITENNAME"
    );

    Das wird dann zu

    HTML
    <ul>
     <li>
      <a href="index.php?site=SEITENNAME">NAME</a>
     </li>
    </ul>

    verarbeitet. Wenn du jetzt zu einem Menüpunkt ein untermenü willst, machst du den eintrag einfach auch zu einem Array, das ist dann genau gleich aufgebaut.

    wird dann zu

    </ul>

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Ist das so richtig? Oder fehlt da noch irgendwas?

    So eine Frage noch, das script dient nicht zur Darstellung der Navigation oder?
    Weil habs hochgeladen mit dem Code der oben steht und es kommt nix!
    http://darkemperor.bplaced.net/filemanager/tplbasis/navitest.php

    Wenn es NICHT zur Darstellung dient dann ist die nächste Frage, wie binde ich es ein? und muss ich gegebenenfalls Variablen anpassen?
    Bis jetzt ist meine Seiten Variable $site

    EDIT:
    Ok, Fehler gefunden, hatte buildNavi($navi) vergessen! ;)
    Jetzt ist nur mein Problem wie ich das in ne entweder Sprynavi bekomme
    ODER
    Ne css gestützte Navi mit Aufklapmenüs wie oben mal erwähnt! Wo ich aber nicht weiß wie es geht!
    Weil nur so als normale Liste siehts erstens blöd aus, zweitens fällt da so eine aktiv/inaktiv Unterscheidung eh nicht wirklich auf!

    MfG
    Tom

  • Ähm, bei mir kommte indeutig was!

    HTML
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title></title>
    <meta name="author" content="">
    <meta name="editor" content="html-editor phase 5">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    <ul><li><a href="index.php?site=home">Burg</a></li><li><a>Herold</a><ul><li><a>April</a><ul><li><a href="index.php?site=15042010">15.04.2010</a></li><li><a href="index.php?site=18042010">18.04.2010</a></li><li><a href="index.php?site=19042010">19.04.2010</a></li></ul></li></ul></li><li><a href="index.php?site=regeln">Gildengesetze</a></li><li><a href="index.php?site=mitglieder">Gottesboten</a></li><li><a href="index.php?site=raenge">Gildenränge</a></li><li><a href="index.php?site=diplo">Diplomatie</a></li><li><a href="index.php?site=formulare">Formulare</a></li><li><a href="index.php?site=chat">Gildenchat</a></li></ul></body>
    </html>

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Hatte ja gesagt das der Fehler gefunden ist! ;)
    Hatte vergessen die function dann auch auszuführen!
    ...
    Jetzt zum nächsten dabei, wie bekomme ich das jetzt entweder über ne Spry oder css Navi hin? Sprich wie bekomme ich da dann noch rein das der die unter und unter-unter punkte nicht anzeigen soll sondern nur bei mouseover aufklappt!?
    Weil in ne Spry bekomme ich es ja eher nicht da ich keine class eigenschaften für überschriften rein bekomme, weil das sortierkriterium ja aktiv ist und nicht überschrift oder link!

  • Oh, hatte warscheinlich den neuen post begonnen befor ich dein update gesehen habe.
    Das mit dem CSS kannste so machen

    Code
    #navi ul li ul {
        display: none;
        position:absolute;
    }
    #navi ul li:hover ul {
        display: block;
    }


    Musste halt n bissle stylen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Danke, ...
    Das mit stylen ist ja kein Thema, da find ich schon paar sachen! Aber das script ist bedeutend kürzer als ne Sprynavi! ;)
    Einzige wäre noch:
    Wenn ich ein untermenü unter nem untermenü machen will müsste dann noch:

    HTML
    #navi ul li ul li ul{
        display: none;
        position:absolute;
    }
    #navi ul li ul li:hover ul{
        display: block;
    }


    dazu oder? Und für jedes weiter menü halt weiter so!