Schrift
[thread]969[/thread]

HTC und Loops in Loops

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
MartinR
 2007-07-23 13:22
#402 #402
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi, ich stehe immer noch mit HTC auf Kriegsfuß wenn es um Loops in Loops geht. Ich möchte folgendes tmpl

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<table>
 <tr>
   <td>Mo</td>
   <td>Di</td>
   <td>Mi</td>
   <td>Do</td>
   <td>Fr</td>
   <td>Sa</td>
   <td>So</td>
 </tr>

<!-- TMPL_LOOP ALLE_WOCHEN -->
 <tr>
<!-- TMPL_LOOP EINE_WOCHE -->
   <td><!-- TMPL_VAR TAGESZAHL --></td>
<!-- /TMPL_LOOP EINE_WOCHE -->
 </tr>
<!-- /TMPL_LOOP ALLE_WOCHEN -->

</table>


wenn möglich innerhalb einer solchen Schleife
Code: (dl )
1
2
3
4
5
6
7
for my $d ( 1 .. Days_in_Month($year, $month) ) {
# ????
}

$template->param(
ALLE_WOCHEN => \@AlleWochen
);

füllen. Kann mir das mal eine ( r ) möglichst übersichtlich darstellen? Danke ...
pq
 2007-07-23 13:52
#403 #403
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hmm, ich versteh mal wieder das problem nicht. weisst du nicht, wie
@AlleWochen aussehen soll oder wie du es hinkriegst, dass es so
aussieht, wie du willst?
Code: (dl )
1
2
3
4
my @AlleWochen = (
{ EINE_WOCHE => [{ TAGESZAHL => 1 }, ..., { TAGESZAHL => 7 }] },
...
);
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
MartinR
 2007-07-23 14:03
#404 #404
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi, nun mein jetziger Ansatz sieht so aus

Code: (dl )
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
my @AlleWochen;
my @EineWoche;
my %EineWoche;
for my $d ( 1 .. Days_in_Month($year, $month) ) {
my $dow = Day_of_Week($year, $month, $d);

# Am Monatsersten wenn kein Montag Leerzellen einfügen
if ( $d == 1 && $dow > 1 ) {
for my $i ( 1 .. $dow - 1 ) {
my %EinTagDummy = (

TAG => 'xx',

);
push (@EineWoche, \%EinTagDummy);
}
my %EinTag = (
TAG => $d,
);
push (@EineWoche, \%EinTag);
}
else {
my %EinTag = (
TAG => $d,
);
push (@EineWoche, \%EinTag);
}

# am letzten Tag der Woche Zeile übergeben
if ( $dow == 7 ) {
$EineWoche{EINE_WOCHE} = \@EineWoche;
push (@AlleWochen, \%EineWoche);
@EineWoche = ();
}

}

$template->param(
ALLE_WOCHEN => \@AlleWochen
);


Nur gibt er mir hier immer die letzte Woche n-mal aus. Und es fehlt noch die Ausgabe der evtl. nötigen Leerzellen am Monatsende ...
renee
 2007-07-23 14:08
#405 #405
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ungetestet:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
use Data::Tabulate;

my $tab = Data::Tabulate->new();
$tab->min_columns( 7 );
$tab->max_columns( 7 );

my @array = map{ {TAGESZAHL => $_}  }( 1 .. Days_in_Month($month,$year) );

@array = map{ {WOCHE => $_} } $tab->tabulate(@array);

$tmpl->param( ALLE_WOCHEN => \@array );


Du musst allerdings bedenken, dass nicht jeder Monat mit Montag anfängt...

Edit: Man muss ja auch noch tabulate machen...\n\n

<!--EDIT|renee|1185185711-->
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/
MartinR
 2007-07-23 14:14
#406 #406
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
@renee
Ich sagte "übersichtlich" :-))
Nimm bitte Rücksicht auf mein fortgeschrittenes Alter und mein bescheidenes Perl-Wissen ;-)
Außerdem ist es dann nur mit der Ausgabe der Tageszahlen nicht getan. Es kommen noch CSS und individuelle Links hinzu.
renee
 2007-07-23 14:33
#407 #407
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das ist doch übersichtlich:
Code (perl): (dl )
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
#!/usr/bin/perl

use strict;
use warnings;
use Data::Tabulate;
use Data::Dumper;
use Date::Calc qw(Day_of_Week Days_in_Month);
use HTML::Template::Compiled;

my $month = 2;
my $year  = 2007;

# nicht jeder monat faengt mit Montag an
my $dow   = Day_of_Week( $year, $month, 1 );
$dow = 7 if $dow == 1;
$dow--;
my @array = (' ') x $dow;

# bearbeite die tage
my @tage;
for( @array, 1 .. Days_in_Month($year,$month) ){
    push @tage, {
        TAGESZAHL => $_,
        CSS       => 'irgendein_css',
        #...
    };
}

