Speicherung von "Einstellungen" / Template laden

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

  • Speicherung von "Einstellungen" / Template laden

    Hallo erstmal

    also um gleich zur Sache zu kommen, ich möchte auf meiner Seite gerne 2 Dinge umsetzen, für die ich auch eine Umsetzung im Kopf habe, nur wohl nicht die beste..

    1.) Ich möchte gerne das HTML-Template/Aussehen meiner Seite mit einem Klick ändern können, jeder Style auf dem Webspace soll seinen eigenen Ordner haben. Das bedeutet ja, dass beim Laden der Page am Anfang erst jedesmal überprüft werden muss, welches Template nun geladen werden soll.
    Meine Idee war, eine Simple .txt Datei o.ä. zu erstellen (in welcher der Speicherort bzw. Name des Templates gespeichert ist) und beim Laden der index.php wird diese Datei nun zu Beginn ausgelesen und das Template von dem ausgelesenen Speicherort includiert.

    Wie machen das die bekannten CMS? werde mir nacher mal eins laden um evt. etwas abzuschauen.


    2.) Oft hat eine Seite ja auch ein "Admin Control Panel" oder ähnliches, Ich habe mir einfach einen Ordner erstellt und diesen mit htaccess geschützt ... Dann ist zwar nichts mit Multiuser usw, aber sicher wohl allemal.

    Doch mir kommt es jetzt auf den Weg an, wie man die Sachen speichert, die dort eingegeben werden (Beispiel: Titel der Page, Uhrzeitformat, Kontakt/Impressumdaten, Location des favicons etc.).
    Eine MySQL-Datenbank ist da ja nicht angebracht, da ich ja keine Datensätze speichern will, sondern von jeder Einstellung nur einen einzigen Wert (Beispiel: Pagetitle = willkommen auf bla.de).
    Ich habe ja bei 1.) schon diese .txt Datei erwähnt, soll ich das mit den anderen Einstellungen auch so machen? Mich würde die "State of the art" Lösung interessieren (xml ist ja in aller Munde, vielleicht doch lieber eine "einstellungen.xml" mit entsprechender Struktur statt einer "einstellungen.txt"?)


    mfg & Danke

  • #2
    @1
    Willkommen in der Welt von CSS.
    Templates gehen natürlich auch, find ich aber unhübsch~

    @2
    Du kannst dafür schon eine MySQL-Tabelle nehmen.
    Einstellungen
    setting_name VARCHAR (20);
    value VARCHAR (255);

    du kannst genauso gut eine INI-Datei nehmen, oder eine XML-Datei, in beiden Fällen würde ich dann aber eventuell eine HEAP-Tabelle, oder besser noch Memcache, zum Cachen der Daten benutzen, da das Parsen einer Datei recht langwierig ist.

    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
      Danke für die schnelle Antwort!

      zu 1.)

      Ja, ich denke ich weiß wie du das meinst. Die Rohdaten selbst in einer index.php speichern (bzw. durch die dort includeten PHP-Scripte dynamisch einfügen) und eine CSS Datei regelt das gesamte Layout (für diese Trennung wurde ja wohl auch das an xml angelehnte xhtml erschaffen meine ich gelesen zu haben, Daten = xml, Aussehen = css) ... wenn ich was ändern möchte, ändere ich also nur den Pfad zur .css Datei anstatt ein anderes Template zu laden. Hab ich das so richtig verstanden?

      Falls ja, finde ich das nicht 100% überzeugend, Beispiel:
      Ich habe in meinem ersten Design eine Top-Navigation, sprich über dem Inhalt, horizontal liegend. Was ist, wenn ich in meinem zweiten Design die Navigation aus irgendeinem Grund unter den Inhalt bringen will, oder in den Inhalt integrieren? sowas kann css ja nicht beeinflussen, oder etwa doch?
      (Was ich sagen will: die Anordnung der Div-Boxen bleibt ja die selbe. Wenn ich jetzt aber für jedes Design ein eigenes Template hätte, kann ich die divs ja komplett anders verschachteln.).

      Falls du nur anmerken wolltest, dass css einfach modern ist - das würde ja auch in meiner vorgeschlagenen Methode verwendet werden; jedes Template besitzt seine eigene .css Datei.

      Nicht falsch verstehen: ich poche nicht auf die Template-Lösung, aber sehe da einfach den Vorteil, dass man einfach alles am Aussehen und vorallem am Aufbau der Seite regeln kann, was man mit unterschiedlichen css-Dateien, die auf die immergleiche Div-anordnung der index.php einwirken, ja nicht erreichen kann.

      zu 2.)

      Ok, ich habe bei der MySQL Sache zuwenig Überlegungen angestellt, dein Vorschlag ist gut.
      Nur kann der zum setting_name gehörende Value ja verschiedene Typen haben (Beispiel: timeout = 30, title = "hallo"; sprich einmal integer und einmal varchar/string).
      Könnte das später evt. irgendwo Probleme bereiten, wenn ich nun doch alles (auch Zahlen) als varchar speichere? ist doch imho auch nicht soo sauber, jede Value, egal welchen Typs, als varchar zu speichern.
      Zuletzt geändert von INC.; 20.10.2007, 17:38.

      Kommentar


      • #4
        ... und eine CSS Datei regelt das gesamte Layout (für diese Trennung wurde ja wohl auch das an xml angelehnte xhtml erschaffen meine ich gelesen zu haben, Daten = xml, Aussehen = css) ... wenn ich was ändern möchte, ändere ich also nur den Pfad zur .css Datei anstatt ein anderes Template zu laden. Hab ich das so richtig verstanden?
        Das hast du! xhtml ist allerdings nur eine kleine Änderung von html, so dass jedes xhtml-dokument auch valides xml ist!

        (Was ich sagen will: die Anordnung der Div-Boxen bleibt ja die selbe. Wenn ich jetzt aber für jedes Design ein eigenes Template hätte, kann ich die divs ja komplett anders verschachteln.).
        Da hast du vollkommen recht und ich würde genau den gleichen weg wie du über eine eigene template-datei gehen!

        Nur kann der zum setting_name gehörende Value ja verschiedene Typen haben (Beispiel: timeout = 30, title = "hallo"; sprich einmal integer und einmal varchar/string).
        Könnte das später evt. irgendwo Probleme bereiten, wenn ich nun doch alles (auch Zahlen) als varchar speichere? ist doch imho auch nicht soo sauber, jede Value, egal welchen Typs, als varchar zu speichern.
        Aber egal, wie du deine Einstellungen speicherst, in der Datei werden Zahlen und Zeichenketten auch gleich behandelt.
        Ich persönlich würde den Weg über die ini-Datei wählen und diese beispielsweise in der session oder im memcache zwischenspeichern. So kannst du effizient auf die Einstellungen zugreifen und eine Verbindung zur Datenbank kannst du dir ersparen, wenn du diese nicht benötigst (das Laden der Einstellungen also die einzige Anfrage wäre).

        Kommentar


        • #5
          Danke nochmals für die Antwort

          Dann werde ich wohl doch auf Templates setzen und den Namen des zu ladenden Templates bei den anderen Einstellungen speichern. Vorerst werde ich das dann mit MySQL machen und schaue mir, sobald das funktioniert, mal memcache an (um dort ne XML-Datei mit den Einstellungen reinzuladen. Da stellt sich mir die Frage: warum xml-inhalt in memache laden, wenn ich auch den MySQL-Inhalt in memcache laden kann ... wäre ja noch schneller - also ein Kompromiss zwischen MySQL und memcache, ohne .xml und .ini - aber egal vorerst).

          Das MySQL-basierte würde dann so aussehen:

          Die index.php holt aus der DB den Speicherort des aktuell zu verwendeten Templates und includiert es in sich selbst.
          Das eben includierte Template wiederrum includiert PHP-Scripte, welche Inhalte aus DBs holen (z.B. News).

          Also gibt es "includes im include" - wie sieht das mit der Performance aus?

          mfg

          Kommentar


          • #6
            Ist mir fast etwas peinlich, aber geht das auch einfacher was ich da fabriziert habe?

            PHP-Code:

            <?php

            error_reporting
            (E_ALL);
            include 
            'includes/mysql.php';

            mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die(mysql_error());
            mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());

            $sql "SELECT setting_value FROM Settings WHERE setting_name = 'template_frontend';";
            $result mysql_query($sql) OR die(mysql_error());
                
            while(
            $row mysql_fetch_assoc($result)) 
                {
                    
            $template $row['setting_value'];
                }
                
            include 
            'templates/'.$template.'/index.html';
            ?>
            Macht ja nix anderes, außer genau einen Wert auszulesen und dann das entsprechende Template zu laden ... geht das auch mit weniger Code (z.B. die while-Schleife weglassen, ist ja nur eine Antwort) oder sonst irgendwie besser?
            Zuletzt geändert von INC.; 20.10.2007, 22:02.

            Kommentar


            • #7
              Die while-Schleife ist überflüssig.
              Ein if(mysql_num_rows()) wäre eventuell zu empfehlen.

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

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

              Kommentar

              Lädt...
              X