Abbildung von URLs in der Datenbank

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abbildung von URLs in der Datenbank

    Hallo,

    ich möchte Zur Zeit ein Menü erstellen, das im Adminbereich verwaltet werden kann. Dazu würde ich gerne auf eine MySQL-Datenbank zurückgreifen.

    Zur Info: Ich verwende mein eigenes MVC-Framework. Es gibt Controller und Actions. Man kann umstellen, ob die Links mod_rewrite-mäßig ausgegeben werden, oder einfach normal mit ? und &.

    Und genau hier beginnt das Problem.
    Es soll nämlich die Möglichkeit geben, externe Links ins Menü einzutragen. Wenn es das nicht gäbe, würde ich einfach 2 Spalten in meiner Datenbank anlegen: Controller, Action.
    Dann könnte meine Anwendung je nach mod_rewrite on/off entscheiden, wie die Links ausgegeben werden.

    Aber wie lege ich dann die externen Links ab? DIe haben ja zum Teil ganz andere Formate.

    Und was mache ich, wenn es mal interne Links gibt, die nicht nur so (Controller/Action.html bzw. ?controller=controller&action=action) aufgebaut sind, sondern noch weitere Parameter hinten dran haben?
    Forum/Show.html?id=20

    Achja, das ist kein Crossposting. (bei phpforum.de gibt es einen ähnlichen Thread, der geht aber mehr um die Logik der Vererbung im Menü)
    Hier möchte ich gute Möglichkeiten finden, die URLs in einer Datenbank zu verwalten.

    MfG
    Seggl
    Tempim.de - Dein kostenloser Bildhoster
    Tipps und Tricks für Webmaster

  • #2
    Varchar fertig.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Klar, das wäre die einfachste Lösung.
      Aber was ist, wenn ich jetzt alle Links so eintrage, dass sie mod_rewrite vorraussetzen?

      Später will ich aber mod_rewrite deaktivieren, aus welchem grund auch immer.

      Dann müsste ich alle Links umschreiben.

      gibt es keine bessere Möglichkeit?
      Tempim.de - Dein kostenloser Bildhoster
      Tipps und Tricks für Webmaster

      Kommentar


      • #4
        table menu_item
        id
        controller
        action

        table menu_item_params
        menu_item_id
        key
        value


        Der Link ?controller=foo&action=bar&id=1 wird durch die folgenden Datensätze repräsentiert:

        menu_item( 1, 'foo', 'bar )
        menu_item_params( 1, 'id', '1' )

        Für externe URLs hast du eine weitere Tabelle, die über ein Feld url verfügt. Fertig. Das ist die von dir mündlich erstellte Struktur einmal festgehalten.

        Kommentar


        • #5
          Ok, danke

          Klingt nach komplizierten Abfragen.

          Würdet ihr das wirklich so lösen?
          Kann doch nicht sein, dass ich der erste bin, der das Problem hat

          Seggl-hoch-drei
          Tempim.de - Dein kostenloser Bildhoster
          Tipps und Tricks für Webmaster

          Kommentar


          • #6
            ich denke, das problem ist eher nicht in der db zu suchen, sondern in dem modul, welches die links wieder entgegen nimmt.

            Forum/Show.html?id=20
            ist eh ein halbherziges rewrite

            ein link in der form
            Forum/Show.html/id=20,foo=2,foo2=x

            wenn der link auch genau so in der db steht, kann er ja unbearbeitet durchs rewrite laufen
            wenn deine struktur es vorsieht das der erste parameter immer der controller und der 2. die action ist, lässt sich das doch recht einfach auflösen
            explode / auf den ganzen string, explode , auf die ergebnisse des ersten
            und ein explode = auf den 2.


            ich benutze diese art von rewrite in mehreren projekten und fahre damit ganz gut

            so in etwa lässt sich das umwandeln
            PHP-Code:
            $uri="Forum/Show.html/id=20,foo=2,foo2=x";
            $uri_arr=explode("/",$uri);

            while (list (
            $uri_key$uri_val) = each ($uri_arr))  

                if(
            $uri_val<>"")
                {
                    
            $uri_arr_new[$uri_key]=explode(".",$uri_arr[$uri_key]);
                    
            $uri_arr[$uri_key]=$uri_arr_new[$uri_key][0];
                }
                
            $temp_arr=explode(",",$uri_arr[$uri_key]);
                while (list (
            $key$val) = each ($temp_arr))  
                {
                    if (
            stristr($val,"="))
                    {
                        
            $temp_arr2=explode("=",$val);
                        
            $params[$temp_arr2[0]]=$temp_arr2[1];
                    }
                } 
            }
            $params['controller']=$uri_arr[0];
            $params['action']=$uri_arr[1];
            $get_uri="?";
            while (list (
            $key$val) = each ($params))  
            {
                
            $get_uri.="&".$key."=".$val;

            EDIT:
            Ich hab das ganze nochmal verändert:
            $params['controller']=$uri_arr[0];
            $params['action']=$uri_arr[1];
            müssen ans ende, damit auch uris ohne weitere angaben gelten

            Zuletzt geändert von ; 13.04.2009, 16:36.

            Kommentar


            • #7
              eventuell noch zur erklärung des codes.

              ich definiere die actions bzw controller in meinen projekten nicht fest.

              ich habe schematas in arrayform vorliegen, die die stellen definieren.

              PHP-Code:
              $uri_schema[0]=["Controller"];
              $uri_schema[1]=["Action"]; 
              in deinem beispiel

              Kommentar


              • #8
                Danke!

                Soll ich also die Links in der Form

                Controller/Action.html?weitere=parameter&und=so

                ablegen und dann bei Bedarf umwandeln?
                Wäre halt rechenintensiv, aber eine andere Lösung fällt mir auch nicht ein.

                Simon
                Tempim.de - Dein kostenloser Bildhoster
                Tipps und Tricks für Webmaster

                Kommentar


                • #9
                  Controller/Action.html?weitere=parameter&und=so

                  das wäre ja eine halb rewrite und halb get methode

                  ich habe auch nur einen ansatz aus meiner engine genommen und schnell mal zusammengecodet.

                  eigentlich gehts nur um das prinzip:
                  Controller/Action/weitere=parameter,und=so

                  könnte man halt nach meiner methode recht fix wieder umbauen in einen get parameter link.

                  rechenintensiv ist das ganze bei ein paar links sicher nicht. und wenn du mal 1000 links in mod rewrite hast und dich entschliessen solltest auf get umzuändern, kannst du mit der gleichen methode ja alle links in der datenbank damit aktualisieren.

                  jede methode kann man ja umdrehen

                  das einzige was mich halt stört ist, das du in deinen beispielen beides kombinierst.
                  entweder rewrite oder alles per get.
                  ist halt meine meinung

                  ich benutze in meinen projekten die das system benutzen nirgendwo auch nur einen get parameter

                  /nachtrag

                  die form, die du in der datenbank abspeicherst sollte die am meissten verwendete sein um die rechenzeit so kurz wie möglich zu halten.
                  Zuletzt geändert von ; 13.04.2009, 23:04.

                  Kommentar


                  • #10
                    Ich würde die URIs so anlegen:
                    Code:
                    /controller/action/param1/foo/param2/bar/
                    Dann kann man alles ganz einfach mit explode zerlegen und weiterverarbeiten. Oder man wendet Reguläre Ausdrücke auf die Zeichekette an. Oder oder ...

                    Warum verwendet man nicht einfach das Zend Framework?
                    [COLOR=#9C5245]Internet-Explorer[/COLOR] [COLOR=#334D7B]User und stolz drauf! :P[/COLOR]

                    Kommentar


                    • #11
                      Wie die Links jetzt im Rewrite aussehen ist doch Wumpe. Tatsache ist einfach, das Seggl jetzt die Möglichkeit hat, die Links in die Komponenten zu zerlegen und in die Datenbank zu packen, oder die Links als reine URL abzulegen. Ersteres ist ganz normal normalisiert, zweiteres ist sicherlich schneller. Ist halt die Frage, was Seggl damit so vor hat. Sollen nämlich einzelne Linkkomponenten ausgetauscht werden, ohne Rücksicht auf die Rewrite-Methode, ist die normalisierte Form vorzuziehen. Werden die Links einmal eingepflegt und danach nicht wieder angefasst, ist die zweite Methode sicher sinniger.

                      Kommentar


                      • #12
                        wie ich bereits sagte, wie man die links speichert ist völlig latte.
                        die auflösung ist wichtig.

                        meine form benutze ich halt um eine trennug zwischen controllern und parametern zu haben.

                        Warum verwendet man nicht einfach das Zend Framework?
                        weil man nicht muss

                        Kommentar


                        • #13
                          Weil Zend zu überladen ist.
                          Und ich hasse es, wenn man mich ständig davon abbringen will, mein eigenes FW zu programmiere. So lernt man nunmal am allermeisten über MVC und alles, was dazu gehört.

                          -----
                          Ich hätte noch ne Idee (danke an Creator)

                          Wie wäre es, wenn ich die Tabelle so aufbaue?

                          link_id | controller | action | params

                          Bei Params lade ich einfach ein serialisiertes Array rein.
                          Da meine Link-Generator sowieso so arbeitet:

                          PHP-Code:
                          FW_Tools::getInternalURL("controller""action", array("more" => "params""und" => "so weiter")) 
                          Da könnte ich ja das
                          PHP-Code:
                          array("more" => "params""und" => "so weiter")) 
                          Serialisieren.

                          Was haltet ihr davon?
                          Tempim.de - Dein kostenloser Bildhoster
                          Tipps und Tricks für Webmaster

                          Kommentar


                          • #14
                            Was haltet ihr davon?
                            Nichts, das ist nämlich voll Banane! Das spricht gegen jede vernünftige Normalisierung. Dann lieber direkt den Link als Zeichenkette.

                            Kommentar


                            • #15
                              /agree PHP-Desaster

                              sobald du mal auf die idee kommen solltest einen zweiten controller oder eine subaction zu nutzen, hampelst du die irgendwie in die parameter.
                              klare trennung zwischen steuerung und parametern, aber nicht soviel zerhäckseln

                              Kommentar

                              Lädt...
                              X