Originariamente inviato da Claudio Vituzzi
ancora meglio...
codice:# Ordino... my @SORTED_ARRAY = sort { $HASH{$b} <=> $HASH{$a} } keys %HASH; undef %HASH; # Libero la memoria... ## ho capito... ti bastano gli indici dell'hash # Divido in pagine da $rows... # $Current_page è il valore della pagina corrente ed arriva tramite cgi->param(); my $rows = 10; if (!$Current_page) {$Current_page = 1}; my $end = (($Current_page * $rows)-1); my $start = (($Current_page * $rows)-$rows); my $total_page = int( scalar(@SORTED_ARRAY) / $rows ); $total_page++ if ( scalar(@SORTED_ARRAY) % $rows != 0); # ? mi sipeghi meglio? ## ammettiamo che hai 34 record, se fai solo: ## my $total_page = int( scalar(@SORTED_ARRAY) / $rows ); ## avrai un numero di pagine di 3, che è sbagliato ## perchè in realtà le pagine sono 4, 3 con 10 record ed 1 ## con 4 ## per ottenere il risultato giusto incrementi di uno il totale ## se il numero di record non è un multiplo esatto di 10 my $page_prev = $Current_page - 1; if ($Current_page <= 1) { undef $page_prev }; ## questa è una esagerazione... sprechi più risorse a ##fare undef che lasciare fino alla fine dell'esecuzione ## dello script la variabile my $page_next = $Current_page + 1; if ($Current_page => $total_page) { undef $page_next }; ## vedi sopra e inoltre c'è un errore di sintassi ## si scrive >= e non => my @DIECI_IDS; @DIECI_IDS = @SORTED_ARRAY[$start .. $end]; undef @SORTED_ARRAY; # Libero la memoria... ... print @DIECI_IDS; if ($page_prev) { ... ".cgi?Current_page="."$page_prev" } else { ... # non mostrare la freccia "prev" }; if ($page_next) { ... ".cgi?Current_page="."$page_next" } else { ... # non mostrare la freccia "next" };

Rispondi quotando