PDA

View Full Version : [PHP] Colorare righe di una tabella...


Gregor
17-09-2008, 20:55
Ho una tabella in cui viene stampata una colonna con delle date che
possono ripetersi e sono ordinate in modo decrescente.
Tipo, se consideriamo solo il giorno:

.
.
.
29
29
28
27
27
26
25
.
.
.

Io vorrei, per una migliore chiarezza nel consultare questa tabella,
colorare di due colori distinti le righe di questa tabella.
Il colore deve cambiare solo se cambia data!
Cioè il risultato deve essere:


.
.
.
29
29
28
27
27
26
25
.
.
.
Anche solo due colori...
Mi sta creando un pò di problemi questo che all'inizio mi sembrava un semplice if...:(
Come lo fareste?
Tnx!

Pappe
17-09-2008, 21:25
una cosa del tipo


if($num%2 == 0)
echo "<table ..... style='table1'>.....</table>";
else
echo "<table ..... style='table2'>.....</table>";


e ti fai 2 classi css coi colori di sfondo diversi

Gregor
17-09-2008, 21:49
una cosa del tipo


if($num%2 == 0)
echo "<table ..... style='table1'>.....</table>";
else
echo "<table ..... style='table2'>.....</table>";


e ti fai 2 classi css coi colori di sfondo diversi

Avevo pensato ad una cosa simile anche io, ma se capitano due gruppi di giorni pari il colore non cambia :(

Pappe
17-09-2008, 21:52
una cosa del tipo

$cont = 0 all'inizio

echo "<table ..... style='table".++$cont."'>.....</table>";
if ($cont == 2)
$cont = 0;

per ogni riga...spero di essere stato chiaro

Torav
17-09-2008, 21:53
scusa ma che usi per "girare" su tutto l'array contenente la roba che metti nella tabella? un foreach? se è così basta che dichiari una variabile $i = 0 prima del ciclo e alla fine del foreach dai un $i++ e quindi usi il metodo consigliato da pappe su una variabile che non "salta" e scorre tutti i primi N numeri

edit: Pappe mi ha anticipato alla grande :p

Gregor
17-09-2008, 22:34
Penso di aver capito. Domani provo e faccio sapere :)
Tnx!

Gregor
18-09-2008, 13:58
Dunque, sono al palo :(
Non capisco come possa funzionare, dal momento che non confronto mai, in ogni riga, la nuova e la vecchia data per stabilire il colore...:(

john_revelator
18-09-2008, 15:53
<?php
$date = array(23,23,23,22,21,21,20,19,18,18,17,16,16,15,14,14,14,13,12,11);
$valore = -1;
$colore = 'green';
echo '<table>';
foreach($date as $giorno) {
echo '<tr>';
if ($giorno != $valore)
$colore = ($colore == 'green') ? 'red' : 'green';
else
$colore = ($colore == 'green') ? 'green' : 'red';
echo "<td bgcolor=\"$colore\">$giorno</td>";
echo '</tr>';
$valore = $giorno;
}
echo '</table>';
?>


Te l'ho scritto al volo. Ovviamente togli quegli orridi bgcolor e usa i css. :)

Pappe
18-09-2008, 18:09
<?php
$date = array(29,29,28,27,27,26);
$cont = 0;
foreach ($data as $giorno)
{
echo "<td style=\"table$cont++\">$giorno</td>";
if ($cont == 2)
$cont = 0;
}
?>


e poi credi 2 stili css table1 e table2 impostando i background diversi

EDIT: così però anche se le date sono uguali il colore dello sfondo viene diverso

Gregor
19-09-2008, 07:06
EDIT: così però anche se le date sono uguali il colore dello sfondo viene diverso

E questo non mi va bene però...:(

Torav
19-09-2008, 12:45
allora puoi usare del codice (orribile dal punto di vista "estetico" lo so, qualcuno sicuramente farà di meglio :p) tipo questo:


$oldColore = 'green';
foreach($data as $giorno) {
if($giorno == $oldGiorno)
$colore = $oldColore;
else $colore = ($oldColore = 'green') ? 'red' : 'green';

echo "<tr><td style=\"td$colore">$giorno</td></tr>";

$oldGiorno = $giorno;
$oldColore = $colore;
}


in questo caso la prima riga sarà rossa, e le altre *dovrebbero* venire nel modo che hai descritto tu nel primo post. Non l'ho testato quindi non sono sicuro di come verrà :stordita:

Gregor
22-09-2008, 14:37
allora puoi usare del codice (orribile dal punto di vista "estetico" lo so, qualcuno sicuramente farà di meglio :p) tipo questo:

in questo caso la prima riga sarà rossa, e le altre *dovrebbero* venire nel modo che hai descritto tu nel primo post. Non l'ho testato quindi non sono sicuro di come verrà :stordita:

L'ho adattato alla mia situazione ma i colori "sballano" non ottenendo il risultato che cercavo :(
Cmq grazie!

john_revelator
22-09-2008, 20:19
Hai provato il mio codice?

Gregor
22-09-2008, 20:22
Hai provato il mio codice?

Azz me lo ero perso. Domani provo. Tnx!

ciuhd
22-09-2008, 23:17
Ecco la mia soluzione:

<style>
.rosso{
background-color:#FF0000;
}
.verde{
background-color:#00FF00;
}

.blu{
background-color:#0000FF;
}
</style>

<?php
$date = array(23,23,23,22,21,21,20,19,18,18,17,16,16,15,14,14,14,13,12,11);

echo stampaTabella($date);

function stampaTabella($date){
$out = "<table>";
$stileCorrente = "rosso"; //stile della prima riga
$cont = 1;
$dataCurr = $date[0];
$dataPrev = $date[0];

foreach( $date as $val ){
$dataPrev = $dataCurr;
$dataCurr = $val;
if ( $dataCurr != $dataPrev )
$cont++;
$stileCorrente = ( $cont%2 == 0 )? "verde" : "rosso";
$out .="<tr class=\"$stileCorrente\"><td> $val </td></tr>";
}

return $out;
}


?>


Se invece vuoi usare più di due colori, basta che aggiungi uno swicth nel foreach:


function stampaTabella($date){
$out = "<table>";
$stileCorrente = "rosso"; //stile della prima riga
$cont = 1;
$dataCurr = $date[0];
$dataPrev = $date[0];

foreach( $date as $val ){
$dataPrev = $dataCurr;
$dataCurr = $val;
if ( $dataCurr != $dataPrev )
$cont++;

$i = $cont%3;
switch( $i ){
case 0 :
$stileCorrente = "rosso";
break;
case 1 :
$stileCorrente = "verde";
break;
case 2 :
$stileCorrente = "blu";
break;
}
$out .="<tr class=\"$stileCorrente\"><td> $val </td></tr>";
}

return $out;
}

Gregor
23-09-2008, 08:38
Il codice di Ciuhd e di john_revelator restituiscono quello che mi serve :D
Adesso adatto alla mia pagina.
Grazie a tutti coloro che hanno partecipato a questo thread :)

ciuhd
23-09-2008, 09:16
Prego ;)