Schrift
[thread]10504[/thread]

HTML::Template & nichtexistente Dateien



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
pktm
 2007-10-03 01:52
#100225 #100225
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Wie macht ihr das, wenn ihr den Fall behandeln wollt, dass ein Template nicht existiert, zu welchem ihr gerade ein HTML::Template-Objekt erstellen wolltet?
Ich habe da das Problem, dass ich die Pfade zu den Template-Ordnern als Option angebe, und keine Lust habe bei jedem Laden eines Templates ein Array mit Pfaden zu durchsuchen.
Ich stehe ganz kurz davor ein eval{} drumherum zu packen und dann auf den potentiellen Fehler zu prüfen.

Hat da wer eine bessere Lösung?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
ptk
 2007-10-03 12:03
#100226 #100226
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
eval { } ist doch oft eine gute Lösung.
pktm
 2007-10-03 14:33
#100229 #100229
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
ptk+2007-10-03 10:03:51--
eval { } ist doch oft eine gute Lösung.


Ja, das "oft" trifft es schon recht gut :)
CGI::Application bietet mir eine coole Methode namens load_tmpl( $filename ) an, die mir die Arbeit mit HTML::Template so unheimlich angenehm abstrahiert. Dieser Effekt ist natürlich hin, wenn ich dann um jeden dieser Aufrufe (und normalerweise hat jede meiner Funktionalitäten mind. 2 davon) ein eval{} benötigt.

Die Methode direkt zu überschreiben und dort die INstantiierung von HTML::Template in ein eval setze wäre eine Lösung, aber ich habe schlecht Erfahrungen damit gemacht, ausgerechnet diese Methode zu modifizieren.
http://www.intergastro-service.de (mein erstes CMS :) )
kristian
 2007-10-03 14:41
#100230 #100230
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

Mir stellt sich die Frage, warum du keine Lust hast das Template auf Existenz zu prüfen.
Wenn du es nicht machst wird in HTML::Template gemacht.
Da sieht es dann so aus:
Code (perl): (dl )
1
2
3
4
5
  # try "path" option list..
  foreach my $path (@{$options->{path}}) {
    $filepath = File::Spec->catfile($path, $filename);
    return File::Spec->canonpath($filepath) if -e $filepath;
  }

Du sparst also nichts. (CPU etc.)

Gruss
Kristian
pktm
 2007-10-04 00:38
#100244 #100244
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
kristian+2007-10-03 12:41:33--
Hallo

Mir stellt sich die Frage, warum du keine Lust hast das Template auf Existenz zu prüfen.
Wenn du es nicht machst wird in HTML::Template gemacht.
Da sieht es dann so aus:
Code (perl): (dl )
1
2
3
4
5
  # try "path" option list..
  foreach my $path (@{$options->{path}}) {
    $filepath = File::Spec->catfile($path, $filename);
    return File::Spec->canonpath($filepath) if -e $filepath;
  }

Du sparst also nichts. (CPU etc.)

Gruss
Kristian


Hm, so wie es ausschaut wird es wohl doch auf das überschreiben der Methode hinaus laufen.

Die Tatsache, dass HTML::Template ohnehin prüft ist übrigens einer der Gründe, warum ich es nicht machen will - es wird schließlich bereits gemacht, nur dass gestorben wird, wenn es nicht da ist, anstatt einen RÜckgabewert auszuspucken.
http://www.intergastro-service.de (mein erstes CMS :) )
kristian
 2007-10-04 13:56
#100259 #100259
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

pktm+2007-10-03 22:38:51--
Hm, so wie es ausschaut wird es wohl doch auf das überschreiben der Methode hinaus laufen.

Die Tatsache, dass HTML::Template ohnehin prüft ist übrigens einer der Gründe, warum ich es nicht machen will - es wird schließlich bereits gemacht, nur dass gestorben wird, wenn es nicht da ist, anstatt einen RÜckgabewert auszuspucken.


Nach einem Blick in HTML::Template glaube ich nicht dass du dort überschreiben willst.
Die Methode _find_file() wird zu oft verwendet.

Carp::confess() zu überschreiben wäre eine Möglichkeit, falls du die nicht irgendwo anders "wirklich" brauchst.

Auszug aus Carp:
Code (perl): (dl )
1
2
3
4
sub croak   { die  shortmess @_ }
sub confess { die  longmess  @_ }
sub carp    { warn shortmess @_ }
sub cluck   { warn longmess  @_ }


EDIT:
Ich wollte es wissen ;-)
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
sub Carp::confess{
    warn Carp::shortmess(@_);
}
[...]
$template = new HTML::Template(filename          => $file . 'x', # gibt's nicht
                die_on_bad_params => 0);
unless(defined $template->{'options'}->{'filepath'}){
# error
}


Gruss
Kristian
pktm
 2007-10-04 14:56
#100263 #100263
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Wow - du Held! :)
Danke!
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2007-10-08 01:48
#100468 #100468
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Wie stellt man nochmal die Warnungen ab, dass etwas redefiniert wurde?
http://www.intergastro-service.de (mein erstes CMS :) )
ptk
 2007-10-08 02:17
#100469 #100469
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Code: (dl )
no warnings 'redefine'
pktm
 2007-10-08 23:59
#100526 #100526
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, irgendwie klappt das bei mir nicht.
Ich hab
Code: (dl )
1
2
3
sub Carp::confess{
warn Carp::shortmess(@_);
}

in mein Modul geschrieben, aber HTML::Template stirbt immer noch.
Hab ich as falsch gemacht? Muss ich das in HTML::Template schreiben?
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2007-10-03 01:52.