PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OOP und Templates



Andislack
25-04-2003, 21:24
hi!

ich bin gerade dabei mir eine allgemeine klasse für meine templates zu schreiben.
die allgemeine klasse funktioniert auch, aber mit der an die ich vererbt habe wird nichts angefangen!?
also mein main.tpl sieht so aus nur zum verständnis



<!--main.tpl-->
<html>
<head>
{TITEL}
{SCRIPTS}
{CSS}
</head>
<body>
<table width='100%'>
<tr>
<td colspan='2' height='150'>{LOGO}</td>
</tr>
<tr>
<td width='150'>{MENUE}</td>
<td width='*' valign='top'>{MAINLOGO}</td>
</tr>
</table>
</body>
</html>
</--main.tpl-->


wie gesagt, die erste klasse wird einwandfrei ausgegeben (für {LOGO} und {MENUE}), aber die andere, in der ich die inhalte von {MAINLOGO}, {TITEL}, {SCRIPTS} und {MENUSCRIPT}" hinzufüge, wird völlig unberücksichtigt gelassen.
ob ich im mom am ende


$tpl = new ersatz($tpl);
oder
$tpl = new maintpl($tpl);

aufrufe, es wird immer das gleiche ausgegeben...beides ohne die komplette class ersatz.
hier mal meine classen...


<?php

include "../../template/class.FastTemplate.php3";

//Allgemeine Template class maintpl definieren, die auf jeder Seite
//immer gleich angezeigt werden soll

class maintpl {
var $tpl;

function maintpl($tpl) {
$this->tpl = $tpl;
$this->tpl = $tpl = new FastTemplate(".");
$this->tpl = $tpl->define(array( css => "../tpl/mbmcss.tpl",
logo => "../tpl/logo.tpl",
menue => "../tpl/menu.tpl",
main => "../tpl/main.tpl"));

$this->tpl = $tpl->parse("{CSS}", "css");
$this->tpl = $tpl->parse("{LOGO}", "logo");
$this->tpl = $tpl->parse("{MENUE}", "menue");
$this->tpl = $tpl->parse("{MAIN}", "main");
$this->tpl = $tpl->FastPrint("{MAIN}");
}
}//maintpl
//Ende Allgemeine class maintpl

//Definieren der class ersatz, die jeweils den Inhalt von {MAINLOGO} beinhaltet

class ersatz extends maintpl {
function template(){
$this->tpl = $tpl->define(array( titel => "../tpl/titel.tpl",
mainlogo => "../ersatzteile/ersatzteile.tpl",
menuscript => "../../scripts/menuscript.tpl",
scripts => "../../scripts/none.tpl"));

$this->tpl = $tpl->parse("{TITEL}", "titel");
$this->tpl = $tpl->parse("{MAINLOGO}", "mainlogo");
$this->tpl = $tpl->parse("{SCRIPTS}", "scripts");
$this->tpl = $tpl->parse("{MENUSCRIPT}", "menuscript");
}
}//Ende class ersatz

//Aufruf einer Instanz von der class ersatz
//und damit auch maintpl um {MAINLOGO} zu füllen

$tpl = new ersatz($tpl);

?>


Ich hab mit OOP erst angefangen... :cool:
wär nett, wenn sich das mal jemand ansehen könnte

schönes woe gruss andi

magpie
25-04-2003, 21:41
Hi

Ich bin grad zu doof um den Code zu verstehen :rolleyes:

Schau dir aber mal den Beitrag an http://www.mrunix.de/forums/showthread.php?s=&threadid=30758

gruss magpie

Andislack
25-04-2003, 21:50
hi magpie!

also ich versuche genau das, was Gaert bei dir nicht angebracht fand...:p

ich möchte eigentlich nur die eigenschaften der class maintpl weitervererben und dann mit der class ersatz erweitern.
somit könnte ich die class maintpl immer mit include einbinden und dann die class ersatz für jede seite neu definieren.

aber class ersatz wird nicht berücksichtigt, so wie ich das mache.
class maintpl wird korrekt abgearbeitet und auch ausgegeben, nur halt class ersatz nicht.

trotzdem danke!

andi

mehlvogel
25-04-2003, 22:11
Ich versteh dein Problem leider net wirklich. Und die OOP und Klassenunterstürtzung in PHP ist noch voll zum kotzen.

durch



$tpl = new ersatz();


wird aber nichts aufgerufen. Die Klasse ersatz selbsst hat keinen Konstruktor (Funktion ersatz() ) - und ich glaube nicht das der Konstruktor von maintpl aufgerufen wird. Falls das dein Problem war. Sonst schreibt dir doch nen Konstruktor so in der Art:



function ersatz() {
$this->maintpl();
}


Oder war das auf End gar net dein Problem?

Andislack
25-04-2003, 22:35
hi mehlvogel!

also durch


$tpl = new ersatz();

wird die class maintpl aufgerufen, da


class ersatz extends maintpl{...

und da die class maintpl einen konstruktor hat, wird dieser automatisch mit aufgerufen.

mit
$tpl = new ersatz();
möchte ich aber auch die


function template($tpl);

in der class ersatz aufrufen, damit mein {MAINLOGO} geparst wird, aber das tut er eben nicht!
ob die funktion template ($tpl); da ist oder nicht, ist völlig egal.
also mein problem ist, dass die


function template($tpl)

nicht aufgerufen wird!

wenns noch probleme zu dem verständnis meines problem gibt :eek: dann einfach nochmal fragen...

andi

mehlvogel
26-04-2003, 08:06
Ja bei PHP ist die OOP ein wenig zum kotzen ;) Hab mal auf der PHP Seite nachgeschaut. Sobald die Klasse Ersatz nen Konstruktor hat wird der von maintpl net mehr aufgerufen (laut Manual (http://de3.php.net/manual/en/keyword.extends.php).

Zu deinem eigentlichen Problem: Warum rufst du die Methode nicht einfach auf? Entweder so



$test = ner Ersat();
$test->template();


Oder wenn es vor dem Aufruf des maintpl Konstruktors sein muss (keine das Templatesystem net):



class ersatz {
function ersatz() {
$this->template();
$this->maintpl();
}
}


Der Punkt ist, so wie ich das sehe rufst du die Funktion ja gar net auf.