Beitrag von Thomas H. (180 Beiträge) am Sonntag, 2.April.2006, 18:52.
include im perl
Hi,
mal wieder ein Syntaxproblem.
In dem folgenden Teil soll von einem ausgelagerten Template,
in dem sich verschiedene Codeblöcke befinden ein bestimmter Block geladen werden:
<perl>
get "Id==$Id", "datenbank";
if($_amount_query < 1) {
out <<EOF;
<html> bla bla bla </hmtl>
EOF
include "template_mit_codebloecken code==1";
out <<EOF;
</html>
EOF
</perl>
Es kommt aber eine Fehlermeldung. Seite existiert nicht oder sowas.
Es nehme an, die Schreibweise mit dem code==1
include "template_mit_codebloecken code==1";
ist falsch.
Oder?
Gruß
Thomas
Antworten
Beitrag von richard (1187 Beiträge) am Sonntag, 2.April.2006, 20:15.
Re: include im perl
Laß das code==1 weg. Include lädt meines Wissens ganze Dateien und keine Teile davon.
Antworten
Beitrag von Thomas H. (180 Beiträge) am Sonntag, 2.April.2006, 20:31.
Re: include im perl
Antworten
Beitrag von Thomas H. (180 Beiträge) am Sonntag, 2.April.2006, 21:00.
Re: include im perl
Antworten
Beitrag von richard (1187 Beiträge) am Sonntag, 2.April.2006, 21:03.
Re: include im perl
Entweder mußt Du für jeden Deiner Codeblöcke eine eigene Datei erstellen oder wahrscheinlich besser, Du schreibst Deine Codeblöcke als Unterfunktionen. Die kannst Du alle zusammen in einer Datei speichern. Mit dem include der Datei stehen diese Unterfunktinoen dann in dem Template zur Verfügung und können je nach Bedarf aufgerufen werden.
Antworten
Beitrag von richard (1187 Beiträge) am Sonntag, 2.April.2006, 21:08.
Re: include im perl
Oder:
Du kannst mal versuchen das <perl> wegzulassen.
Antworten
Beitrag von Thomas H. (180 Beiträge) am Sonntag, 2.April.2006, 21:14.
Re: include im perl
Genau das mit den Codeblöcken will ja machen :-)
D.h. so mache ich es schon seit einiger Zeit.
Wie schon gesagt, mit:
<include src=template_mit_codebloecken code==1>
funktioniert das Prinzip ja auch.
Aber wenn ich das so.....
<perl>
get "Id==$Id", "datenbank";
if($_amount_query < 1) {
out <<EOF;
<html> bla bla bla
<include src=template_mit_codebloecken code==1>
</hmtl>
EOF
</perl>
...in das Script setze wird überhaupt nichts
includiert.
Antworten
Beitrag von richard (1187 Beiträge) am Sonntag, 2.April.2006, 21:42.
Re: include im perl
Innerhalb von Perl mußt Du wahrscheinlich mit handfestem Perl, z.b. Modulen arbeiten.
Vielleicht gehts aber auch so:
<perl>
get "Id==$Id", "datenbank";
if($_amount_query < 1) {
out <<EOF;
<html> bla bla bla
EOF
</perl>
<include src=template_mit_codebloecken code==1>
<perl>
out <<EOF;
</hmtl>
EOF
</perl>
Antworten
Beitrag von Thomas H. (180 Beiträge) am Sonntag, 2.April.2006, 21:52.
Re: include im perl
Nee. leider nicht.
Zwischen
out <<EOF; und EOF darf ( soweit ich weiß), kein Perl.
Habe gerade nochmal ein einen Test gemacht und den zu includierenden
Block in eine separate Datei geschrieben...
<perl>
get "Id==$Id", "datenbank";
if($_amount_query < 1) {
out <<EOF;
<html> bla bla bla
EOF
include "Block1";
out <<EOF;
</hmtl>
EOF
</perl>
...dann geht´s auch. Es liegt also, wie ich schon vermutet habe,
am code==1. Dafür gibt´s eventuell eine andere Variante.
Ich befürchte aber das gerade da der Haken liegt. Die Datei, welche includiert wird enthält ja Perl Code. Und genau den würde ich ja ausschließen wenn ich ihn zwischen out <<EOF; und EOF setze.
Jetzt sitze ich in der Zwickmühle.
Antworten
Beitrag von richard (1187 Beiträge) am Sonntag, 2.April.2006, 22:28.
Re: include im perl
Zwischen
out <<EOF; und EOF darf ( soweit ich weiß), kein Perl.
Hab ich ja nicht vorgeschlagen. Ich dachte daran, den Perl-Block (nach EOF) zu schließen, dann Deine Datei einzulesen und danach einen neuen Perl-Block (und <<EOF) aufzumachen.
Aber zu Deinem code==1. Wenn ich das jetzt richtig verstanden habe, willst Du mit diesem Ausdruck eine Variable setzen, die dann innerhalb der eingebundenen Datei ausgewertet werden soll. Dann setz diese Variable doch vor dem Aufruf der Datei innerhalb des Perl und ruf die Datei dann ohne Zusatz auf.
$code=1;
include "einzubindende_Datei_ohne_code==1";
Antworten
Beitrag von Thomas H. (180 Beiträge) am Sonntag, 2.April.2006, 23:01.
Re: include im perl
Habe ich ausprobiert. Kommt aber auch wieder die gleiche
Fehlermeldung. Seite kann nicht aufgerufen werden.
Ich habe jetzt hier nochmal zusammengefaßt und vereinfacht das Prinzip.
Vielleicht gibts auch ein Übermittlungsproblem.
Danke für die Geduld.:-)
Das ist das Template in das die externen Blöcke eingebunden werden soll:
<perl>
get "Id==$Id", "datenbank";
#######################################################################
# Prüfung der Objektnummer / Falls -Falsch- wird der folgende Block (1) erzeugt
#######################################################################
if($_amount_query < 1) {
out <<EOF;
<html>
<head>
Html Quelltext der ausgegeben wird wenn die Objektnummer falsch ist
</head>
<body>
EOF
$code=menu;
include "blockarchiv==1";
out <<EOF;
</body>
</html>
EOF
#######################################################################
# / Falls -Richtig- wird der folgende Block (2) erzeugt
#######################################################################
} else {
out <<EOF;
<html>
Html Quelltext der ausgegeben wird wenn die Objektnummer falsch ist
</html>
EOF
include "blockarchiv==2";
out <<EOF;
}
</perl>
Und das ist das Template blockarchiv.
Hier sind die verschiedenen Blöcke enthalten:
<perl>
if($code eq "1")
{
out <<EOF;
<html>
html Quelltext...
</html>
if($code eq "2")
html Quelltext...
</html>
usw....
Diese Blöcke werden übrigens auch von anderen Templates benutzt.
Und in diesen Templates kann ich die Dateien problemlos so aufrufen,
aber nur wenn es so notiert ist:
Perl Code..
</perl>
<include src=admin_003_blockarchiv code==1>
Antworten
Beitrag von richard (1187 Beiträge) am Sonntag, 2.April.2006, 23:36.
Re: include im perl
Zur Klärung. Wenn Du statt
include "blockarchiv==2";
das:
$code = "2";
include "blockarchiv";
eingibst (wenn -if($code eq "2") ... - aufgerufen werden soll), funktioniert es also nicht,
include "blockarchiv"; (bei nur einem einzubindenden Block)
funktioniert aber?
Gehe jetzt erstmal ins Bett, schaue aber morgen spätestens am Abend mal wieder rein. Vielleicht hat bis dahin ja auch jemand die Lösung.
Antworten
Beitrag von Thomas H. (180 Beiträge) am Sonntag, 2.April.2006, 23:47.
Endlich :-)) Es läuft.
Antworten
Beitrag von Pouraga (1396 Beiträge) am Montag, 3.April.2006, 15:36.
Re: Endlich :-)) Es läuft.
Schön das es funktioniert, aber ich möcht nur mal klugscheissen das der Ansatz mir irgendwie verkehrt herum vokommt.
statt
------template_mit_codebloecken------
if (code==1){
out ...;
}elsif (code == 2){
out ....;
}elsif (code == 3){
out ....;
}
------template in dem eingebunden wird------
$code=1;
include "template_mit_codebloecken";
$code=2;
include "template_mit_codebloecken";
$code=3;
include "template_mit_codebloecken";
----------------
würde ich doch lieber
------template_mit_codebloecken------
sub code1{
out ...;
}
sub code2{
out ....;
}
sub code3{
out ....;
}
------template in dem eingebunden wird------
include "template_mit_codebloecken";
&code1();
&code2();
&code3();
----------------
machen, das ist übersichtlicher und es wird nicht ständig immer alles immer wieder eingebunden von dem dann nur ein kleiner teil gebraucht wird.
ps: Passt zwar nicht wirklich hier her ist aber ein ganz nettes undokumentiertes feature wie ich finde
$inhalt = include "template";
Alles was im template ge "out"et wird , wird nicht ausgeben sondern steht in $inhalt
Antworten
Beitrag von Thomas H. (180 Beiträge) am Montag, 3.April.2006, 16:19.
Re: Endlich :-)) Es läuft.
Antworten