Meddelande

Minska
No announcement yet.

Navigering CMS/Sökmotorvänliga URL'er.

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Navigering CMS/Sökmotorvänliga URL'er.

    Hej!

    Jag har ett egengjort CMS som jag nu ska göra om lite när det gäller URL'er. Man kan ha sidor/artiklar i hur många nivåer som helst:

    [kod]Id
    Parent
    Namn
    ...[/kod]

    Menyn/trädet kan t.ex. se ut såhär:
    [kod]Hem
    - Nyheter
    - Kalender

    Information
    - Kontakt
    - Ring!
    - Skicka E-post
    - Om oss[/kod]

    URL'erna blir då:
    [kod]/hem/
    /hem/nyheter/
    /hem/kalender/
    /information/
    /information/kontakt/
    /information/kontakt/ring/
    /information/kontakt/skicka-e-post/
    /information/omoss/[/kod]

    Nu undrar jag över det lättaste sättet att "fånga upp" vald URL. Jag har kollat på hur det fungerar i t.ex. Wordpress, där alla sidor/anrop går genom index-filen, med hjälp av följande i .htaccess[kod]RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L][/kod]

    Jag är lite insatt hur resten fungerar i WP, d.v.s. att sidorna sedan hämtar dess ID utifrån preg_match(), men det jag inte vet är varifrån det hämtas. Vad jag kan göra är att skicka ut alla meny-items tillsammans med dess resp. ID som en lång sträng, och sen hämta resp ID med preg_match.
    Det går ju även att spara hela "menyträdet" som en array och sedan hämta rätt ID/Key med hjälp av in_array().

    $_SERVER['REQUEST_URI'] hittar ju det som finns i adressfältet, är det "bra" och "säkert" att använda sig av den servervariabeln för att hämta rätt artikel/sida, eller bör man göra på något annat sätt?

    Men den stora frågan är ju - vilket sätt är bäst/snabbast?
    Jag bör ju ha hela trädet som någon typ av variabel/array i en fil och läsa in filen vid varje anrop, snarare än att hämta hela trädet från databasen vid varje anrop, eller hur?

    Så, hur hade ni löst det?

    Tack!
    //Micke Andersson
    Hemsida | Kontakta
    ----------------------
    "Det är svårt att vara ödmjuk när man vet att man är bäst".

  • #2
    Du gör precis som du skriver och använder dig av servervariabeln
    Om du lagrar sidorna ungefär som i WordPress (där hela sökvägen till sidan sparas i databasen) så kan du ju använda den variabeln rakt av för att söka efter sidan. Det du kanske ska tänka på dock, är att sanera variabeln innan den går in i en SQL-fråga, men jag utgår från att du inte använder gamla och förlegade mysql_connect så då sköts mycket av det automatiskt

    Bäst prestandamössigt? Tja, det är ju så man gör :-)
    Det du pratar om benämns ofta som URL segments. Och en snabb Googling kommer visa dig att sättet man implementerar det på i PHP är genom just den servervariabeln. Ofta så brukar man köra explode på den med snedstreck som delimiter, men det beror ju på hur sidorna är organiserade i databasen.

    Förresten, hur kommer det sig att du utvecklade ett CMS själv? :-)
    Kodfabriken - Webb- & apputveckling

    Kommentera


    • #3
      Ok.. Tack! Men är det verkligen ett (bra) alternativ att hämta rätt sida direkt från databasen, istället för att cache/spara alla sidor inkl. dess id'n? "Trädet" hämtas ju rekursivt, nu är det visserligen inte så stora träd, men ändå..?

      CMS-biten är bara en liten, liten del av ett helt system med massa annat, därför har jag utvecklat det på egen hand.
      //Micke Andersson
      Hemsida | Kontakta
      ----------------------
      "Det är svårt att vara ödmjuk när man vet att man är bäst".

      Kommentera


      • #4
        Det är nog en god idé att cacha innehållet, särskilt om den nu hämtar innehållet rekursivt :-)
        Kodfabriken - Webb- & apputveckling

        Kommentera


        • #5
          Jo, men på vilket sätt? Som en array som jag sparar i en fil jag skriver till, eller som en sträng för att sedan ta ut URL'en med regex?
          //Micke Andersson
          Hemsida | Kontakta
          ----------------------
          "Det är svårt att vara ödmjuk när man vet att man är bäst".

          Kommentera


          • #6
            Jag sitter just nu och försöker mig på just detta. Problemet är att min htaccess inte verkar fungera alls. Jag får bara ett 404-meddelande om jag lägger till /något/här längst bak i URLen.
            Avundas aldrig någon det sken av lycka han har för du känner inte hans hemliga sorger.

            Kommentera


            • #7
              Då gör du förmodligen fel.. Kolla mitt första inlägg, det räcker för att det ska fungera.
              //Micke Andersson
              Hemsida | Kontakta
              ----------------------
              "Det är svårt att vara ödmjuk när man vet att man är bäst".

              Kommentera


              • #8
                MickeA.com skrev: Visa inlägg
                Då gör du förmodligen fel.. Kolla mitt första inlägg, det räcker för att det ska fungera.
                Haha, you don't say!? Jag gör något kalasfel, jag kan bara inte komma på vad. Jag kopierade din .htaccess rakt av. Min gissning är att jag har konfigurerat Apache på något okonventionellt sätt.

                Går jag till /index.php fungerar det så klart, men /blahblahblah/blah fungerar inte. Den går inte till /index.php oavsett vilken URL jag skriver.
                Avundas aldrig någon det sken av lycka han har för du känner inte hans hemliga sorger.

                Kommentera


                • #9
                  Har du aktiverat mod_rewrite in din apache konfiguration?

                  Kommentera


                  • #10
                    The_Hulk skrev: Visa inlägg
                    Har du aktiverat mod_rewrite in din apache konfiguration?
                    Det var mer genant än så. Jag hade glömt RewriteEngine On.
                    Avundas aldrig någon det sken av lycka han har för du känner inte hans hemliga sorger.

                    Kommentera


                    • #11
                      prplxr skrev: Visa inlägg
                      Det var mer genant än så. Jag hade glömt RewriteEngine On.
                      Bra att det löste sig. Glöm inte att markera tråden som löst =)

                      Kommentera


                      • #12
                        The_Hulk skrev: Visa inlägg
                        Bra att det löste sig. Glöm inte att markera tråden som löst =)
                        Fast nu är det ju inte hans tråd - prplxr var bara lite av en trådtjuv. ;-)
                        @aviddevguy

                        Kommentera


                        • #13
                          @nders skrev: Visa inlägg
                          Fast nu är det ju inte hans tråd - prplxr var bara lite av en trådtjuv. ;-)
                          Oj, det tänkte jag inte på.
                          Farligt med tjuvar

                          Kommentera

                          Working...
                          X