Sinnvolle Struktur/Ansatz für Website mit Datenbank?

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

  • Sinnvolle Struktur/Ansatz für Website mit Datenbank?

    Hallo zusammen

    Meine Frage ist eher allgemein gemeint, und soll nicht bedeuten, dass ich hier fertige Scripte suche.

    Mit php habe ich bisher nur recht einfache Dinge gelöst, meist, weil ich keine Lust hatte zig statische Html-Seiten zu bauen.
    Nun komme ich an ein Punkt, wo ich viele, viele Seiten bauen muss, und auch noch 3 Sprachen habe, weswegen ich nun mal einiges mit MySQL machen möchte.

    Wie entscheide ich nun, ob ich etwas -z.b. die Navigation, als include seperat ablege(wie bisher), oder bei jedem Seitenaufruf mir die Daten aus der DB hole und z.b. per Schleife ausgebe?
    Was macht wann Sinn??

    Wenn ich nun die Navi aus der DB holen möchte schreibe ich dann in ein DB-Feld etwas wie Home+Seitemap+Kontakt+usw...
    und in ein weiters Feld index.php+site.php+kont.php+usw..
    und mache dann je einen explode bei +, um eine Schleife zu bauen?

    Oder schreibe ich besser:
    <a href="index.php">Home</a>+<a href="site.php">Seitemap</a>+usw... ?

    Wenn ich nun noch die Sprachen einbauen möchte, lege ich besser je eine Tabelle für Navi, Bildpfade, Deu, Eng, Spa, oder alles in einer Tabelle?
    Einfacher wäre, die Übersetzer direkt in eine CSV-Datei schreiben zu lassen, -die in die einzelnen Tabellen hochladen und dann alles mit htmlentities ausgben zu lassen. Dann habe ich aber eben mehre Tabellen und müßte z.b. prüfen, welcher Bildpfad zur jeweiligen ID der Sprache gehört, oder?? also dann doch gleich alles - Navi, Bildpfade, Text für jede Sprache anlegen?? Wäre doch mehr Arbeit, oder?

    Und bei Bildern, - die Werte für width="" und height="" über die Image-Funktionen bei jeder Anzeige neu ausgeben lassen, oder auch in der DB eintragen??

    Das waren jetzt schon so einige Fragen, die mir nicht klar sind.
    Leider habe ich auch bei der Suche(hier), google, etc. nichts gefunden, was diese grundsätzlichen Fagen anschaulich beschreibt/klärt.

    Hat hier jemand ein paar gute Infos parat, oder kennt ein paar links?

    Vielen Dank schon im Voraus

    die make
    Zuletzt geändert von make; 04.02.2004, 20:34.

  • #2
    Wann macht wann Sinn??
    Du meintest bestimmt "wann macht was Sinn?", oder?

    Wenn du in deinem Team Leute hast die kein HTML können, dann würd ich die DB variante benutzen.

    Wenn du alles richtig machst sollte jeder das gut verändern können


    Wenn ich nun die Navi aus der DB holen möchte schreibe ich dann in ein DB-Feld etwas wie Home+Seitemap+Kontakt+usw...
    und in ein weiters Feld index.php+site.php+kont.php+usw..
    und mache dann je einen explode bei +, um eine Schleife zu bauen?
    Ne, würd ich nicht machen :P

    Lösungsansatz:

    id, titel_de, titel_fr, titel_en, link


    Dann machst du einfach eine Schleife


    Wenn ich nun noch die Sprachen einbauen möchte, lege ich besser je eine Tabelle für Navi, Bildpfade, Deu, Eng, Spa, oder alles in einer Tabelle?
    Ich würd eine Tabelle machen mit den Feldern für die verschiedenen Sprachen machen



    also dann doch gleich alles - Navi, Bildpfade, Text für jede Sprache anlegen??
    Bilder usw. kannst du mit PHP ja nur schlecht verändern, deswegen musst du das eh alles in den drei Sprachen machen



    Hat hier jemand ein paar gute Infos parat, oder kennt ein paar links?
    Da du anscheinend noch nicht viel von MySQL + PHP verstehst, würd ich Schattenbaum.net empfehlen


    MfG Floriam
    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

    Kommentar


    • #3
      Ja Danke Floriam, dass du gleich so direkt auf die Fragen eingehst!

      Die Seite "Schattenbaum.net" hatte ich heute Mittag gefunden und auch von vorn bis hinten durchgelesen, doch gehst sie eher auf Probleme der Programmierung/bzw. Syntax ein, während ich eher nach, -sagen wir mal "philosophischen Ansätzen" suche.

      Ich habe seit 11/2 jahren eigentlich alles gelöst, was sich mir als Problem der Programmierung stellte. Da ich aber eben auch bloss zu den Autodidakten gehöre, scheint es für mich eben "nur" irgendwie gelöst zu sein - hajo, funzt doch...

      Ich überlege schon immer etwas länger, wie ich etwas lösen kann, bevor ich dann wirklich los tippe, doch fallen mir dann meist diverse Lösungen ein und ich kann nicht einschätzen, welche besser wäre bzw. ob es nicht noch einfachere gibt.

      Ich suche nicht den "Königsweg", sondern eher ein Sammelsurium an guten Lösungen/Beispielen, an denen ich auch erkenne, warum sie so gut sind - Erfahrung eben...

      So, wie ich deine Antworten interpretiere, konntest du wohl gut verstehen, welche Ansätze ich meinte, und wie ich deinen Formulierungen entnehme, schreibst du spotan, wie du es machen würdest - wie entscheidest du das für dich?

      Eine gute Buchempfehlung wäre auch toll

      die make

      Kommentar


      • #4
        Buchempfehlung ? Für den Theoretischen Ansatz "Content Management in der Praxis" aus dem Springer Verlag ... nicht gerade einfach geschrieben, dafür aber umso besser fürs Konzept ... keine Programmierung oder sowas nur theorie ... für hp+mysql würd ich dir spontan "php4 - dynamische webseiten entwickeln" ausm mut-verlag empfehlen ....

        zu deinem Prob:
        sql tabelle "navi"
        id i < einfach ne auto increment id
        parentid < id zur erkennung des übergeordneten elements
        title_de < Seitentitel deutsch
        title_en < Seitentitel englisch
        title_fr < Seitentitel franz.
        link (optional noch link_de, link_en, link_fr wenns unterschiedliche dateien sind)

        Wenn du dann so ein Menü haben willst:
        - Start
        - Hauptpunkt
        - - Unterpunkt
        - - Unterpunkt 2
        - Hauptpunkt 2
        trägste in die tabelle ein:
        1 | 0 | Start | Start | Start | index.php
        2 | 0 | Hauptpunkt | Hauptpunkt | Hauptpunkt | haupt1.php
        3 | 2 | Unterpunkt | Unterpunkt | Unterpunkt | unter1.php
        4 | 2 | Unterpunkt2 | Unterpunkt2 | Unterpunkt2 | unter2.php
        5 | 0 | Hauptpunkt2 | Hauptpunkt2 | Hauptpunkt2 | haupt2.php

        damit kriegste ne saubere Tabelle und kannst dir dann en beliebig geschachteltes menü bauen ... in php würds dann ungefähr so aussehen:

        PHP-Code:
        <?
        ...
        $result = mysql_query("SELECT * FROM navi WHERE parentid='0'");
        while($row = mysql_fetch_array($result)){
          print "> " . $row[title_de];
          $result2 = mysql_query("SELECT * FROM navi WHERE parentid='$row[id]'");
          while($row2 = mysql_fetch_array($result2)){
            print ">> " . $row2[title[de];
          }
        }
        ...
        ?>
        Kannste natürlich beliebig weiter schachteln

        mfG
        CMS-X Medien- und Modelagentur

        Kommentar


        • #5
          Re: Sinnvolle Struktur/Ansatz für Website mit Datenbank?

          hallo zurück
          Original geschrieben von make
          Mit php habe ich bisher nur recht einfache Dinge gelöst, meist, weil ich keine Lust hatte zig statische Html-Seiten zu bauen.
          Nun komme ich an ein Punkt, wo ich viele, viele Seiten bauen muss, und auch noch 3 Sprachen habe, weswegen ich nun mal einiges mit MySQL machen möchte.
          hoffentlich hast du genug zeit
          Wie entscheide ich nun, ob ich etwas -z.b. die Navigation, als include seperat ablege(wie bisher), oder bei jedem Seitenaufruf mir die Daten aus der DB hole und z.b. per Schleife ausgebe?
          Was macht wann Sinn??
          "einfache inhalte" kannst du einfach aus der db generieren ... komplexere inhalte lassen sich über includes lösen (mit db-unterstützung) => modularer aufbau
          Wenn ich nun die Navi aus der DB holen möchte schreibe ich dann in ein DB-Feld etwas wie Home+Seitemap+Kontakt+usw...
          und in ein weiters Feld index.php+site.php+kont.php+usw..
          und mache dann je einen explode bei +, um eine Schleife zu bauen?
          Oder schreibe ich besser:
          <a href="index.php">Home</a>+<a href="site.php">Seitemap</a>+usw... ?
          öh, ich würde sagen "weder ... noch" ... dieser ansatz ist imho etwas unflexibel ... vielleicht denkst du darüber nach, über eine seiten-id zu navigieren: der menu-id ist ein submenu zugeordnet sowie ein inhalt ... die verknüpfung erfolgt über die menu-id
          Wenn ich nun noch die Sprachen einbauen möchte, lege ich besser je eine Tabelle für Navi, Bildpfade, Deu, Eng, Spa, oder alles in einer Tabelle?
          auch hier würde ich über die menu-tabelle gehen ... jeder menu-punkt hat eine sprachzuordnung ... da die menu-id die inhalte steuert, brauchen diese nicht zwingend sprachlich gekennzeichnet sein ... vorteil: mehr flexibilität ... mit deinem ansatz musst du bei einer 4. und 5. sprache je sprache eine neue tabellenspalte anlegen ... böse
          Einfacher wäre, die Übersetzer direkt in eine CSV-Datei schreiben zu lassen, -die in die einzelnen Tabellen hochladen und dann alles mit htmlentities ausgben zu lassen. Dann habe ich aber eben mehre Tabellen und müßte z.b. prüfen, welcher Bildpfad zur jeweiligen ID der Sprache gehört, oder?? also dann doch gleich alles - Navi, Bildpfade, Text für jede Sprache anlegen?? Wäre doch mehr Arbeit, oder?
          das leidige übersetzer-thema ... wenn du einen basis-inhalt angelegt hast, kannst du den exportieren/importieren (sofern du dir eine schnittstelle gebastelt hast) ... einfache bilder lassen sich ja mehrfach verwenden ... ausser bildnamen (und evtl. pfadangaben) musst du nichts in der db speichern, das ist wahrscheinlich dein geringstes problem.
          Und bei Bildern, - die Werte für width="" und height="" über die Image-Funktionen bei jeder Anzeige neu ausgeben lassen, oder auch in der DB eintragen??
          geschmacksfrage ...
          Das waren jetzt schon so einige Fragen, die mir nicht klar sind.
          Leider habe ich auch bei der Suche(hier), google, etc. nichts gefunden, was diese grundsätzlichen Fagen anschaulich beschreibt/klärt.
          das dürfte auch schwer fallen. was dir vorschwebt, ist ein cms. wenn du das selber (wenn auch nur für eigene zwecke) programmieren willst, hast du dir ganz schön was vorgenommen. du solltest dich also intensiv(st) mit SQL und PHP beschäftigen ...
          SQL:
          - datenbankdesign
          - feldtypen, normalisierung, optimierung
          - joins (bloss keine db-querys in einer while-schleife)
          - ...
          PHP:
          - arrays & schleifen
          - suchen & ersetzen + reguläre ausdrücke => templates (bbcode)
          - oop => klassen (machen das leben leichter)
          - ...
          um mal einige punkte zu nennen ... wenn du allerdings nicht die nötige zeit mitbringst (je nach kenntnisstand und verfügbarer programmierzeit 3 - X Monate) solltest du dich mit fertigen lösungen beschäftigen => www.contentmanager.de ... da findest du einige cms unterschiedlichster ausprägung, von open source bis "unbezahlbar" ... qualität und leistungsfähigkeit lass ich mal aussen vor.
          Kissolino.com

          Kommentar


          • #6
            @ Wurzel
            @ DanielD

            Vielen Dank an euch, alles echt informativ!
            Allein - ich werd jetzt wohl mal joggen gehen müssen, um die Sache mit parentid zu verstehen. Ihr redet in diesem Punkt ja von der selben Sache.

            Soweit find ich den Ansatz mit der Referenzierung glaube ich sehr gut. Nun muss ich mir den Umgang damit überlegen und aneignen...
            also Kopf leer joggen

            melde mich später wieder

            die make

            Kommentar


            • #7
              ne parentid ist einfach nur ne gängige form um das "elternelement" (parents=eltern) zu definieren, d.h. das was übergeordnet ist ...

              Nimm an du hast ein Forum ... mit Kategorien und Foren wie hier ... dann hast du ne tabelle für die kategorien wo du denen en namen und ne id zuweist. dann in der boardtabelle definierst du im feld parentid in welcher kategorie das board ist ... oder bei linkverzeichnissen oder oder oder

              k.A. obs dir jetzt geholfen hat aber is eigentlich net alzu kompliziert (bin nur net so gut im erklären

              mfG
              CMS-X Medien- und Modelagentur

              Kommentar


              • #8
                HI -- war wohl noch nicht lange genug joggen

                @ Wurzel
                du sagst
                - joins (bloss keine db-querys in einer while-schleife)
                ... dann hätte ich, nach DanielD's Bsp. bei der 3. Navi-Ebene ja schon 2 db-querys in einer while-schleife.
                PHP-Code:
                <?...
                $result = mysql_query("SELECT * FROM navi WHERE parentid='0'");
                while($row = mysql_fetch_array($result)){
                  print "> " . $row[title_de];
                  $result2 = mysql_query("SELECT * FROM navi WHERE parentid='$row[id]'");
                  while($row2 = mysql_fetch_array($result2)){
                    print ">> " . $row2[title[de];
                  }
                }
                ...
                ?>
                Darf ich fragen, wie du das dann machst?
                Ich habe bisher oft einfach meine Daten von Hand in Arrays geschrieben, oder z.t. auch einfach IPTC-Daten aus JPG's verwendet, und diese dann in schleifen verarbeitet.
                Eigentlich, dachte ich, würde ich den mysql_query auch so behandeln und alle results in ein Array packen lassen.
                PHP-Code:
                $page_array = array("titel" => "$result_titel",
                               
                "text" => "$result_text",
                               
                "bild" => "$result_bild",
                               
                etc.); 
                Damit bin ich mit MySQL und allen Variablen fertig, bevor ich zu meinem html-output komme, dachte ich, und habe im html dann eben nur noch echo, oder evtl noch 'ne Schleife.

                Die Sprache wollte ich über eine session-var "sess_lang" mit in den mysql_query eingehen lassen, auch weil eigentlich jede Seite direkt per klick quasi übersetzt werden soll, es soll also auf jeder Seite ein deu, end, spa -link geben.

                Joo und nun noch mal zu den "parents"

                die tab müsste eigentlich dann so aussehen!?:
                1 | 0 | Start_deu | Start_eng | Start_spa | index.php?lang=$sess_lang&id=1 | Text_deu | Text_eng | Text_spa | Bildpfad | Zusatzinfo


                2 | 0 | Hauptpunkt1_deu | Hauptpunkt1_eng | Hauptpunkt1_spa | haupt.php?lang=$sess_lang&id=2 | ... | ... | ... | ... | ... |
                3 | 2 | Unterpunkt1_deu | Unterpunkt1_eng | Unterpunkt1_spa | unter.php?lang=$sess_lang&id=3 | ... | ... | ... | ... | ... |
                4 | 2 | Unterpunkt2_deu | Unterpunkt2_eng | Unterpunkt2_spa | unter.php?lang=$sess_lang&id=4 | ... | ... | ... | ... | ... |
                5 | 0 | Hauptpunkt2_deu | Hauptpunkt2_eng | Hauptpunkt2_spa | haupt.php?lang=$sess_lang&id=5 | ... | ... | ... | ... | ... |
                6 | 5 | Unterpunkt1_deu | Unterpunkt1_eng | Unterpunkt1_spa | unter.php?lang=$sess_lang&id=6 | ... | ... | ... | ... | ... |
                7 | 5 | Unterpunkt2_deu | Unterpunkt2_eng | Unterpunkt2_spa | unter.php?lang=$sess_lang&id=7 | ... | ... | ... | ... | ... |
                8 | 5 | Unterpunkt3_deu | Unterpunkt3_eng | Unterpunkt3_spa | unter.php?lang=$sess_lang&id=8 | ... | ... | ... | ... | ... |

                index.php, haupt.php und unter.php bestimmen das jeweilige Design

                Bin ich Banane, oder könnte ich da sogar mal richtig liegen???


                die make

                Kommentar


                • #9
                  Original geschrieben von make
                  Bin ich Banane...
                  jepp
                  schau dir das mal an: http://www.php-resource.de/forum/sho...threadid=23912

                  dein tab-aufbau ist auch nicht so schlau ... denk mal in die richtung:

                  menu:
                  id|parent|text|sprache|position
                  ^^ dazu kommt die verknüpfungstabelle ... s. thread ^^

                  inhalt:
                  id|menuid|inhalt|...

                  wenn du jetzt deine seite aufrufst => index.php?id=4 holst du per join alle menüelemente, die eltern/kinder von 4 und der sprache $_SESSION['lang'] zugeordnet sind (sofern ein solcher eintrag existiert). die inhalte werden über menuid=4 dazu verbunden ... mit 2 abfragen hast du dann die kuh vom eis ... egal wie tief deine struktur verschachtelt ist. wie du eine seite direkt "übersetzt", kannst du dir mal selber überlegen. wie schon geschrieben, je sprache eine spalte ist imho zu unflexibel. weitere dateien brauchst du auch erstmal nicht.

                  alle auszugebenden inhalte werden in variablen gespeichert (ich nutze weitestgehend arrays) und am ende ausgespuckt. ob per include oder templates ist ja erstmal wurscht.
                  Kissolino.com

                  Kommentar


                  • #10
                    Hab's' befürchtet, ich bin Banane

                    - hatte mal gefragt:
                    "Wenn ich nun noch die Sprachen einbauen möchte, lege ich besser je eine Tabelle für Navi, Deu, Eng, Spa, oder alles in einer Tabelle?"

                    Darauf schrieb Floriam:
                    Ich würd eine Tabelle machen mit den Feldern für die verschiedenen Sprachen machen
                    Wurzel, du meintest dann:
                    auch hier würde ich über die menu-tabelle gehen ... jeder menu-punkt hat eine sprachzuordnung ... da die menu-id die inhalte steuert, brauchen diese nicht zwingend sprachlich gekennzeichnet sein ... vorteil: mehr flexibilität ... mit deinem ansatz musst du bei einer 4. und 5. sprache je sprache eine neue tabellenspalte anlegen ... böse
                    und nun noch
                    menu:
                    id|parent|text|sprache|position

                    inhalt:
                    id|menuid|inhalt|...
                    Also steht nun fest: mehre tabs sind besser!
                    Die werden dann mit joins verbunden.

                    Jetzt habe ich 2std. Infos zu joins gesucht, aber nur festgestellt, dass sich viele darüber unterhalten, die Einen wissen alles - die Anderen haben Probleme damit.
                    Ich glaube, dass muss ich mir mal für später aufheben.

                    Gibt es da irgendwo ein Bsp. -mit db-dump und php-dateien, womit ich etwas rumprobieren kann - bin bei diesen Sachen leider mehr visuell veranlagt
                    - ansonsten werde ich wohl index_deu, index_eng, index_spa anlegen, dazu einige Navi-Incs bauen und 3 tabs anlegen, in denen es dann eben pro Zeile 3-4 Spalten gibt in denen das Notwendige steht.

                    Naja, die Marslandung hat heben auch nicht sofort geklappt. Also mache ich nun auch kleinere schritte und gehe erst mal vom Schreibtisch zum Kühlschrank.


                    -

                    Kommentar


                    • #11
                      Original geschrieben von make
                      Hab's' befürchtet, ich bin Banane
                      nicht so ernst nehmen

                      hatte den "falschen" link gepostet ... http://www.php-resource.de/forum/sho...s&pagenumber=2 weit unten hast du ein beispiel fürs menu ... ist ne lustige sache
                      Kissolino.com

                      Kommentar

                      Lädt...
                      X