• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Navigation includen bei Verschachtelung über etliche Ordner

Bernhard

Neues Mitglied
Hallo @ alle,

ich hätte da mal ein Problem.
Um den Überblick nicht zu verlieren, habe ich meine Seiten in etlichen Ordnern
und möchte jetzt die Navigation includen (die Anleitung von PRM kenne ich...)

Wie lese ich aus, in welchem Ordner sich die Seite befindet und wie verändere
ich dann am sinnvollsten die Links entsprechend?

Außerdem möchte ich die Navigation auch in die Sitemap includen, dort braucht
sie aber andere Klassen, wie mache ich das sinnvoll?

Hier mal ein Ausschnitt, damit eventuell verständlicher wird, was ich vor habe:

Code:
<ul id="navi">
        <li><a href="#">Startseite</a></li>
        <li class="subnavi link1"><span>Ordner 1</span>
            <ul>
                <li class="subnav-1st sub-1st link1-1"><span>Ordner1-1</span>
                    <ul>
                        <li class="subnav-1st"><a href="ordner1/ordner1-1/seite1.php">Seite 1</a></li>
                        <li class="subnav"><a href="ordner1/ordner1-1/seite2.php">Seite 2</a></li>
                        <li class="subnav"><a href="ordner1/ordner1-1/seite3.php">Seite 3</a></li>
                        <li class="subnav"><a href="ordner1/ordner1-1/seite4.php">Seite 4</a></li>
                        <li class="subnav-last"><a href="ordner1/ordner1-1/seite5.php">Seite 5</a></li>
                    </ul>
                </li>
                <li class="subnav"><a href="ordner1/seite1.php">Seite 1</a></li>
                <li class="subnav"><a href="ordner1/seite2.php">Seite 2</a></li>
                <li class="subnav-last sub-last link1-2"><span>Ordner1-2</span>
                    <ul>
                        <li class="subnav-1st"><a href="ordner1/ordner1-2/seite1.php">Seite 1</a></li>
                        <li class="subnav-last"><a href="ordner1/ordner1-2/seite2.php">Seite 2</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li class="subnavi link2"><span>Ordner 2</span>
            <ul>
                <li class="subnav-1st sub-1st link2-1"><span>Ordner2-1</span>
                    <ul>
                        <li class="subnav-1st"><a href="ordner2/ordner2-1/seite1.php">Seite 1</a></li>
                        <li class="subnav"><a href="ordner2/ordner2-1/seite2.php">Seite 2</a></li>
                        <li class="subnav"><a href="ordner2/ordner2-1/seite3.php">Seite 3</a></li>
                        <li class="subnav"><a href="ordner2/ordner2-1/seite4.php">Seite 4</a></li>
                        <li class="subnav-last"><a href="ordner2/ordner2-1/seite5.php">Seite 5</a></li>
                    </ul>
                </li>
                <li class="subnav"><a href="ordner2/seite1.php">Seite 1</a></li>
                <li class="subnav"><a href="ordner2/seite2.php">Seite 2</a></li>
                <li class="subnav-last sub-last link2-2"><span>Ordner2-2</span>
                    <ul>
                        <li class="subnav-1st"><a href="ordner2/ordner2-2/seite1.php">Seite 1</a></li>
                        <li class="subnav-last"><a href="ordner2/ordner2-2/seite2.php">Seite 2</a></li>
                    </ul>
                </li>
            </ul>
        </li>
</ul>
Grüße
Bernhard
 
Werbung:
Also ich würde das vermutlich mit absoluten Pfadangaben machen. z.B. so:
PHP:
<li class="subnav-1st"><a href="http://<?php echo $_SERVER['SERVER_NAME']; ?>/ordner1/ordner1-1/seite1.php">Seite 1</a></li>
Dann würde ich die CSS-Klassen per PHP einfügen
PHP:
if $_SERVER['PHP_SELF'] == "sitemap.php" [
   // Klassen für Sitemap einfügen
}
else {
   // Klassen für alle anderen Seiten einfügen
}
Ich hoffe, ich konnte behilflich sein.

Gruß thuemmy

PS. Wie der Ansatz von prm ist, weiß ich nicht.
 
Also ich würde das vermutlich mit absoluten Pfadangaben machen. z.B. so:
PHP:
<li class="subnav-1st"><a href="http://<?php echo $_SERVER['SERVER_NAME']; ?>/ordner1/ordner1-1/seite1.php">Seite 1</a></li>
Dann würde ich die CSS-Klassen per PHP einfügen
PHP:
if $_SERVER['PHP_SELF'] == "sitemap.php" [
   // Klassen für Sitemap einfügen
}
else {
   // Klassen für alle anderen Seiten einfügen
}
Ich hoffe, ich konnte behilflich sein.

Gruß thuemmy

PS. Wie der Ansatz von prm ist, weiß ich nicht.

Hallo Thuemmy,

das ist schonmal spitze!

