Schrift
[thread]127[/thread]

nochmal HTML::Template und DBI: diesmal: LOOPs



<< >> 6 Einträge, 1 Seite
pktm
 2004-12-30 20:19
#641 #641
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Ich würde gerne eine Loop-Variable füttern, die mir eine Select-Box mit allen Seiten-Titeln der Webseiten meines CMS erzeugt.
Da es aber (wie gerade) vorkommen kann, dass sich garkeine Webseiten in der Datenbank befinden würde ich diesen Fall gerne abfangen.

Im Moment will ich das so machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
                my $cmd = "SELECT titel FROM seiten";
                my $sth = $dbh->prepare($cmd) || die $dbh->errstr;
                if( my $rv = $sth->execute ){
                    print Dumper( $rv );
                    if( $rv ){
                        $template->param( "SEITEN" => [ %{ $sth->fetchrow_hashref } ] );
                    }else{
                        $template->param( "SEITEN" => [ { titel => 'keine Seite vorhanden',  } ] );
                    }
                }else{
                    die "Konnte Seitentitel nicht aus seiten-Datenbank lesen: " . $dbh->errstr;
                }

1. Datenbank auslesen
2. Returncode auswerten
=> 1. Problem, ich bekomme hier kein 0 oder undef zurück, sondern 0E0. Ansich kein Problem, das kann man ja auch noch abfangen.
Nur hab eich keine Lust jede erdenkliche Fehlermeldung abfangen zu müssen, besonders nciht dann, wenn der Titel einer Webseite auch 0E0 sein kann...
3. Wenn nicht aus der DB gelesen werden kann (Fehler oder keine Seite), dann soll die Loop-Variable wie o.g. gefüttert werden.
Vielleicht werde ich hier mal <TMPL IF> ausprobieren.
=> weiteres Problem:
Wenn ich den Returncode 0E0 abfange bekomme ich trotzdem keine Ausgabe in der Variable <TMPL_LOOP> obwohl dort ja eigentlich "keine Seite vorhenden" stehen sollte.
Wenn ich den Returncode aber nur wie oben dargestellt abfange geht das Prog natürlich in die erste Schleife rein und versucht Daten zu lesen.
Das geht natürlich ohne Daten schief.

So, hat wer eine Lösung bzw. sieht wer, warum die <TMPL_LOOP> nicht gefüllt wird?
Ich habe die Datenstruktur entsprechend der Manpage übernommen.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2004-12-30 20:42
#642 #642
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
probier mal:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my $cmd = "SELECT titel FROM seiten";
my $sth = $dbh->prepare($cmd) || die $dbh->errstr;
my @array = ();
if( my $rv = $sth->execute ){
  while($hash = $sth->fetchrow_hashref()){
    push(@array,$hash);
  }
  if(@array){
    $template->param( "SEITEN" => \@array );
  }
  else{
    $template->param( "SEITEN" => \[ { titel => 'keine Seite vorhanden',  } ] );
  }
}
else{
  die "Konnte Seitentitel nicht aus seiten-Datenbank lesen: " . $dbh->errstr;
}
\n\n

<!--EDIT|renee|1072809780-->
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/
pktm
 2004-12-30 21:51
#643 #643
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Habe das mit der Ausgabe hinbekommen.
Nachdem ich die Ausgabe der Titel - bzw. der Meldung, dass keine Titel vorhanden - mal in das main_template verlagert hatte und es dann ging leuchtete es mir ein:
Da ich ja ein Template(B) aus der DB auslese und das dann in ein anderes Template(A) aus der DB einfüge (s. aneren Thread HTML::Template & DBI) muss ich ja ein neues Objekt erstellen, mit dem ich die Werte in dem einen Template(B) ersetze.
Damit ich die Werte aus dem vorherigen "Mutter"-Objekt benutzen kann habe ich associate => $mutter_template(A) gesetzt.
Da im Template(A) aber garkein Loop mit den Seitentteln vorkam hat sich HTML::Template (intern, es war ja deaktiviert) darüber aufgeregt und die Parameter einfach geklöscht anstatt sie einfach stehen zu lassen.
Jetzt habe ich die Werte dem zweiten Template-Objekt(B) übergeben und siehe da - es funktioniert.
Aber ich glaube, wenn ich das fertig habe werde ich wieder zu meinem alten, einfacheren, unkomplizierteren, weniger stricten, Templaingsystem zurück kommen. Und wehe mir schlägt dann nochmal einer vor, ich solle doch HTML::Template benutzen :angry:  :angry:  :angry:
mfg pktm\n\n

<!--EDIT|pktm|1072814023-->
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2004-12-30 22:34
#644 #644
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich arbeite mittlerweile nur noch mit HTML::Template. Ich finde, dass das sehr praktisch und schnell ist....
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/
pktm
 2004-12-30 23:06
#645 #645
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Benutzt du Tenplates in Templates?
Was mich ahalt an diesem Teil stört ist, dass es sich nach den gesetzten Werten richtet, und nicht danach, was in den Templates gefordert ist.
Außerdem fehlt eine Funktion mit der man ein Templatestück bereits vor der Ausgabe füttern kann - also das, wofür ich immer ein 2. Objekt brauche.
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2004-12-31 13:58
#646 #646
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
das mit dem auslesen der seiten geht übrigens prima, thx!
Habe es eben mal ausprobiert.
http://www.intergastro-service.de (mein erstes CMS :) )
<< >> 6 Einträge, 1 Seite



View all threads created 2004-12-30 20:19.