# teile in wochen auf
my $tab = Data::Tabulate->new();
$tab->min_columns(7);
$tab->max_columns(7);
my @wochen = map{ {WOCHE => $_} }$tab->tabulate(@tage);

# template processing
my $template = HTML::Template::Compiled->new( filehandle => *DATA );
$template->param( ALLEWOCHEN => \@wochen );
print $template->output;


__DATA__
<table>
    <TMPL_LOOP NAME=ALLEWOCHEN>
    <tr>
        <TMPL_LOOP NAME=WOCHE>
        <td class="<TMPL_VAR NAME=CSS ESCAPE=HTML>"><TMPL_VAR NAME=TAGESZAHL></td>
        </TMPL_LOOP>
    </tr>
    </TMPL_LOOP>
</table>
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/
MartinR
 2007-07-23 16:13
#408 #408
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hallo renee, danke funzt soweit. Ich habe es noch ergänzt, denn nicht jedes Monat hört auch mit einem So auf.

Im error_log steht aber beim Aufruf immer folgender Fehler:

Code: (dl )
1
2
[Mon Jul 23 14:10:17 2007] [error] [client 164.30.144.153] Use of uninitialized value in pattern match (m//) at /usr/lib/perl5/site_perl/5.8.6/Data/Tabulate.pm line 217., referer: ...
[Mon Jul 23 14:10:17 2007] [error] [client 164.30.144.153] Use of uninitialized value in pattern match (m//) at /usr/lib/perl5/site_perl/5.8.6/Data/Tabulate.pm line 195., referer: ...


Kannst Du den localisieren?

Es würde mich aber trotzdem noch interessieren wie es ohne zusätzliches Modul gegangen wäre ...
renee
 2007-07-23 16:26
#409 #409
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ersetze in Tabulate.pm die Subs max_columns und min_columns durch:
Code (perl): (dl )
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
sub max_columns{
    my ($self,$value) = @_;
    
    $self->{max_cols} = $value if defined $value and $value =~ /^[1-9]\d*$/;
    
    my $caller = (caller(1))[3];
    unless( ($caller and $caller =~ /min_columns/) or not defined $self->min_columns){
        $self->min_columns($self->{max_cols}) if $self->{max_cols} < $self->min_columns;
    }
    
    return $self->{max_cols};
}

=head2 min_columns

set how many columns the table can have (at least).

    $tabulator->min_columns(3);

the table has at least three columns

=cut

sub min_columns{
    my ($self,$value) = @_;
    
    $self->{min_cols} = $value if defined $value and $value =~ /^[1-9]\d*$/;
    
    my $caller = (caller(1))[3];
    unless( $caller and $caller =~ /max_columns/){
        $self->max_columns($self->{min_cols}) if $self->{min_cols} > $self->max_columns;
    }
    
    return $self->{min_cols};
}
\n\n

<!--EDIT|renee|1185193609-->
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/
renee
 2007-07-23 16:30
#410 #410
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ohne zusätzliches Modul ist es ziemlich ähnlich:
Code (perl): (dl )
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
#!/usr/bin/perl

use strict;
use warnings;
use Date::Calc qw(Day_of_Week Days_in_Month);
use HTML::Template::Compiled;

my $month = 2;
my $year  = 2007;

# nicht jeder monat faengt mit Montag an
my $dow   = Day_of_Week( $year, $month, 1 );
$dow = 7 if $dow == 1;
$dow--;
my @array = (' ') x $dow;

# bearbeite die tage
my @tage;
for( @array, 1 .. Days_in_Month($year,$month) ){
    push @tage, {
        TAGESZAHL => $_,
        CSS       => 'irgendein_css',
        #...
    };
}

# teile in wochen auf

my @wochen;
my $counter = 0;
my @subtage;
for my $tag( @tage ){
    push @subtage, $tag;
    if( ++$counter == 7 ){
        $counter = 0;
        push @woche, { WOCHE => [@subtage] };
        undef @subtage;
    }
}

# template processing
my $template = HTML::Template::Compiled->new( filehandle => *DATA );
$template->param( ALLEWOCHEN => \@wochen );
print $template->output;


__DATA__
<table>
    <TMPL_LOOP NAME=ALLEWOCHEN>
    <tr>
        <TMPL_LOOP NAME=WOCHE>
        <td class="<TMPL_VAR NAME=CSS ESCAPE=HTML>"><TMPL_VAR NAME=TAGESZAHL></td>
        </TMPL_LOOP>
    </tr>
    </TMPL_LOOP>
</table>


ungetestet\n\n

<!--EDIT|renee|1185193903-->
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/
MartinR
 2007-07-24 14:57
#411 #411
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi, dann sage ich mal gracias - haut auch ohne Modul hin ...
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2007-07-23 13:22.