Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12156[/thread]

Variablen automatisch auslesen und verarbeiten



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
cbxk1xg
 2008-07-09 14:39
#111967 #111967
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Hallo, lang ist es her das ich mein CMS angefasst habe und mindestens ebenso lange habe ich hier nichts mehr geschrieben oder jemandem geholfen. Asche auf mein Haupt!

Nun habe ich aber eine etwas kniffelige Frage. Wenn man GET/POST Anfragen auswertet, dann weiß man zwar nie so genau was man da so an key/value pairs bekommt, aber man weiß welche man haben will und wie man die dann weiter verarbeitet. Z.B. bei einem Form-Mailer.

Nun will ich meinem CMS aber noch ein Feature hinzufügen um mit einer Zeile Code eine beliebige Anzahl von Variablen mit einem Template zu verheiraten. Da ich die Variablen nicht im vorraus kenne, kann ich diese auch nicht hard-coden.

Ich würde das gerne so lösen: Der normale CMS-User tippt folgendes in ein HTML Forumlar.
Code: (dl )
[include=teaserbox#Schröder erneut als Kanzlerkandidat im Gespräch#Der ehemalige Bundeskanzler will's noch mal wissen. Geben ihm die Bürger nach Hartz IV erneut eine Chance?#MyPicure.jpg


include steht für den Befehl an das CMS etwas zu tun. Und zwar mit dem Template teaserbox

Das Template sieht so aus.
Code: (dl )
1
2
3
4
5
6
7
<table border="0" width="250" cellspacing="0" cellpadding="0" bordercolor="#000000"><tr>
<td bgcolor="#000000"><font color="#FFFFFF">[VAR01]</font></td>
</tr><tr>
<td>[VAR02]</td>
</tr><tr>
<td><img src="http://www.foo.bar/imgages/[VAR03]" alt="[VAR01]"></td>
</tr></table>


Ich weiß, es gibt Module wie HTML::Template und ähnliches. Aber es ist dafür eigentlich überdimensioniert. Im wesentlichen will ich nur nach der Raute Variablen von 01 bis n automatisch definieren und diese dann in das Template packen.

Halb-Automatisch bekomme ich das auch hin. Also erst den TAG des User erkennen:
Code (perl): (dl )
$line =~ s-\[include\=(.*?)\]-$IncludeFile = &getIncludeFile( "$PATHTOincludes$1" )-ge;
dann die Eingaben an der Raute trennen:
Code (perl): (dl )
my ($Val01,$Val02,$Val03) = split (/\#/, $line);


Aber wenn ich nicht weiß, wie viele Werte da kommen, müsste ich nur auf Verdacht 50 $Val Strings schreiben. Das erscheint mir nicht sonderlich komfortabel.

Hat jemand eine Idee?
pq
 2008-07-09 14:49
#111968 #111968
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
cbxk1xg+2008-07-09 12:39:32--
Code: (dl )
...Schröder erneut als Kanzlerkandidat im Gespräch...

um himmels willen...
Quote
Code (perl): (dl )
my ($Val01,$Val02,$Val03) = split (/\#/, $line);


Aber wenn ich nicht weiß, wie viele Werte da kommen, müsste ich nur auf Verdacht 50 $Val Strings schreiben.

dafür gibt es eine coole datenstruktur, die nennt sich array...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2008-07-09 14:52
#111969 #111969
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
cbxk1xg+2008-07-09 12:39:32--
Ich würde das gerne so lösen: Der normale CMS-User tippt folgendes in ein HTML Forumlar.
Code: (dl )
[include=teaserbox#...

ich hoffe, du hast für sachen wie include=/etc/passwd\0 vorgesorgt.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
cbxk1xg
 2008-07-09 14:56
#111970 #111970
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Danke, ich weiß was ein array ist und die meißten Daten werden in meinem CMS per hash verwaltet. Ich stehe nur grade auf dem Schlauch, bin eingerostet.

Die Frage müsste dann lauten: Wie packe ich die Daten denn nach dem aufsplitten in ein array und ersetze dann alle [VARs] durch die Werte im Array. Das ist mein Problem.
renee
 2008-07-09 15:02
#111971 #111971
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
my @Vars = split /#/,$line;

# ...

$template_zeile =~ s/\[VAR(\d)+\]/$Vars[$1]/g;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2008-07-09 15:03
#111972 #111972
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
cbxk1xg+2008-07-09 12:56:12--
Danke, ich weiß was ein array ist und die meißten Daten werden in meinem CMS per hash verwaltet. Ich stehe nur grade auf dem Schlauch, bin eingerostet.

Die Frage müsste dann lauten: Wie packe ich die Daten denn nach dem aufsplitten in ein array und ersetze dann alle [VARs] durch die Werte im Array. Das ist mein Problem.

so ungefähr:
Code (perl): (dl )
1
2
3
my @vars = split ...;

$template =~ s/ \[ VAR (\d+) \] /$vars[$1]/gx;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2008-07-09 15:05
#111973 #111973
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
renee+2008-07-09 13:02:55--
Code (perl): (dl )
$template_zeile =~ s/\[VAR(\d)+\]/$Vars[$1]/g;

da hat sich ein fehler eingeschlichen, das + nach dem \d muss mit in die klammer
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
cbxk1xg
 2008-07-09 15:05
#111974 #111974
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Quote
ich hoffe, du hast für sachen wie include=/etc/passwd\0 vorgesorgt.


Keine Sorge. Es kann nur ein bestimmter Pfad angesprochen werden. Es wird vorher ganz brav geparst und alles ausgemüllt bzw. in HTML-Entities gewandelt.
cbxk1xg
 2008-07-09 15:15
#111975 #111975
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Sehr cool! Vielen Dank! Aber soweit ich das verstehe habe ich dann auch eine VAR namens VAR0, da bei einem array das erste Element 0 ist, richtig?

Richtig cool wäre es, wenn ich eine Struktur hätte, die mit einer führenden Null beginnt und man das dann noch auf 99 VARs begrenzen kann. - Ich glaube, ich brauch echt noch nen Kaffee...
renee
 2008-07-09 15:19
#111976 #111976
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
pq+2008-07-09 13:05:02--
renee+2008-07-09 13:02:55--
Code (perl): (dl )
$template_zeile =~ s/\[VAR(\d)+\]/$Vars[$1]/g;

da hat sich ein fehler eingeschlichen, das + nach dem \d muss mit in die klammer


ups, danke...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2008-07-09 14:39.