Portal > Foren > PHP > PHP-Programmierung > Inhaltstemplate erzeugen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 29.08.2007, 18:11 Nach oben    #1
Benutzer
 
Registriert seit: 18.06.2006
Ort: Straubing
Beiträge: 85
Standard Inhaltstemplate erzeugen

Hallo zusammen ich möchte gerne folgendes Vorhaben realisieren!

Ich habe 2 Tabellen in meiner Datenbank (_content und _templates). In der ersten Tabelle (_content) speichere ich die Inhalte der jeweiligen Daten wie folgt ab:

Code:
id          => auto_increment
pageid      => jeweilige Seiten-ID
template_id => id des Template (=> _templates)
content     => ###markerName###, markerContent|*|
               ###markerName2###, markerContent2
Die erste Tabelle bezieht sich insofern auf die zweite (_templates), als dass sie auf die Templates zurückgreift die dort gespeichert werden.


Was das ganze bezwecken soll:
Ich will jedem Content-Eintrag ein vorgefertigtem Template zuweißen. In diesem Template wurden Marker eingetragen, die durch den Code aus der Datenbank ersetzt werden sollen. (Ich hoffe man kann es verstehen)

Bisher sieht der Code für das Script, das ich dafür habe aus wie folgt:
PHP-Code:
<?php

    
class BW_System
    
{
        public 
$content_array;


        private 
$content_template_dir 'system/templates/';


        public function 
get_content_array($param NULL)
        {
            
$sql "SELECT * FROM `"BW_CONTENT_TBL ."` WHERE `pageid` = '"$this->pageid ."' AND `published` = '1' ORDER BY `order` ASC";
            
$res $this->_db->execute($sql);
            if (
false === $res) die ('failed');

            if (
$this->_db->num_rows($res) > 0) {
                
$content_array = array ();
                for (
$i 0$i $this->_db->num_rows($res); $i++) {
                    
$row $this->_db->fetch_assoc($res);
                    
$row['content'] = $this->_parse_content_template($row['template_id'], $row['content']);

                    
$content_array[] = $row;
                }
            } else {
                
$content_array NULL;
                return 
false;
            }
            
$this->content_array $content_array;
            return 
true;
        }


        private function 
_parse_content_template($template_id$content)
        {
            
$template $this->_get_content_template($template_id);
            if (
false === $template$this->_error->error_handler(); # Fehlermeldung erstellen

            
$content explode ('|*|'$content);

            
/**** HIER GEHTS NICHT WEITER ****/
        
}


        private function 
_get_content_template($template_id)
        {
            
$sql "SELECT * FROM `"BW_TEMPLATE_TBL ."` WHERE `id` = '"$template_id ."'";
            
$res $this->_db->execute($sql);

            if (
$db->num_rows($res) > 0) {
                
$row $_db->fetch_assoc($res);
                
$file $this->content_template_dir $row['file'];

                if (
file_exists ($file)) {
                    
$template_code '';
                    @
$fp fopen ($file"r");

                    while (!
feof($fp)) {
                        
$template_code .= fgets ($fp4096));
                    }

                    
fclose ($fp);
                } else {
                    
$template_code NULL;
                    return 
false;
                }
            } else {
                
$template_code NULL;
                return 
false;
            }

            return 
$template_code;
        }
    }

?>
Ich habe es in den Code geschrieben, wo ich hängen bleibe. Wäre cool, wenn ich ein paar Hilfen bekäme, wie ich nun weitermachen muss!
Berti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.08.2007, 18:37 Nach oben    #2
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Du hast doch an der Stelle nun schonmal die einzelnen Inhalte in einem Array. Ich würde sagen, du gehst Inhalt für Inhalt durch und zerlegst ihn in Marker und MarkerContent. Damit bewaffnet machst du ein strreplace auf dein Template und erhälst so nun ein neues "Template", dass um einen Inhalt bereichert wurde. Ganz am Schluss hast den endgültigen Inhalt. So, Rest ist Transferleistung.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.08.2007, 18:52 Nach oben    #3
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 687
Standard

