php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.03.2006, 16:13  
Benutzer
 
Registriert seit: 18.01.2004
Beiträge: 68
Pain-maker
Pain-maker eine Nachricht über ICQ schicken
Standard Vererbung bei Templates

Hi @ all!
Ich würde gerne ein Vererbungssystem für meine Template-Klasse schreiben. Bsp:

Code:
01 templates (20/20 Templates)
 |
 +-- 02 templates/test1 (13/20 Templates)
      |
      +-- 03 templates/test2 (4/20 Templates)
Der Template-Ordner "test2" wird benutzt. In ihm sind 4 Templates enthalten. Die anderen Templates sollen aus dem übergeordneten Template-Ordner "test1" genommen werden. Da dort allerdings auch nicht alle Templates enthalten sind, werden die fehlenden wiederum aus dem übergeordnetem Template-Ordner "templates" genommen, der in dem Fall auch der Standard-Ordner ist.
Die Ordner sind in einer DB "templatefolders".

So eine Struktur die praktisch bis ins unendliche gehen kann würde ich nun gerne realisieren.

Meine Template-Klasse:
Code:
<?php

class template {

	protected $template_dir = "templates/";	// Template-Ordner
	protected $tpl_extension = "tpl";			// Template-Endung
	protected $template_file = "";				// Kompletter Pfad zum Template-Ordner
	protected $template_name = "";				// Template-Dateiname

	protected function load($file) {
		$this->template_name = $file;
		$this->template_file = $this->template_dir.$file;
		if(@!$this->template = file_get_contents($this->template_file)) {
			echo "<p align=\"center\" style=\"padding:0px; margin:0px;\"><span class=\"error\">Das Template \"".$this->template_dir.$file."\" konnte nicht geladen werden!</span></p>";
			return false;
		} else {
			return true;
		}
	}

	public function out($template) {
		$this->load($template.".".$this->tpl_extension);
		return str_replace("\"","\\\"",$this->template);
	}

}

?>
Für jegliche Denkanstöße/Codeschnippsel/Links bin ich sehr dankbar

//PS: Schade die PHP-Funktion geht ncht dehalb nutz ich [code]

MFG Pain-maker
Pain-maker ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 26.03.2006, 16:27  
Gast
 
Beiträge: n/a
Standard

Eine performante Methode solche Bäume in Datenbanken zu speichern sind Nested Sets:
http://www.php-resource.de/tutorials/read/21/1/
  Mit Zitat antworten
Alt 26.03.2006, 17:03  
Benutzer
 
Registriert seit: 18.01.2004
Beiträge: 68
Pain-maker
Pain-maker eine Nachricht über ICQ schicken
Standard

Mmhh... irgendwie wurd ich jetz missverstanden xD
Das obige Modell dient nur zur Näheren erläuterung.
Ich möchte ein Template-Vererbungssystem!
Das Fehlende Templates aus einem übergeordnetem Ordner genommen werden.

@xardie:
Wie ich eine Baumstruktur mache weiss ich.
Aber damit kann ich in dem Fall eigentlich wenig mit anfangen.
Trotzdem danke!
Falls ich damit allerdings doch mein Problem lösen kann, bitte ich um genauere Erläuterung mit Codeschnippseln vielleicht.
Pain-maker ist offline   Mit Zitat antworten
Alt 26.03.2006, 18:28  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Was heißt denn Template-Vererbung bei dir?
Vererbst du die TPL-Dateien (verstehe nicht wie das gehen soll) oder die Werte?

Also
PHP-Code:
<?php
class TemplateDefault {
  var 
$title 'Unbenannt';
  var 
$author 'Unbekannt';
}
class 
Template extends TemplateDefault {
  var 
$author 'Mitarbeiter 12';
}
?>
Was ist denn deine Frage? Geht es dir um Design oder um die PHP-Umsetzung?
Zergling-new ist offline   Mit Zitat antworten
Alt 26.03.2006, 18:49  
Benutzer
 
Registriert seit: 18.01.2004
Beiträge: 68
Pain-maker
Pain-maker eine Nachricht über ICQ schicken
Standard

Ich möchte das aus Ordner X fehlende Templates aus dem Ordner Y genommen werden.
In einer DB soll dabei angegeben sein welche der übergeordnete Order für X ist.
Das könnte dann eben so aussehen:
Ordner X --nehme fehlende Templates aus--> Ordner Y --nehme fehlende Templates aus--> Ordner Z

Hoffe jetzt ist es klarer geworden
Pain-maker ist offline   Mit Zitat antworten
Alt 26.03.2006, 19:07  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hallo "Pain-maker".

Schau dir mal das "Chain of Responsibility"-Pattern an.

PHP-Code:
<?php
class template {

    private 
$Successor null;

    protected function 
load($file) {
        
$this->template_name $file;
        
$this->template_file $this->template_dir.$file;
        if (
file_exists($this->template_file)) {
            
$this->template file_get_contents($this->template_file);
            return 
true;
        } else if (!isset(
$this->Successor)) {
            return 
false;
        } else
            return 
$this->Successor->load($file);    
    }

        public function 
setSuccessor(Template $Successor)
        {
            
$this->Successor $Template;
        }
}

