PEAR, setTemplate()
berd
- php
Hallo zusammen,
benötige Hilfe in bei folgendem Problem.
mit PEAR über die Klasse "HTML_Template_ITX" in einem schon geladenem Template, dass mit "loadTemplateFile" geladen worden ist möchte ich nachträglich ein Template nach laden. Laut:
http://pear.php.net/manual/de/package.html.html-template-it.settemplate.php
sollte das mit setTemplate() gehen, leide funktioniert dass bei mir nicht.
Der Aufbaue der Klasse, die das Template läd ist folgend:
class ladeTempalte
{
var $tpl_dir = "www/Projekt1/php/includes/";
var $tpl_file = "www/Projekt1/Templates/myTempalte1.html";
var $tpl_file2 = "www/Projekt1/Templates/myTempalte2.html";
/*
Im $tpl_file2 etwa der gleiche Inhalt wie in der Variable $templateString.
*/
var $templateString = "<table>
<tr>
<td>
nur ein Bsp. Text. {BSP_VARIABLE}
</td>
</tr>
</table>";
function anzeigen()
{
...
$this->tpl->setVariable( $templateString, false, false );
/*
Folgender Ergebnis, es werden alle Variable in geschweiften Klammern angezeigt, die übergeben Variable wird nicht angezeigt.
*/
$this->tpl->setTemplate( $templateString );
/*
Es wird nicht angezeigt.
*/
$this->tpl->loadTemplatefile($this->tpl_file2 );
/*
Leider wird das Tempalte nicht geladen
*/
}
function oeffnenTemplate(){
$this->tpl = new HTML_Template_ITX( $this->tpl_dir );
$this->tpl->loadTemplateFile( $this->tpl_file1 );
}
}
Kann mir jemand in dieser Angelegenheit weiter helfen?
Wo liegt der Fehler beim laden der Tempaltes?
Bei PEAR bein ich leider Neuling :-(
Grüße berd
Ich grüsse den Cosmos,
> class ladeTempalte
> {
>
> var $tpl_dir = "www/Projekt1/php/includes/";
> var $tpl_file = "www/Projekt1/Templates/myTempalte1.html";
> var $tpl_file2 = "www/Projekt1/Templates/myTempalte2.html";
Schuss ins Blaue: Dein Script, das diese Klasse einbindet und die methode aufruft liegt nicht im richtigen Verzeichnis, in diesem Fall im gleichen Verzeichnis, wie der Ordner www/
Prüf nochmal, ob diese relativen Pfad stimmen.
Möge das "Self" mit euch sein
Hallo,
class ladeTempalte
{var $tpl_dir = "www/Projekt1/php/includes/";
var $tpl_file = "www/Projekt1/Templates/myTempalte1.html";
var $tpl_file2 = "www/Projekt1/Templates/myTempalte2.html";
>
Es handelt sich hier leider um Bsp Pfade.
> Schuss ins Blaue: Dein Script, das diese Klasse einbindet und die methode aufruft liegt nicht im richtigen Verzeichnis, in diesem Fall im gleichen Verzeichnis, wie der Ordner www/
>
> Prüf nochmal, ob diese relativen Pfad stimmen.
Im Augenblick habe ich folgendes heraus gefunden:
$tmpTmplate = file\_get\_contents($this->tpl\_file2);
$this->tpl->setVariable('ZUSATZ\_TEMPLATE\_LADEN', $tmpTmplate );
Das Tempalte wird geladen, leider alle Variablen, die dort enthalten sind gehen verloren :-(
Kennst Du eine Lösung?
Grüße berd
Ich grüsse den Cosmos,
Es handelt sich hier leider um Bsp Pfade.
Schön, das solche relevanten Infos unterschlagen werden. Ist ja auch blödsinn, den helfenden soviel echte Infos wie möglich zu geben, um ihnen die Arbeit zu ersparen, falsche fehler zu analysieren.
Kennst Du eine Lösung?
Ja, steig auf Smarty um. Ich nutze zwar aus anderen Gründen HTML_Template_IT nicht mehr, aufgrund der verschwendeten Zeit in meinem voherigen Posting hab ich aber auch keine Lust mehr, dein Beispiel zu testen.
Möge das "Self" mit euch sein
echo $begrüßung;
leider funktioniert dass bei mir nicht.
Wie äußert sich das "funktioniert nicht" in deinem Fall konkret? Geben die verwendeten Methoden ein Ergebnis zurück? Geben sie anderweitig einen Fehlerzustand bekannt? Hast du das error_reporting auf E_ALL stehen? Hat die Ausgabe der Variableninhalte (insbesondere auch von $this->tpl -- es empfiehlt sich, die print_r()- bzw. var_dump()-Ausgabe mit einem <pre> einzuleiten) vor und nach den Methodenaufrufen irgendwelche Erkenntnisse gebracht? Da der Quelltext der PEAR-Klasse vorliegt, könntest du durch Lektüre desselben eventuelle Kenntnisse erlangen. Du kannst ihn auch (vorübergehend) mit Debug-Ausgaben spicken. Ich lasse diese immer in Spalte 1 beginnen. Da der restliche Quelltext schön eingerückt ist, fallen diese Debug-Zeilen ins Auge, so dass man sie später schnell wiederfindet.
echo "$verabschiedung $name";
Hallo,
leider funktioniert dass bei mir nicht.
Wie äußert sich das "funktioniert nicht" in deinem Fall konkret?
dh. ich es wird keine Meldung gezeigt, wie ich im Qeulletxte von php geschrieben habe.
Leider arbeite ich auf einem entferntem Server und dort habe ich "keine Rechte" um sich die Logdateien anzuschauen, also kann ich nur das beschreiben, was der Browser anzeigt.
Geben die verwendeten Methoden ein Ergebnis zurück? Geben sie anderweitig einen Fehlerzustand bekannt? Hast du das error_reporting auf E_ALL stehen? Hat die Ausgabe der Variableninhalte (insbesondere auch von $this->tpl -- es empfiehlt sich, die print_r()- bzw. var_dump()-Ausgabe mit einem <pre> einzuleiten) vor und nach den
Methodenaufrufen irgendwelche Erkenntnisse gebracht?
Gute Idee, habe $this->tpl ausgeben lassen nach dem "laden" des neuen Template, vor dem laden sind die Variable nicht gestzt:
...
$this->tpl->loadTemplatefile($this->tpl_file2 );
echo "<pre>";
print_r ( $this->tpl );
echo "</pre>";
und folgendes gefunden:
[blocklist] => Array
(
[__global__] => www/Projekt1/Templates/myTempalte2.html
)
...
[blockvariables] => Array
(
[myTemplate_1] => Array
(
[BSP_VARIABLE] => 1
)
/*
Daraus schlisse ich das dass das zweite Template geladen worden ist
aber kommentier ich "<pre>" aus ist die Seite leer.
*/
)
[blockinner] => Array
(
[__global__] => Array
(
...
[7]=>myTemplate_1
)
)
[blockparents] => Array
(
[myTemplate_1] => __global__
)
...
Da der Quelltext der PEAR-Klasse vorliegt, könntest du durch Lektüre desselben eventuelle Kenntnisse erlangen. Du kannst ihn auch (vorübergehend) mit Debug-Ausgaben spicken. Ich lasse diese immer in Spalte 1 beginnen. Da der restliche Quelltext schön eingerückt ist, fallen diese Debug-Zeilen ins Auge, so dass man sie später schnell wiederfindet.
Leider so gut kenne ich noch PEAR nicht, das ich diese Option durch führen kann :-(
grüße berd
echo $begrüßung;
[blocklist] => Array
(
[__global__] => www/Projekt1/Templates/myTempalte2.html
)
Ich glaube nicht, dass hier ein Dateiname drinstehen muss. Ich erwarte da eher den Inhalt der Templatedatei. Der ist für die Template-Klasse nicht weiter relevant, wenn der Inhalt der Datei erst einmal gelesen wurde. Ich denke, an der Stelle solltest du weiterforschen.
Da der Quelltext der PEAR-Klasse vorliegt, könntest du durch Lektüre desselben eventuelle Kenntnisse erlangen. Du kannst ihn auch (vorübergehend) mit Debug-Ausgaben spicken. Ich lasse diese immer in Spalte 1 beginnen. Da der restliche Quelltext schön eingerückt ist, fallen diese Debug-Zeilen ins Auge, so dass man sie später schnell wiederfindet.
Leider so gut kenne ich noch PEAR nicht, das ich diese Option durch führen kann :-(
Ach komm ... nun versteck dich nicht hinter Nicht-Wissen :-) PEAR ist auch nur PHP-Code, den jemand anderes geschrieben hat. Die Fähigkeit, Code anderer Leute lesen und verstehen zu können, sollte man als Programmierer schon haben. Wenn nicht sollte man das üben. Spätestens nach einem Jahr braucht man das für seine selbst verfassten Quelltexte ... :-)
echo "$verabschiedung $name";
Hallo,
echo $begrüßung;
[blocklist] => Array
(
[__global__] => www/Projekt1/Templates/myTempalte2.html
)
»»Ich glaube nicht, dass hier ein Dateiname drinstehen muss. Ich erwarte da eher den Inhalt der Templatedatei. Der ist für die Template-Klasse nicht weiter relevant, wenn der Inhalt der Datei erst einmal gelesen wurde. Ich denke, an der Stelle solltest du weiterforschen.
Also daraus folgt für mich die Variablen in geschweiften Klammern müssten in dem Array "blockvariables" erscheinen oder?
Eine Anmerkung, das erste Tempalte:
var $tpl_file = "www/Projekt1/Templates/myTempalte1.html";
wurde geladen und innerhalb des Tempaltes soll ein zweites geladen werde
var $tpl_file = "www/Projekt1/Templates/myTempalte2.html";
dass nur eine Tabelle beinhlatet. Wenn ich es mit "setTemplate" aufrufe oder anders gesagt laden möchte, woher soll die ITX Klasse wiesen an welche Position soll das Template geladen werden?
Zu der ursprünglichen Problem, beim Aufruf des "myTemplate2.html" läuft was schief!
Da der Quelltext der PEAR-Klasse vorliegt, könntest du durch Lektüre desselben eventuelle Kenntnisse erlangen. Du kannst ihn auch (vorübergehend) mit Debug-Ausgaben spicken. Ich lasse diese immer in Spalte 1 beginnen. Da der restliche Quelltext schön eingerückt ist, fallen diese Debug-Zeilen ins Auge, so dass man sie später schnell wiederfindet.
Leider so gut kenne ich noch PEAR nicht, das ich diese Option durch führen kann :-(
»»Ach komm ... nun versteck dich nicht hinter Nicht-Wissen :-) PEAR ist auch nur PHP-Code, den jemand anderes geschrieben hat. Die Fähigkeit, Code anderer Leute lesen und verstehen zu können, sollte man als Programmierer schon haben. Wenn nicht sollte man das üben. Spätestens nach einem Jahr braucht man das für seine selbst verfassten Quelltexte ... :-)
Stimmt, die Klasse "ITX.php" ist bei mir includet, diese erbt von der IT Klasse.
Diese Klassen sind im Projekt eingebunden, also ich würde sagen, dass das parsen, des Template nicht PEAR macht sondern die ITX.php Klasse.
Kurze Vorgeschichte. Das Projekt wurde bei uns in der Firma von einem anderem Projekt "abgelegt", dh. Teile des Quellecodes haben wir einfach aus einem anderem Projekt, der auf ähnliche Weise arbeitet übernommen, dh. nur das was wir benötigen leider ohne dabei auf den Code zu achten, wenn es etwas nicht funktioniert erst dann muss man sich hinsetzten und selber schreiben.
grüße berd
echo $begrüßung;
[...] die Klasse "ITX.php" ist bei mir includet, diese erbt von der IT Klasse.
Das heißt, ITX ist gar nicht die PEAR-Klasse, sondern eine eigene, deren Grundlage die IT bildet. Sag das doch gleich, denn die IT ist mir früher mal bekannt gewesen.
[blocklist] => Array
(
[__global__] => www/Projekt1/Templates/myTempalte2.html
)
Die IT arbeitet mit Blöcken. __global__ ist der globale, in dem die Platzhalter ersetzt werden, wenn grad kein anderweitiger Block aktiv ist. Hier sollte also der Text des Templates drinstehen.
Eine Anmerkung, das erste Tempalte:
wurde geladen und innerhalb des Tempaltes soll ein zweites geladen werde
dass nur eine Tabelle beinhlatet. Wenn ich es mit "setTemplate" aufrufe oder anders gesagt laden möchte, woher soll die ITX Klasse wiesen an welche Position soll das Template geladen werden?
Die IT kann kein Inkludieren. HTML_Template_Sigma ist eine auf IT basierende oder daraus hervorgegangene Klasse, die mehr Funktionsumfang hat, unter anderem auch Inkludieren. In der IT musst du einen Platzhalter an die Stelle einfügen, an der die Tabelle später eingefügt werden soll. Für die Tabelle benötigst du eine zweite IT-Instanz, die du ganz normal mit Template und Platzhalterwerten versorgst. Wenn fertig holst du das Ergebnis mit der Methode get() ab und übergibst es an den Platzhalter im ersten Template.
echo "$verabschiedung $name";
Hallo,
von einem Kollegen habe ich die etwas andere Lösung bekommen:
$this->tpl->addBlockfile('Template2', 'myNeuerTemplate3', 'myTempalte2.html' );
$this->tpl->setCurrentBlock('myNeuerTemplate3');
$this->tpl->parseCurrentBlock();
Template2 - ist der Variablenname in der geschweiften Klammer.
myNeuerTemplate3 - neuen Name für den Template
es erfühlt den Zweck :-(
Für die Hintergründe habe ich leider nicht so viel Zeit.
Trotz dem für Deine Hilfe.
Falls Du ein Idee hast wie man das anders löst, bin bereit mir die anzuschauen.
grüße berd