Ich bin ja ein absoluter Freund der Normalform in Datenbanken. Diese besagt u.A., dass in einem Feld einer Tabelle niemals mehr als eine Information stehen darf. Entsprechend würde ich die Tabellen oben noch etwas ausweiten:

_page
id => auto_increment
pageid => jeweilige Seiten-ID
template_id => id des Template (=> _templates)

_content
id => auto_increment
marker => ###markerName###
content => markerContent

Dann halt entsprechend in die Content-Tabelle mehrere Zeilen reinschreiben. Ist von der Datenbank her deutlich sauberer und lässt sich meiner Meinung nach auch einfacher administrieren.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.08.2007, 19:03 Nach oben    #4
Benutzer
 
Registriert seit: 18.06.2006
Ort: Straubing
Beiträge: 85
Standard

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
Ist von der Datenbank her deutlich sauberer und lässt sich meiner Meinung nach auch einfacher administrieren.
Ja, gebe ich dir recht. Danke für den Tipp!
Berti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2007, 10:10 Nach oben    #5
Benutzer
 
Registriert seit: 18.06.2006
Ort: Straubing
Beiträge: 85
Standard

EDIT: Problem gelöst. Ich hätte nur noch eventuell eine Frage, was ich besser machen kann?! Hier der Code:

PHP-Code:
<?php

    
class BW_System
    
{
        public 
$pageid 2;


        public 
$content_array;


        private 
$content_template_dir 'library/system/templates/';


        
/**
         * Klasse konfigurieren
         *
         * @access      public
         * @author      Adalbert Rohr <info@bero-web.de>
         * @param       object $singleton
         * @version     Version 1.0, 2007-08-30
         * @return      void
         */
        
public function BW_System(BW_Singleton &$singleton)
        {
            
$this->_db  $singleton->get_instance('db');
            
$this->_deb $singleton->get_instance('deb');
        }


        
/**
         * Aktuelle Inhalte der Seite abrufen
         *
         * @access      public
         * @author      Adalbert Rohr
         * @param       string $param
         * @version     Version 1.0, 2007-08-29
         * @return      boolean
         */
        
public function get_content_array($param NULL)
        {
            
$sql "SELECT * FROM `"BW_CONTENT_TBL ."` WHERE `pageid` = '"$this->pageid ."' AND `published` = '1' ORDER BY `order` ASC";
            
$res $this->_db->execute($sql);
            if (
false === $res) die ('failed');

            if (
$this->_db->num_rows($res) > 0) {
                
$content_array = array ();
                for (
$i 0$i $this->_db->num_rows($res); $i++) {
                    
$row $this->_db->fetch_assoc($res);
                    
$row['content'] = $this->_parse_content_template($row['template_id'], $row['content']);

                    
$content_array[] = $row;
                }
            } else {
                
$content_array NULL;
                return 
false;
            }
            
$this->content_array $content_array;
            return 
true;
        }


        
/**
         * Inhaltstemaplte durch Marker ersetzten
         *
         * @access      private
         * @author      Adalbert Rohr <info@bero-web.de>
         * @param       integer $template_id
         * @param       string $content
         * @version     Version 1.0, 2007-08-29
         * @return      string $code
         */
        
private function _parse_content_template($template_id$content)
        {
            
$template $this->_get_content_template($template_id);
            
#if (false === $template) $this->_deb->error_handler(); # Fehlermeldung erstellen

            
$content explode (';'$content);
            foreach (
$content as $key => $value) {
                
$value str_replace ('('''$value);
                
$value str_replace (')'''$value);
                
$value explode (':'$value);

                
$template str_replace ('###'$value[0] .'###'$value[1], $template);
            }

            return 
$template;
        }


        
/**
         * Inhaltstemplate einlesen und zur Verarbeitung aufbereiten
         *
         * @access      private
         * @author      Adalbert Rohr <info@bero-web.de>
         * @param       integer $template_id
         * @version     Version 1.0, 2007-08-29
         * @return      string $template_code
         */
        
private function _get_content_template($template_id)
        {
            
$sql "SELECT * FROM `"BW_TEMPLATE_TBL ."` WHERE `id` = '"$template_id ."'";
            
$res $this->_db->execute($sql);
            if (
false === $res) die ('failed');

            if (
$this->_db->num_rows($res) > 0) {
                
$row $this->_db->fetch_assoc($res);
                
$file $this->content_template_dir $row['file'];

                if (
file_exists ($file)) {
                    
$template_code '';
                    @
$fp fopen ($file"r");

                    while (!
feof($fp)) {
                        
$template_code .= fgets ($fp4096);
                    }

                    
fclose ($fp);
                } else {
                    
$template_code NULL;
                    return 
false;
                }
            } else {
                
$template_code NULL;
                return 
false;
            }

            return 
$template_code;
        }
    }

