Ordnerstruktur URLS (mit SQL)

Hallo zusammen,

ich habe zwar kein Problem, doch würde euch gerne nach Rat fragen wollen. Undzwar folgendes:

Ich will anhand von Page ID’s die URL’s generieren. Beispiel hierzu:
PageID: 1 → /home/
PageID: 2 → /home/contact/
PageID: 3 → /about/

Jede Seite ist so in der Art in der Datenbank gespeichert:
ID, PARENT_ID, ALIAS
1, 0, „home“
2, 1, „contact“
3, 0, „about“

Wie kann ich jetzt am besten (Optimalsten) zu einer ID die Links mit PHP herausfinden, ohne die Datenbank zu belasten?

Ich habe bis jetzt folgendes:
[PHP]public function createUrlFromPageID($id){
// …
}[/PHP]

Empfehlen würde ich das nicht da du sonst keine logische URL hast aber das ist deine Sache :wink:

Dafür könntest du dir einen Array erstellen in etwa so:
[php]return array(
‚route‘ => array(
1 => array(
‚parent‘ => false,
‚path‘ => ‚/home‘,
‚title‘ => ‚Startseite‘
),
2 => array(
‚parent‘ => 1,
‚path‘ => ‚/home/contact‘,
‚title‘ => ‚Kontakt‘
)
)
)[/php]

Vielen Dank!

Genau das habe ich mir auch überlegt, aber habe mir gedacht, was passiert wenn der Array irgendwann mal sehr groß/lang wird? Sprich bei 1000 Seiten?

Und was meinst du mit „sonst keine logische URL“ haben?

Was soll passieren?
Meinst du die Wartbarkeit oder meinst du die Performance?

Ich meine damit das es für den User schöner ist wenn er nachvollziehbare URLs hat also z.B. example.com/kontakt statt example.com/2
Denke auch SEO technisch ist das besser.

Nennt man auch sprechende URL’s. Außerdem ist es fraglich ob ein solches Konstrukt wirklich geeignet für dein vorhaben ist. Es kommt ganz darauf an welchen Umfang dein Projekt hat. Für eine normale Website ist es definitiv totaler Unsinn.

Genau, dass habe ich auch vor! Sobald z.B. auf beispiel.com/home/contact zugegriffen wird, funktioniert es auch schon. Die Methode createUrlFromPageID() ist nur für das Menü und für Verlinkungen da. Der soll anhand des PageID’s die korrekte URL zurück geben und diese sollte verlinkt werden. Sprich:
[PHP]Home
Contact[/PHP]
sollte unteranderem /home & /home/contact zurückgeben.

Ich weiss es nicht, aber ich mache mir Sorgen wegen der Performance. Könnte es nicht bei sehr vielen Datensätzen in einem Array nicht zu Problemen kommen?

Willst du einer Art CMS programmieren oder worauf soll das ganze hinauslaufen? Ansonsten würde ich dir raten nimm ein schon vorhandenes CMS oder benutze mod_rewrite jenachdem was du vor hast…

Dann würde ich das Array aber anders aufbauen.

So in etwa…

array( 'route' => array( 'home' => array( 'title' => 'Startseite', 'subroute' => array( 'contact' => array( 'title' => 'Kontakt' ) ) ) ) )

zu der Performance kann ich leider nichts sagen, aber schneller als aus der DB wird es alle mal sein…

Verstehe! Um dieses Array erzeugen zu können, müsste ich vorerst alle Seiten aus der DB ziehen. Daraus dann einen Array bauen, wie du schon geschrieben hast.

Sollte ich bzgl. Performance/Größe an irgendetwas an der SQL Query achten?

Ja, ich bastele ein eigenes CMS. Ich werde auch mod_rewrite benutzen. Orginalurl wäre /index.php?page=home/contact. Anhand von mod_rewrite wird es halt zu /home/contact. Ein bestehendes kann ich leider diesmal nicht verwenden…