PRM legt alle Dateien in einen Ordner, so dass er das Problem mit den
Pfaden nicht hat.
Damit würde ich aber hier gegen die Wand rennen, da es dann keinerlei
Übersicht mehr gäbe...

Das mit den absoluten Pfaden gefällt mir noch nicht so, aber ist vermutlich
der einzige Weg...

Mal ausprobieren...

Grüße
Bernhard
 
Werbung:
Da mir das mit den absoluten Pfaden auch nicht so gefällt, mache ich es wie prm. Allerdings habe ich noch keine Projekte gehabt, die dadurch zu unübersichtlich werden.

Gruß thuemmy

PS. Bitte achte auf die Groß-/Kleinschreibung - thuemmy - zumindest ich, wurde schon immer klein geschrieben.
 
Da mir das mit den absoluten Pfaden auch nicht so gefällt, mache ich es wie prm. Allerdings habe ich noch keine Projekte gehabt, die dadurch zu unübersichtlich werden.

Gruß thuemmy

Hallo thuemmy,

Ich warte jetzt noch kurz ab, ob noch jemand mit der Super-Idee kommt,
ansonsten werde ich es wohl mit absoluten Pfaden machen.

Übersichtlichkeit ist vermutlich auch Geschmacksache, ich hab gerne in der Root
nur das, was unbedingt dort sein muss, einen Ordner für jede Sprache, in diesem
dann z.B. direkt das Impressum und einzelne Ordner für die Hauptthemen...

PS. Bitte achte auf die Groß-/Kleinschreibung - thuemmy - zumindest ich, wurde schon immer klein geschrieben.

Werd mich bemühen! Bin es halt gewohnt, Namen groß zu schreiben, hatte aber
mit Sicherheit nicht vor, Deinen Namen vorsätzlich falsch zu schreiben...
 
Wenn die Verweise absolut sein sollen, kannst du ja einfach ein / davorsetzen, dann geht auch alles von der Wurzel aus.

Hier ein Vorschlag von mir, das ganze relativ zu machen (keine Ahnung, ob der gut ist, nach dem Prinzip habe ich es aber bisher immer gemacht):
PHP:
function toRoot() 
{ 
  $p = './'; 
  for($i=1; $i<substr_count($_SERVER['SCRIPT_NAME'], '/'); $i++) { 
    $p .= '../'; 
  } 

  return $p; 
}
PHP:
<li class="subnav-1st"><a href="<?=toRoot()?>ordner1/ordner1-1/seite1.php">Seite 1</a></li>
 
Werbung:
Hallo BcF,

ich finde die Funktion toRoot() schön. Das gefällt mir.

Gruß thuemmy

Hallo BcF,
hallo thuemmy,

und ich kapiere sie nicht - werde sie morgen mal ausprobieren.
Da ich aber unbedingt PHP lernen und verstehen will, wäre es toll,
wenn sie mir einer von Euch beiden (oder jemand anders) erklären
könnte!

Grüße
Bernhard (dem da einfach Grundlagen fehlen...)
 
Ist eigentlich ganz simpel. Was man wissen muss ist natürlich, dass '.' das aktuelle Verzeichnis ist und '..' das übergeordnete.

Was die Funktion jetzt macht ist, die Slashes im Pfad zur aktuellen Datei zu zählen und für jeden - bis auf einen, weil SCRIPT_NAME mit einem beginnt - eine Ebene höher zu springen.

Das könnte dann für diesen Link zum Beispiel so aussehen:
PHP:
<li class="subnav-1st"><a href="<?=toRoot()?>ordner2/seite3.php">Seite 1</a></li>
  • angenommen, /ordner1/ordner1-1/seite1.php ruft die Funktion wie oben angegeben auf, wegen den 2 '/' gibt sie './../../' zurück. => /ordner1/ordner1-1/./../../ordner2/seite3.php
  • '.' ist das aktuelle Verzeichnis. => /ordner1/ordner1-1/../../ordner2/seite3.php
  • '..' ist das übergeordnete Verzeichnis. => /ordner1/../ordner2/seite3.php
  • Und nochmal einen Schritt höher. => /ordner2/seite3.php
Der Rest sollte klar sein.

Ich hoffe, das ganze ist einigermaßen nachvollziehbar. Erklären ist nicht meine große Stärke ;)
 
Werbung:
Ist eigentlich ganz simpel. Was man wissen muss ist natürlich, dass '.' das aktuelle Verzeichnis ist und '..' das übergeordnete.

Was die Funktion jetzt macht ist, die Slashes im Pfad zur aktuellen Datei zu zählen und für jeden - bis auf einen, weil SCRIPT_NAME mit einem beginnt - eine Ebene höher zu springen.