?>

Geändert von Berti (31.08.2007 um 10:13 Uhr)
Berti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2007, 14:49 Nach oben    #6
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Hi.

Zitat:
Zitat von Berti Beitrag anzeigen
Ich hätte nur noch eventuell eine Frage, was ich besser machen kann?!
- Den Default-Wert für das Content-Verzeichnis würde ich aus der Klasse verbannen und z.B. dem Konstruktor übergeben (bzw. diesem ein Config-Objekt mit der entsprechenden Info übergeben).

- Den Konstruktor würde ich __construct() nennen.

- Das & vor $singleton (1. Parameter des Konstruktors) kannst du dir sparen.

- Singleton ist die Bezeichnung für ein klar definiertes Entwurfsmuster, das du hier ja nicht verwendest. Wähle daher besser einen anderen Namen.

- BW_System::_db und …::_deb sind nicht deklariert.

- BW_System::pageid ist public, daher prüfen, bevor du es in eine DB-Query schreibst.

- Das * in der SELECT-Query solltest du durch die Liste der Spalten ersetzen. Siehe hierzu den Punkt in der dclp-FAQ.

- Bei der DB-Klasse würde ich als Ergebnis einer Query ein Objekt zurückgeben, aus dem du dann auch num_rows ziehen kannst. Diese direkt aus dem DB-Objekt zu beziehen ist fehleranfällig. Methoden würde ich auch immer mit einem Verb versehen: getNumRows() oder so.

- Anstatt der for-Schleife (über die Ergebnisliste der DB-Abfrage) kannst du auch gleich eine while-Schleife mit Zuweisung benutzen.

- Dein Datenformat für die Werte, die ins Template kommen scheint mir sehr wackelig zu sein. Was, wenn diese Klammern, Semikolon, Doppelpunkte oder drei Doppelkreuze in Folge enthalten? Warum verwendest du nicht csv oder serialize()? (Abgesehen vom genannten Punkt der Normalisierung)

- Schau dir mal file_get_contents() an.

Soweit mal, was mir gerade so ins Auge springt.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2007, 15:14 Nach oben    #7
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

*hust* Die Vorschläge von Basti gehen davon aus, dass du PHP5 nutzt *hust*
Wenn nicht *hust* installiere es prompt. *hust-ende*

Ne, im Ernst. Da du private nutzt, nutzt du PHP5. Also in Zukunft Bastis Vorschläge befolgen und gleich einheitlich machen.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2007, 15:25 Nach oben    #8
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Klar nutzt er PHP5... Sonst würde es schon daran scheitern: "private function [...]"
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hilfe benötigt... arcor Allgemeine Java-Programmierung 6 25.01.2006 19:19
Testdaten erzeugen Robinson Plauderecke 3 11.12.2005 19:21
Look and feel selbst erzeugen alekz Desktop-Applikationen und Grafik 4 29.08.2005 13:20
MySQL Tabellen erzeugen mit anschließendem inhalt noxx PHP-Programmierung 3 13.04.2005 21:08
MenuItem Action Listener automatisch erzeugen `B Desktop-Applikationen und Grafik 5 24.02.2005 11:03


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45