Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 27

Discussione: rowspan dinamico

  1. #11
    Credo che il problema stia nel fatto che hai aggiunto due righe in rowSpaned()
    Codice PHP:
    function rowSpaned($arr){  
    return 
    '<tr><td>'.$arr['inizio'].'</td> 
                <td>'
    .$arr['fine'].'</td></tr>';
                
    /*<td>'.$arr['prezzo_singola'].'</td> 
                <td>'.$arr['prezzo_doppia'].'</td> */

    In pratica devi gestire ogni singola colonna separatamente dalle altre tenendo conto del valore di rowspan calcolato. Se la seconda cella di una riga ha lo stesso valore delle 2 celle sottostanti allora ha rowspan 3 quindi dovrai omettere dalla tabella le 2 celle sottostanti successive. E questo discorso lo dovresti fare per ogni colonna. Il codice che ti ho postato tiene conto solo dei vaolri relativi al prezzo_singolo.
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  2. #12
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ho fatto molte prove prima di postare di nuovo e letto con attenzione ciō che mi hai scritto ma non riesco a far funzionare il codice nemmeno relativamente al prezzo_singolo.

    La struttura e il contenuto della mia tabella č la seguente:

    CREATE TABLE `prezzi_info` (
    `id_info` tinyint(3) unsigned NOT NULL auto_increment,
    `idStrutt` tinyint(3) unsigned default NULL,
    `data_inizio` date default NULL,
    `data_fine` date default NULL,
    `prezzo_singola` decimal(7,2) default NULL,
    `prezzo_doppia` decimal(7,2) default NULL,
    `info` text,
    PRIMARY KEY (`id_info`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    INSERT INTO `prezzi_info` VALUES (1,1,'2005-01-01','2005-03-25',48,85,NULL);
    INSERT INTO `prezzi_info` VALUES (2,1,'2005-10-28','2005-12-31',48,85,NULL);
    INSERT INTO `prezzi_info` VALUES (3,1,'2005-03-26','2005-06-25',57.5,104,NULL);
    INSERT INTO `prezzi_info` VALUES (4,1,'2005-09-25','2005-10-27',57.5,104,NULL);
    INSERT INTO `prezzi_info` VALUES (5,1,'2005-06-26','2005-07-30',77,143,NULL);
    INSERT INTO `prezzi_info` VALUES (6,1,'2005-08-28','2005-09-24',77,143,NULL);
    INSERT INTO `prezzi_info` VALUES (7,1,'2005-07-31','2005-08-27',101,191,NULL);

  3. #13
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Codice PHP:
    <?php
    function rowSpanin($arr){ 
    return 
    '<tr> 
             <td>'
    .$arr['inizio'].'</td> 
             <td>'
    .$arr['fine'].'</td>
             <td rowspan="'
    .$arr['row'].'">'.$arr['prezzo_singola'].'</td> 
             <td rowspan="'
    .$arr['row'].'">'.$arr['prezzo_doppia'].'</td> 
            </tr>'


    function 
    rowSpaned($arr){ 
    return 
    '<tr>
                <td>'
    .$arr['inizio'].'</td>
                <td>'
    .$arr['fine'].'</td>
                <td rowspan="'
    .$arr['row'].'">'.$arr['prezzo_singola'].'</td> 
                <td rowspan="'
    .$arr['row'].'">'.$arr['prezzo_doppia'].'</td> 
            </tr>'



    function 
    row($arr){ 
    return 
    '<tr>
                <td>'
    .$arr['inizio'].'</td>
                <td>'
    .$arr['fine'].'</td> 
                <td>'
    .$arr['prezzo_singola'].'</td>
                <td rowspan="'
    .$arr['row'].'">'.$arr['prezzo_doppia'].'</td> 
            </tr>'

    }

    $conn mysql_connect("localhost","root");
    mysql_select_db("isolegemelle");

    $query mysql_query("select date_format(data_inizio,\"%d/%m\") as inizio, date_format(data_fine,\"%d/%m\") as fine,
    prezzo_singola,prezzo_doppia from prezzi_info 
    where idstrutt = 1 order by prezzo_singola"
    );

    while (
    $resDati[] = mysql_fetch_array($query)) ;

    $row=1
    $old=''
    foreach(
    $resDati AS $key => $value) { 
    if (
    $value['prezzo_singola']==$old$row++; 
    else { 
        for (
    $i=$key-1;$i>=$key-$row && $key>0;--$i
        
    $resDati[$i]['row']=$row
        
    $row=1
        } 
    $old=$value['prezzo_singola']; 

    for (
    $i=$key;$i>$key-$row;--$i
        
    $resDati[$i]['row']=$row
    //print_r($resDati);

    $tmp 0
    $table=''
    foreach(
    $resDati AS $value) { 
        if (
    $value['row']>1) { 
            if (
    $value['row']!=$tmp) { 
                    
    $table.= rowSpanin($value); 
            } else 
    $table.= rowSpaned($value); 
        }else 
    $table.= row($value); 
      
    $tmp $value['row']; 


    echo 
    "<table border=\"1\">"
    while (
    $resDati[] = mysql_fetch_array($query)) ; 
    echo 
    $table;
    echo 
    "</table>";
    ?>
    Ho provato ad apportare varie modifiche secondo i suggerimenti di anakin ma mi allontano ancora di pių da ciō che vorrei ottenere.

    Il codice appena riportato mi genera questa tabella, con le ultime due colonne che non dovrebbero esserci:
    Immagini allegate Immagini allegate

  4. #14
    prova a modificare l'ultimo pezzo (dopo il print_r commentato) cosė:
    codice:
    $tmp = ''; 
    $table=''; 
    foreach($resDati AS $value) { 
        if ($value['row']>1) { 
            if ($value['row']."-".$value['prezzo_singola']."-".$value['prezzo_doppia']!=$tmp) { 
                    $table.= rowSpanin($value); 
            } else $table.= rowSpaned($value); 
        }else $table.= row($value); 
      $tmp = $value['row']."-".$value['prezzo_singola']."-".$value['prezzo_doppia']; 
    } 
    
    echo "<table border=\"1\">"; 
    echo $table;
    echo "</table>";



    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si č completamente identificato con quello del suo padrone

  5. #15
    ah e la funzione rowSpaned l'ho modificata cosė:
    codice:
    function rowSpaned($arr){ 
    return '<tr>
                <td>'.$arr['inizio'].'</td>
                <td>'.$arr['fine'].'</td>
            </tr>'; 
    }



    mi ero dimenticato di postarla prima
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si č completamente identificato con quello del suo padrone

  6. #16
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ciao Manuel. Gentilissimo!!!
    Non so davvero come ringraziarti. Ho provato anche ad aggiungere qualche altro record per verificare il corretto funzionamento dello script ed č perfetto.
    Ovviamente ringrazio ancora anakin per tutto l'aiuto datomi.
    Nel caso veniate in vacanza nel nord Sardegna un bel giro turistico e un buon mirtino lo offro io.

    Appena finisco il lavoro mi studio con calma il vostro codice per non usarlo passivamente.
    Grazie ancora.

  7. #17
    terrō in considerazione il giretto in Sardegna

    comunque lo script che usavi tu era quasi perfetto, l'unica cosa che ho modificato č il calcolo di $tmp accodando anche diverse altre variabili perché se usavi solo row i casi in cui la row del record precedente era uguale a quello successivo ti faceva sballare la grafica (come nel tuo caso avevi 4 row valorizzati a 2).

    L'altra cosa č la funzione che disegna la tabella, ho tolto appunto la parte che disegnava i record aventi il rowspan, che giustamente vanno disegnati solo la prima volta.




    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si č completamente identificato con quello del suo padrone

  8. #18
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Sei un grande.
    Non immagini quante ricerche abbia fatto su google senza trovare uno straccio di script relativo al problema, nemmeno nei gruppi e nei vari siti stranieri.
    Per il giretto contaci sempre.
    Grazie ancora.

  9. #19
    mmm interessante il girettino in sardegna

    Per quanto riguarda lo script 13manuel84 ha sgamato l'errore relativo ad eventuali rowspan uguali consecutivi , me ne sono accorto mentre rifacevo lo script. Che posto, magari puō tornare utile (sempre non ci siano altri bug), ora basta passare un'array bidimensionale, non importa di quanti elementi.
    codice:
    function getRowN(&$arr,$nameField) {
    /************************************/
    	$row=1;
    	$old='';
    	$nameRow=$nameField.'_row';
    	
    	foreach($arr AS $key => $value) {
    		if ($value[$nameField]==$old) $row++;
    		else {
    			for ($i=$key-1;$i>=$key-$row && $key>0;--$i)
    				$arr[$i][$nameRow]=$row;
    			  $row=1;
    		}
    	$old=$value[$nameField];
    	}
    	for ($i=$key;$i>$key-$row;--$i)
    		$arr[$i][$nameRow]=$row;
    }
    
    function rearrange(&$arr){
    /************************************/
    
    foreach($arr AS $key => $value){
     foreach($value AS $k => $v)
    	getRowN($arr,$k);
    	break;
    	}
    }
    function createBodyTable($arr) {
    /********************************/
    rearrange($arr);
    
    	$bodyTable = '';
    	for($i=0,$c=count($arr);$i<$c;$i++) {
    	
    		$tmp = array_chunk($arr[$i], count($arr[$i])/2,true);
    		$bodyTable.='<tr>';
    			foreach($tmp[0] AS $k => $v) {
    			if ($tmp[1][$k.'_row']>1) {
    				if (!isset($arr[$i-1]) || 
    				    $tmp[1][$k.'_row']!=$arr[$i-1][$k.'_row'] || 
    				    $v!=$arr[$i-1][$k])
    			$bodyTable.="\t".'<td rowspan="'.$tmp[1][$k.'_row'].'">'.$v.'</td>'."\r\n";
    			}
    			else  $bodyTable.="\t".'<td>'.$v.'</td>'."\r\n";
    			
    			}
    			$bodyTable.='</tr>';
    		}
    		
    		return $bodyTable;
    }
    In pratica rearrange() conta i rowspan necessari per ogni campo dell' array (che deve essere bidimensionale). Quindi nel caso di nicola75ss si deve prima modificare l'array unendo in un unico campo/elemento le due date, perche nel caso ci siano due date iniziali onsecutve uguali "rowspanerebbe".
    poi basta fare:
    codice:
    <table border="1">
    <?php echo createBodyTable($resDati)?>
    </table>
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  10. #20
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Non ho parole anakin. Siete fantastici. Questo forum č da PAURA!!!
    Ancora mille grazie e complimenti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.