Das könnte dann für diesen Link zum Beispiel so aussehen:
PHP:
<li class="subnav-1st"><a href="<?=toRoot()?>ordner2/seite3.php">Seite 1</a></li>
  • angenommen, /ordner1/ordner1-1/seite1.php ruft die Funktion wie oben angegeben auf, wegen den 2 '/' gibt sie './../../' zurück. => /ordner1/ordner1-1/./../../ordner2/seite3.php
  • '.' ist das aktuelle Verzeichnis. => /ordner1/ordner1-1/../../ordner2/seite3.php
  • '..' ist das übergeordnete Verzeichnis. => /ordner1/../ordner2/seite3.php
  • Und nochmal einen Schritt höher. => /ordner2/seite3.php
Der Rest sollte klar sein.

Ich hoffe, das ganze ist einigermaßen nachvollziehbar. Erklären ist nicht meine große Stärke ;)

Hallo BcF,

sorry, dass ich mich neulich nicht bedankt habe, aber das hätte zu einem Doppelpost geführt,
falls es Probleme gibt...

Bin gerade dabei, damit herumzuexperimentieren:
Kann es sein, dass das Script lokal mit xampp nicht funktioniert?
Meine Sitemap liegt im Root-Verzeichnis, die Links von dort verweisen jetzt aber auf
http://localhost/, während die aus einer Datei, die in einem Ordner liegt, brav z.B. zur
Startseite verweisen...

Grüße
Bernhard
 
Meine Sitemap liegt im Root-Verzeichnis, die Links von dort verweisen jetzt aber auf
http://localhost/
Wohin sollten die denn verweisen? So, wie die Funktion im Moment aussieht, verweist sie ja eigentlich immer auf das Root-Verzeichnis des Servers (http://localhost/). Wenn ein Unterverzeichnis als Root fungieren soll, müsste man sie etwas anpassen.

Zeig eventuell auch mal, wie die Navigation auf der betreffenden Seite (und die Verzeichnisstruktur ausgehend vom Server-Root) im Moment aussieht.

Gruß,
Björn
 
Werbung:
Wohin sollten die denn verweisen? So, wie die Funktion im Moment aussieht, verweist sie ja eigentlich immer auf das Root-Verzeichnis des Servers (http://localhost/). Wenn ein Unterverzeichnis als Root fungieren soll, müsste man sie etwas anpassen.

Zeig eventuell auch mal, wie die Navigation auf der betreffenden Seite (und die Verzeichnisstruktur ausgehend vom Server-Root) im Moment aussieht.

Gruß,
Björn

Hallo Björn,

danke für Deine Bemühungen!
Noch bin ich am Basteln und müsste eine deutlich abgespeckte Version erstellen,
um etwas Übersichtliches zum Zeigen zu haben...

Ich vermute, dass der Fehler hier liegt:
PHP:
<li class="subnav-1st"><a href="<?=toRoot()?>ordner1/ordner1-1/seite1.php">Seite 1</a></li>
Da bekam ich eine Fehlermeldung und habe daraufhin das = durch ein Leerzeichen
ersetzt. Gehört da was anderes hin?

Ich habe die Geschichte noch nicht online getestet, könnte mir aber vorstellen,
dass es da funktioniert, da mich der Server dort nicht höher als Root lässt,
während ich offline in xampp natürlich direkt http://localhost/ aufrufen kann...
(ich habe in htdocs etliche Projektordner, die offline meinem Rootverzeichnis
entsprechen).

Grüße
Bernhard
 
das = ist ein Kürzel für "echo". Also anstatt = könntest du "echo" benutzen, um den gleichen Effekt zu erzielen.

Hallo Zahl,

super! Das war's wohl: jetzt verweist es grundsätzlich nach http://localhost/,
d.h. wenn ich das Projekt jetzt direkt in htdocs speichere statt im Projektordner,
müsste es funktionieren... (probier ich aber erst morgen)

Grüße
Bernhard
 
Werbung:
das hätte übrigens auch ein einfaches
PHP:
define("DR", $_SERVER["DOCUMENT_ROOT");
und entsprechend
PHP:
<a href="<?php echo DR;?>ordner/blubb/etc/page.html">Seite</a>
getan.
Liegt das Script nicht direkt im Document Root kann man einfach die Konstante anpassen.
Links sehen dann so aus:

/my_doc_root/ordner/blubb/etc/page.html
:!: das / am Anfang machts'
 
das hätte übrigens auch ein einfaches
PHP:
define("DR", $_SERVER["DOCUMENT_ROOT");
und entsprechend
PHP:
<a href="<?php echo DR;?>ordner/blubb/etc/page.html">Seite</a>
getan.
Liegt das Script nicht direkt im Document Root kann man einfach die Konstante anpassen.
Links sehen dann so aus:

/my_doc_root/ordner/blubb/etc/page.html
:!: das / am Anfang machts'

Hallo Frank,

sieht gut aus!

Aber:

PHP:
<a href="<?php echo DR;?>ordner/blubb/etc/page.html">Seite</a>

führt zu:

HTML:
<a href="htdocsordner/blubb/etc/page.html">Seite</a>

Grüße
Bernhard
 
Zurück
Oben