$t1 = new template('/test2');
$t2 = new template('/test1');
$t3 = new template('/');

$t1->setSuccessor($t2);
$t2->setSuccessor($t3);
?>
Das wäre etwa das Prinzip. Du baust also Kette aus den zuständien Objekten, indem
du jedem Objekt das nächste Objekt in der Kette übergibst. Wenn nun eine Methode
aufgerufen wird prüfst du, ob diese von dem Objekt bearbeitet werden kann. Wenn
nicht, gibst du de Aufgabe an das nächste Objekt in der Kette weiter und schleifst
dann in die andere Richtung die Ergebnisse wieder durch.

Basti
Basti ist offline   Mit Zitat antworten
Alt 26.03.2006, 19:25  
Benutzer
 
Registriert seit: 18.01.2004
Beiträge: 68
Pain-maker
Pain-maker eine Nachricht über ICQ schicken
Standard

Mmh... das ist schon mal nicht schlecht!
Allerdings muss ich da manuell angeben welche die Ordner sind und hab eine feste Ablaufskette von Ordnern.
Das will ich umgehen, da die Template-Ordner aus der DB kommen sollen und auch die zugehörigen übergeordneten Ordner.

Wie könnt ich das damit relisieren?

Danke schon mal
Pain-maker ist offline   Mit Zitat antworten
Alt 26.03.2006, 20:07  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Na das war doch nur so dahingeschrieben. Wie du das letztlich sinnvoll realisieren kannst hängt von verscheidenen Faktoren ab. Die erste Frage ist, an welcher Stelle die Information der Kette bekannt ist. Diese auszulesen könnte z.B. eine Template-Factory übernehmen. Den Job kann aber auch jedes Template-Objekt selbst übernehmen oder, um DB-Zugriffe zu reduzieren das erste Objekt in der Kette.

Prinzipiell ist auch die Frage, ob du mehrere unterschiedliche Template-Klassen hast bzw. ob das Abarbeiten einer Anfrage in internes Problem der Klasse ist etc. Der Punkt ist der, dass das Funktionieren dieser Ketten-Funktionalität so in der Klasse selbst liegt und jede neue Template-Klasse diese selbst und korrekt implementieren muss, damit der ganze Komplex funktioniert. Dabei macht es dann Sinn, den Mechanismus in eine Basisklasse Template oder auch eine Manager-Klasse oder so auszulagern (wobei letzteres dann natürlich keine CoR wäre).

Siehe z.B. hier:
http://www.javaworld.com/javaworld/j...816-chain.html

Basti
Basti ist offline   Mit Zitat antworten
Alt 27.03.2006, 23:16  
Benutzer
 
Registriert seit: 18.01.2004
Beiträge: 68
Pain-maker
Pain-maker eine Nachricht über ICQ schicken
Standard

Gut also ich hab's jetzt mir nem Array gelöst und 'ner while-schlife!
Ich danke allen die mir geholfen haben!

LG Pain-maker
Pain-maker ist offline   Mit Zitat antworten
Alt 28.03.2006, 10:05  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von Pain-maker
Gut also ich hab's jetzt mir nem Array gelöst und 'ner while-schlife!
Warum in die Ferne schweifen ...?
Ich war davon ausgegangen, dass diese Lösung für dich nicht in Frage kommt. Ist natürlich das absolut naheligendste. :D

Basti
Basti ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
templates und Co Elta PHP Tipps 2008 6 14.07.2008 15:13
templates oder css mit firefox rbs_phoenix HTML, Usability und Barrierefreiheit 1 30.10.2006 15:24
if abfragen in Templates rob1011 PHP Tipps 2006 13 03.08.2006 15:55
Templates - Variablen $tpl['dies']['und']['das'] Alpha Centauri PHP Tipps 2006 12 08.03.2006 14:39
E-Mail Templates Mano PHP Tipps 2005-2 4 09.10.2005 14:52
Templates - DB oder File? PHP Tipps 2005-2 11 23.07.2005 05:30
Templates per ACP PHP Tipps 2005-2 0 26.06.2005 20:00
[Erledigt] Templates PHP Tipps 2005 4 06.04.2005 16:24
Templates GrU3nL!nG PHP Tipps 2005 6 26.03.2005 14:47
Mit Templates Navigation erstellen? (welches Templatesyste?) zwelch PHP Tipps 2004-2 5 18.11.2004 15:14
[Erledigt] Wieder mal Templates! PHP-Fortgeschrittene 1 10.09.2004 11:42
Problem bei HP basierend auf Templates PHP Tipps 2004 3 17.07.2004 12:37
Templates PHP Tipps 2004 5 29.06.2004 16:30
Problem mit Templates suter PHP Tipps 2004 3 23.06.2004 14:40
Wie benutze ich Templates? PHP Tipps 2004 5 11.06.2004 13:23

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php vererbung ordnerstruktur, php template vererbung, php ordnerstruktur vererbung, klasse vererben php anderer ordner, templates vererbung tamplate, html template vererben, vererbung html templates, class templates { var $template; public function templates($file) { $this->load($file); }, vererbung template klasse, templates vererbung vbulletin, template vererbung :: code, file(templates/$template.\.\.$endung), vererbung von templates

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:11 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.