1
2
3
4
5
6
# ich hab verschiedenste Verzeichnisse probiert mit oder ohne public
my $datadir = "public/data/blogs";
my @entrys;
find(\&wanted, $datadir);
sub wanted {my $file="$File::Find::name"; push @entrys, $file};
chomp @entrys;
QuoteVariable "@entrys" will not stay shared at /home/maximilian/Dokumente/Mojo/myapp.pl line 24.
Can't stat /home/maximilian/Mojo/myapp/public/data/blogs: Datei oder Verzeichnis nicht gefunden
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
if(!$body){ my $class = $self->{BIN}{$url}{class} || 'NotFound'; next if $class eq 'ParsedHTML'; my $classfile = $class || 'NotFound'; $classfile =~ s/::/\//g; require "$classfile.pm"; my $r = $class->new( BIN => $self->{BIN}, URL => $url, FILEDIR => $self->{FILEDIR}, TMPLDIR => $self->{TMPLDIR}, ); $r->data; $body = $r->{BODY}; }
2016-04-04T09:11:55 Max_PerlbeginnerLieber Janus,
Weiterhin bleibt jedoch die Fehlermeldung bzgl. der Nichtauffindbarkeit der Daten bestehen?
Hat da jemand eine Idee? Welches Verezeichnis muss man denn angeben, um den Ordner data im public Verzeichnis zu durchsuchen? Ich hab wirklich schon fast alles versucht... Mit purem CGI war das einfacher ;-)
QuoteIn Dancer2, static files should go into the public/ directory, but in the application itself be sure to omit the public/ element from the path. For example, the stylesheet for Dancr lives in dancr/public/css/style.css but is served from http://localhost:3000/css/style.css.
QuoteThe rationale for this decision is that CGI.pm is no longer
considered good practice for developing web applications, including
quick prototyping and small web scripts.
2016-04-04T09:17:48 Max_Perlbeginner[...] mit Mojolicious::Lite erreichen und dort finde ich die Template Enging besser gelöst, weil man echtes Perl schreiben kann...
QuoteWas möchtest Du denn am Ende erreichen?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#!/usr/bin/perl use strict; use warnings; use Mojolicious::Lite; use Mojo::Util qw/files/; get '/' => sub { my ($self) = @_; my @files = files $self->app->home . '/public/data/blog'; $self->stash( files => \@files ); $self->render('index'); }; app->start; @@index.html.ep <h1>Dateien:</h1> <ul> % for my $file ( @{$files} ) { <li>$file</li> % } </ul>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env perl
use Mojolicious::Lite;
use Mojo::Util qw/files/;
my $datadir;
get "/" => sub {
my $c = shift;
$datadir = $c->app->home . "/public/data";
my @entrys=files $datadir;
chomp @entrys;
my $story = story(@entrys);
$c->stash( story => $story );
$c->render("index");
};
# FUNCTION STORY
# Die Funktion story bereitet den dynamisch zu erzeugenden Inhalt auf, d.h. sortiert die jeweils anzuzeigenden Beiträge
#(hier um die komplizierte Sortierung gekürzt)
# Hierzu muss eine Liste mit den Dateinamen auf die Blogeinträge übergeben werden
sub story {
# erhalte die Dateinamen
my @entrys = @_;
# erstelle eine lokale Variable, die am Schluss übergeben wird
my $story;
foreach my $entry (@entrys) {
open ENTRY, "$entry";
# TITELANGABE
# Die erste Zeile enthält idR. den Titel
my $firstline = <ENTRY>;
chomp $firstline;
my $title = "<h1> $firstline </h1>";
my $content;
# die übrigen Zeilen enthalten einen ganz normalen Absatz
while (my $line=<ENTRY>) {
$content = $content . $line . "\n";
}
close ENTRY;
$story = $story."$title \n $content <hr size=\"1\" />";
}
# Übergebe die Story
return $story;
}
app->start;
__DATA__
@@ index.html.ep
% layout "default";
% title "Blog";
<%== $story %>
@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><%= title %></title>
</head>
<body><%= content %></body>
</html>
my $datadir = Dancer2::FileUtils::path( setting('appdir'), "public/data");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package MyApp;
use Dancer2;
use File::Find;
use Dancer2::FileUtils qw/path/;
our $VERSION = '0.1';
my $datadir = Dancer2::FileUtils::path( setting('appdir'), "public/Bilder");
get '/' => sub {
my $line;
my @entrys;
find sub {my $file="$File::Find::name"; push @entrys, $file;}, $datadir;
foreach my $filename (@entrys) {
open FH, $filename or die "Can't open '$filename': $!";
while (my $zeile=<FH>) {
$zeile=sonderzeichen($zeile);
$line = $line.$zeile;
}
close FH;
}
template "index.tt", { line => $line};
};
true;
sub sonderzeichen {...}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sub sonderzeichen {
my ($line) = @_;
# &
$line =~ s/&/\&\;/g;
# ß
$line =~ s/ß/\ß\;/g;
# ä
$line =~ s/ä/\ä\;/g;
# Ä
$line =~ s/Ä/\Ä\;/g;
# ö
$line =~ s/ö/\ö\;/g;
# Ö
$line =~ s/Ö/\Ö\;/g;
# ü
$line =~ s/ü/\ü\;/g;
# Ü
$line =~ s/Ü/\Ü\;/g;
# á - kleines a mit Accent grave
$line =~ s/á/\à\;/g;
# " - doppeltes Anführungszeichen
$line =~ s/"/\"\;/g;
# '
$line =~ s/'/\&apos\;/g;
# <
#$line =~ s/</\<\;/g; !!! Dann gehen die HTML Codes nicht mehr!!!
# >
#$line =~ s/>/\>\;/g;
# §
$line =~ s/§/\§\;/g;
# ²
$line =~ s/²/\²\;/g;
# ³
$line =~ s/³/\³\;/g;
# €
$line =~ s/€/\&euro\;/g;
# veränderte Zeile zurückgeben
return $line;
}
2016-04-04T22:33:26 Max_PerlbeginnerCode: (dl )open FH, $filename or die "Can't open '$filename': $!";
open my $fh, '<', $filename or die ...
2016-04-04T22:33:26 Max_PerlbeginnerDas Sonderzeichen Problem habe ich nun mit diesem noch nicht 100% zufriedenstellenden Workaround gelöst. Falls jemand eine bessere Idee hat bzw. die Funktion noch um weitere Sonderzeichen zu ergänzen ist, bin ich weiterhin für eine Hilfestellung dankbar.
open my $fh, '<:encoding(utf-8)', $filename or die ...
QuoteSchau Dir auch mal HTML::Entities und HTML::Escape an...