Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875

    ordinamento sbagliato delle proposte su layout a 3 colonne

    salve a tutti
    sto avendo un piccolo problema sull'allineamento delle offerte di un albergo.
    La pagina attualmente online mostra le offerte una sotto l'altra e sono ordinate per data di inizio validit�.

    Ora sto modificando un po' la pagina aggiungendo delle foto random e sistemandole su 3 colonne.
    Vorrei che l'ordine sia sempre da sinistra verso destra.

    In pratica vorrei l'ordinamento come in questa immagine (ho messo i numeri all'interno del riquadro per far capire meglio):


    Mentre attualmente escono in questo modo (una sotto l'altra, poi vanno sulla seconda colonna e poi sulla terza)


    La query tira i risultati fuori correttamente ma secondo me l'errore � nella "paginazione delle colonne".

    Questo � il codice che sto usando (comprensivo di quello per estrarre le foto da una cartella)

    Codice PHP:
    $numerocolonne 0;
    //print "<table width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n";
    echo"<div class=\"row\" align=\"center\">";
    while (
    $riga mysql_fetch_array($risultato)) {
    $numerocolonne += 1;
    //if ($numerocolonne ==1) print "<tr valign=top align=\"center\">\n";
    if ($numerocolonne ==1) print "<div class=\"four columns\">\n";
    $id_offerta $riga['id_offerta'];
    $valida_da $riga['valida_dal'];
    $valida_fino $riga['valida_fino'];
    $prezzo=$riga['prezzo'];
    $prezzo number_format($prezzo2'.''');
    $prezzo_come=$riga['prezzo_come'];
    if (
    $prezzo_come == "1"

    $prezzo_come="Prezzo al giorno a persona";
    }
    elseif (
    $prezzo_come == "2"

    $prezzo_come="Prezzo di 2 notti per persona";
    }
    elseif (
    $prezzo_come == "3"

    $prezzo_come="Prezzo 3 notti a persona";
    }
    elseif (
    $prezzo_come == "4"

    $prezzo_come="Prezzo 4 notti a persona";
    }
    elseif (
    $prezzo_come == "5"

    $prezzo_come="Prezzo 5 notti a persona";
    }
    elseif (
    $prezzo_come == "6"

    $prezzo_come="Prezzo 6 notti a persona";
    }
    elseif (
    $prezzo_come == "7"

    $prezzo_come="Prezzo settimanale per persona";
    }
    elseif (
    $prezzo_come == "10"

    $prezzo_come="Prezzo 10 giorni a persona";
    }
    elseif (
    $prezzo_come == "14"

    $prezzo_come="Prezzo 14 notti a persona";
    }
    //$minimo_notti=$riga['minimo_notti'];


    $tipo_camera=$riga['tipo_camera'];

    $trattamento=$riga['trattamento'];

    if (
    $trattamento == "1"

    $trattamento="Mezza Pensione bevande escluse";
    }
    elseif (
    $trattamento == "2"

    $trattamento="Pensione Completa bevande escluse";
    }
    elseif (
    $trattamento == "3"

    $trattamento="Camera e Colazione";
    }
    elseif (
    $trattamento == "4"

    $trattamento="Solo Pernottamento";
    }
    elseif (
    $trattamento == "5"

    $trattamento="All Inclusive";
    }


    //$altre_notti = $riga['altre_notti'];
    $supplementi_riduzioni $riga['supplementi_riduzioni'];

    $incluso $riga['incluso'];
    //mostro una foto random per ogni offerta
    // definiamo il percorso della cartella d'origine
    $path "foto_offerte/";
    // stabiliamo i formati consentiti
    $formati = array('gif','jpg','bmp','png');
    // apriamo la cartella che contiene le immagini
    $open opendir($path);
        
    // leggiamo tutte le immagini con un ciclo e
        // e estraiamo soltanto quelle con estensione consentita
        
    $img = array();
        while(
    false !== ($f=readdir($open))) {
            
    $path_info pathinfo($f);
            if(
    in_array($path_info['extension'],$formati)){
              
    $img[]=$f;
         }
      }
        
    // contiamo le immagini disponibili
        
    $count count($img);
        
    // se il risultato del conteggio ï¿½ maggiore di 0...
        
    if($count!=0)
      {
        
    // ...stabiliamo un numero massimo di immagini da visualizzare
        
    $limit 20;
        
    // se per� il numero delle immagini ï¿½ inferiore al valore massimo...
        
    if($count $limit){
            
    // ...allora le visualizzeremo tutte
            
    $limit $count;
        }
            
    // procediamo con l'estrazione random
              
    for ($i 1$i <= $limit; ++$i) {
                  
    $info rand(0,($count-1));
                  
    $foto_da_mostrare"<img width=100% src=\"".$path.$img[$info]."\">";
                }
      }else{
        
    // notifica in caso di assenza di immagini
        
    echo "Non sono presenti immagini nella directory.";
    }
        
    echo
    "<div class=\"div-offerte\">$foto_da_mostrare<h5 style=\"color: #339966\"><strong>Dal $valida_da al $valida_fino</strong></h5>
    <span style=\"font-size: 15pt;\"><strong><span style=\"color: #339966;\">
    $prezzo Euro</span><br></strong></span></strong></span><strong> $prezzo_come</strong><br>$trattamento<br>$tipo_camera<br><br><div class=\"medium oval primary btn\"><a href=\"#\">Dettagli Offerta</a></div></div><br>";
    //nella riga sottostante utilizzo la variabile $colonne_offerte per far uscire 3 offerte su ogni riga in modo da non avere una formattazione sbagliata
    if ($numerocolonne >=$colonne_offerte) {
              print 
    "</div>\n";
              
    $numerocolonne 0;
          }      
    }
    print 
    "</div>\n"
    Dove commetto l'errore?
    L'esempio online di test potete vederlo qui:
    http://bit.ly/2qJDSeO

    Grazie

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    A me non sembra un problema di php. il tuo codice sembra corretto da questo punto di vista.
    Il "problema" è di tipo css/html: basta che vedi la classe "four columns" (quella che contiene 4 offerte) che ha una width di circa il 32%

    Credo ti convenga chiedere nella sezione html oppure vedere che altri stili ti offre il tuo template

  3. #3
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    Su questo sito utilizzo gumby framework anche se preferisco bootstrap.
    Sicuro che il problema viene dalla classe four columns?
    Alla fine dice solo che quel div deve occupare 4 delle 12 colonne che compongono il layout, ecco l'esempio:
    https://gumbyframework.com/docs/grid/#!/basic-grid

    Possibile che la classe css vada a cambiarmi l'ordinamento che ho fatto tramite php e la query al database?

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Prova questo.

    Codice PHP:
    <?php
    // questa lista è paragonabile al risultato della query
    $array         = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
    // metto i dati di $array in un altro array
    $result     = array();
    // numero di colonne
    $numerocolonne 3;

    // Conta delle righe => count($array) è paragonabile a mysql_num_rows
    $numero_righe  = (int) (count($array) / $numerocolonne);
    if (
    $numero_righe != (count($array) / $numerocolonne) ) {
     
    $numero_righe++;
    }
    // conta i record processati
    $conta         0;
    foreach(
    $array as $key => $value) {
     
    $colonna                 = (int) ($conta $numero_righe);
     
    $riga                    $conta - ($colonna $numero_righe);
     
    $result[$riga][$colonna] = $value;
     
    $conta++;
    }
    ?>
    <table border="1"><?php
     
    foreach($result as $subarray) {?>
      <tr><?php
       
    foreach($subarray as $value2) {?>
        <td><?php print $value2;?></td><?php
       
    }?>
      </tr><?php
     
    }?>
    </table>
    Dà :

    1 8 15
    2 9 16
    3 10 17
    4 11 18
    5 12 19
    6 13 20
    7 14
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Prova questo.

    Codice PHP:
    <?php
    // questa lista è paragonabile al risultato della query
    $array         = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
    // metto i dati di $array in un altro array
    $result     = array();
    // numero di colonne
    $numerocolonne 3;

    // Conta delle righe => count($array) è paragonabile a mysql_num_rows
    $numero_righe  = (int) (count($array) / $numerocolonne);
    if (
    $numero_righe != (count($array) / $numerocolonne) ) {
     
    $numero_righe++;
    }
    // conta i record processati
    $conta         0;
    foreach(
    $array as $key => $value) {
     
    $colonna                 = (int) ($conta $numero_righe);
     
    $riga                    $conta - ($colonna $numero_righe);
     
    $result[$riga][$colonna] = $value;
     
    $conta++;
    }
    ?>
    <table border="1"><?php
     
    foreach($result as $subarray) {?>
      <tr><?php
       
    foreach($subarray as $value2) {?>
        <td><?php print $value2;?></td><?php
       
    }?>
      </tr><?php
     
    }?>
    </table>
    Dà :

    1 8 15
    2 9 16
    3 10 17
    4 11 18
    5 12 19
    6 13 20
    7 14
    no ma io vorrei invece un risultato tipo

    1 2 3
    4 5 6
    7 8 9
    10 11 12

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Scusa, ma quello che chiedi realmente mi pareva talmente ovvio che ho pensato volessi il contrario.

    Codice PHP:
    <?php
    // questa lista è paragonabile al risultato della query
    $array         = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22);
    // numero di colonne
    $numerocolonne 3;
    ?>
    <table border="1"><?php
     $numerocolonne 
    3;
     
    $indice        0;
     foreach(
    $array as $value) {
      if (
    $indice == 0) {?>
       <tr><?php
      
    }
      
    $indice++;?>
      <td><?php print $value;?></td><?php
      
    if ($indice == $numerocolonne) {
       
    $indice 0;?>
       </tr><?php
      
    }
     }
     if (
    $indice != 0) {?>
     </tr><?php
     
    }?>
    </table>
    Dà :

    1 2 3
    4 5 6
    7 8 9
    10 11 12
    13 14 15
    16 17 18
    19 20 21
    22
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    ok ti ringrazio, domani mattina provo e ti faccio sapere il risultato.
    Grazie per adesso

  8. #8
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    ho provato il codice e fa quello che dovrebbe fare.
    Il problema è che non riesco a mettere il risultato della query nell'array.
    Come posso fare?

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Non devi. Devi fare una query e poi fare un ciclo. L' array mi era comodo è per questo che l'ho preso.
    la parte importante sta nel codice alĺinterno del ciclo.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    ma quindi devo fare il tuo ciclo insieme al mio ciclo while? oppure il while devo eliminarlo?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.