Pagina 3 di 3 PrimoPrimo 123
Visualizzazione risultati 61 fino 86 di 86
Like Tree3Likes

Discussione: Ricerca per filtri (o Motore a strati)

  1. #61
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Quindi si torna al JS?
    Vedi tu... alla luce di quanto hai detto nel penultimo messaggio vanno bene entrambe le strade.

    Per esempio, che vuol dire?
    Codice PHP:
    $grouped_results = [];
    foreach (
    $results as $result) {
    $grouped_results[$result['marca']][] = $result;
    }
    Vuol dire:
    1. crea un vettore chiamato $grouped_results
    2. per ogni elemento $result dentro al vettore $results (ovvero per ogni telecomando) ripeti il punto 3:
    3. metti una copia del telecomando al vettore $grouped_results[$result['marca']], ovvero il vettore che si trova dentro a $grouped_results indicizzato con la marca del telecomando

    il risultato è nella forma:
    Codice:
    [
      'marca 1' => [telecomando1, telecomando4, telecomando7],
      'marca 2' => [telecomando2, telecomando3],
      ...
      'marca N' => [telecomando6, telecomando8]
    ]
    dove ciascuno dei telecomandi è un vettore associativo con tutti i soliti campi marca, modello eccetera.

    In ogni caso credo di capire che per vedere tutti i dati e non solo quelli di esempio debbo inserire
    [...]
    al posto di
    [...]
    Naturalmente ottengo un
    Parse error: syntax error, unexpected '.' in /membri/veronacitysera/caravelli2/--pagina-prodotti.php on line 1133
    Sì, esatto.
    Alla sestultima riga del codice che hai mostrato (quella del <br/> tra la riga della codifica e quella del numero dip) c'è un punto e virgola dopo il <br/> che va tolto.

    I suggerimenti che do più spesso:


  2. #62
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Vedi tu... alla luce di quanto hai detto nel penultimo messaggio vanno bene entrambe le strade.


    Vuol dire:
    1. crea un vettore chiamato $grouped_results
    2. per ogni elemento $result dentro al vettore $results (ovvero per ogni telecomando) ripeti il punto 3:
    3. metti una copia del telecomando al vettore $grouped_results[$result['marca']], ovvero il vettore che si trova dentro a $grouped_results indicizzato con la marca del telecomando
    Quindi tiene conto delle marche anche se i prodotti non sono inseriti in ordine? E come fa?

    il risultato è nella forma:
    Codice:
    [
      'marca 1' => [telecomando1, telecomando4, telecomando7],
      'marca 2' => [telecomando2, telecomando3],
      ...
      'marca N' => [telecomando6, telecomando8]
    ]
    Si, da quel che hai scritto sembrerebbe proprio così...

    dove ciascuno dei telecomandi è un vettore associativo con tutti i soliti campi marca, modello eccetera.

    Sì, esatto.
    Alla sestultima riga del codice che hai mostrato (quella del <br/> tra la riga della codifica e quella del numero dip) c'è un punto e virgola dopo il <br/> che va tolto.
    Errori di copia e incolla

    A questo punto manca il contatore i$ (che dovrebbe contare i prodotti dall'inizio
    E la formattazione che in JS era
    Codice HTML:
    var result_container = $('<div>').addClass('risultato-ricerca borgia');

  3. #63
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Quindi tiene conto delle marche anche se i prodotti non sono inseriti in ordine? E come fa?
    In PHP tutti i vettori sono hash table. Puoi creare vettori indicizzati su stringe:
    Codice PHP:
    $hash_table = [];
    $hash_table['indice 1'] = 'valore 1';
    $hash_table['indice 2'] = 'valore 2';
    ...
    $hash_table['indice N'] = 'valore N';
    E tutti i vettori sono eterogenei, puoi assegnare un valore qualunque a ciascun elemento, anche un altro vettore:
    Codice PHP:
    $array = [];
    $array[] = 42;
    $array[] = 'string';
    $array[] = [1, 2, 3];
    Da notare la sintassi $vettore[] = valore; che vuol dire aggiungi l'elemento valore al vettore $vettore.

    Metti insieme queste tre cose e ottieni il tuo vettore di telecomandi indicizzato per marca:
    Codice PHP:
    $telecomandi = [];
    $telecomandi['marca 1'][] = $telecomando1;
    $telecomandi['marca 2'][] = $telecomando2;
    $telecomandi['marca 1'][] = $telecomando4;
    ...
    $telecomandi['marca M'][] = $telecomandoN;

    I suggerimenti che do più spesso:


  4. #64
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    In PHP tutti i vettori sono hash table. Puoi creare vettori indicizzati su stringe:
    Codice PHP:
    $hash_table = [];
    $hash_table['indice 1'] = 'valore 1';
    $hash_table['indice 2'] = 'valore 2';
    ...
    $hash_table['indice N'] = 'valore N';
    E tutti i vettori sono eterogenei, puoi assegnare un valore qualunque a ciascun elemento, anche un altro vettore:
    Codice PHP:
    $array = [];
    $array[] = 42;
    $array[] = 'string';
    $array[] = [1, 2, 3];
    Da notare la sintassi $vettore[] = valore; che vuol dire aggiungi l'elemento valore al vettore $vettore.

    Metti insieme queste tre cose e ottieni il tuo vettore di telecomandi indicizzato per marca:
    Codice PHP:
    $telecomandi = [];
    $telecomandi['marca 1'][] = $telecomando1;
    $telecomandi['marca 2'][] = $telecomando2;
    $telecomandi['marca 1'][] = $telecomando4;
    ...
    $telecomandi['marca M'][] = $telecomandoN;
    Come posso sfruttare questa interessante funzione?

    Nel frattempo, ho formattato i campi riordinando i risultati (funziona tutto)
    Codice PHP:
    <?php
    // Recupera i dati (questo non è stato modificato)
    $items = file('database/telecomandi01.txt', FILE_IGNORE_NEW_LINES);
    $results = [];
    foreach (
    $items as $record) {
    $data = explode('|', $record);
    $results[] = [
    'marca' => $data[0],
    'modello' => $data[1],
    'link' => $data[2],
    'immagine' => $data[3],
    'numero_tasti' => $data[4],
    'colore_tasti' => $data[5],
    'frequenza' => $data[6],
    'codifica' => $data[7],
    'dip' => $data[8]
    ];
    }

    // Raggruppa i dati per marca
    $grouped_results = [];
    foreach (
    $results as $result) {
    $grouped_results[$result['marca']][] = $result;
    }

    // Stampa i risultati: un "blocco" per ogni marca, ogni blocco contiene i telecomandi
    foreach ($grouped_results as $marca => $telecomandi) {
    // Stampa la marca
    echo "<div class=\"tabellasuperiore\">";
    echo
    "<hr><h2 class=\"nome_telecomando\">" . $marca . "</h2><br/></div>";

    // Stampa i telecomandi di quella marca (a titolo di esempio mostra solo marca e modello)
    foreach ($telecomandi as $telecomando) {
    echo
    "<div class=\"risultato-ricerca\"><div class=\"borgia\">";
    echo
    $i . "-" . $telecomando['marca'] . "-" . $telecomando['modello'] . "<br/>";
    echo
    "<a href=\"" . $telecomando['link'] . "\">"
    . "<img src=\"" . $telecomando['immagine'] . "\" alt=\"" . $telecomando['marca'] . " " . $telecomando['modello'] . "\" title=\"" . $telecomando['marca'] . " " . $telecomando['modello'] . "\" width=\"150\">"
    . "<br/>"
    . "<h2 class=\"nome_telecomando\">" . $telecomando['marca'] . "</h2> - " . $telecomando['modello']
    .
    "</a>"
    . "<br/>"
    . "numero tasti " . $telecomando['numero_tasti']
    .
    "<br/>"
    . "colore tasti " . $telecomando['colore_tasti']
    .
    "<br/>"
    . "frequenza " . $telecomando['frequenza']
    .
    "<br/>"
    . "tipo codifica " . $telecomando['codifica']
    .
    "<br/>"
    . "numero dip " . $telecomando['dip']
    .
    "<br/></div></div>";
    }
    }
    ?>
    Ho il mio css al quale ho aggiunto una classe per formattare la tabella (senza table e tr) riportando le classi dell'altra pagina (alcune in effetti non le uso)
    Codice:
      <style type="text/css">
    h2.nome_telecomando {
        display: inline;
    }
    .risultato-ricerca {
        display: block;
        text-align: center;
    }
    
    .risultato-ricerca a img {
        display: block;
        margin: auto;
    }
    #risultati-ricerca {
        overflow: auto;
        width=100%
    }
    .risultato-ricerca {
        display: block;
        text-align: center;
        float: left;
        width: 25%;
    }
    .tabellasuperiore {
    	clear: both;
    	width: 100%;
        border: solid 1px #cccccc;
    	background: #F78731;
    }
    </style>
    A questo punto ho una variabile i$ che dovrebbe contenere il numero progressivo di record
    Se provo a contarla con un i$=i$+1 nel primo ciclo for-next mi stampa sempre il numero totale di righe (17) e non il risultato che voglio...

    Riprovo mettendo

    Codice PHP:
    <?php
    // Recupera i dati (questo non è stato modificato)
    $items = file('database/telecomandi01.txt', FILE_IGNORE_NEW_LINES);
    $results = [];
    foreach (
    $items as $record) {
    $i=$i+1
    $data
    = explode('|', $record);
    $results[] = [
    'record' => $i,
    'marca' => $data[0],
    'modello' => $data[1],
    'link' => $data[2],
    'immagine' => $data[3],
    'numero_tasti' => $data[4],
    'colore_tasti' => $data[5],
    'frequenza' => $data[6],
    'codifica' => $data[7],
    'dip' => $data[8]
    ];
    [...]
    E come immaginavo si blocca. (in effetti mentre lo scrivevo mi son reso conto di mischiare capra e cavoli, ma ci ho tentato)

    come lego il numero di record al prodotto?

    Alla fine dovrebbe venire qualcosa come
    Codice PHP:
    echo $i . "-" . $telecomando['marca'] . "-" . $telecomando['modello'] . "<br/>";
    Cioè un numero univoco in base alla riga del file telecomando01.txt, marca e modello...
    Ci ho pensato: che bisogno ho di una variabile $i? ho la variabile $telecomando che si incrementa col foreach.
    Tutto felice cambio il mio $i ottenendo

    Codice PHP:
    foreach ($telecomandi as $telecomando) {
    echo
    "<div class=\"risultato-ricerca\"><div class=\"borgia\">";
    echo
    $telecomando . "-" . $telecomando['marca'] . " - " . $telecomando['modello'] . "<br/>";
    E il risultato è (uno a caso)
    Array - PROMATER - 1 - 224.7MHz

    Cosa sbaglio?

  5. #65
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Come posso sfruttare questa interessante funzione?
    Così come stiamo già facendo
    Codice PHP:
    $grouped_results = [];
    foreach (
    $results as $result) {
    $grouped_results[$result['marca']][] = $result;
    }
    Per il resto: dipende da cosa intendi ottenere con la numerazione.
    Se è solo un fatto estetico dovresti usare semplicemente <ol>:
    Codice PHP:
    echo "<ol>";
    foreach (
    $telecomandi as $telecomando) {
    echo
    "<li>" . $telecomando . "-" . $telecomando['marca'] . " - " . $telecomando['modello'] . "</li>";
    }
    echo
    "</ol>";
    Sistemando successivamente le varie classi CSS e relativi stili.

    Se invece non è solo una questione estetica bisogna chiarire bene cosa significano quei numeri. O sono intrinsecamente associati a ciascun telecomando, come un identificatore univoco (nel qual caso dovrebbero essere letti nel file txt), oppure no.
    Ma se non lo sono allora che ci stanno a fare? Quello che oggi è il telecomando 1, se domani modifichi il file txt, può diventare il telecomando 7, creando confusione.

    E il risultato è (uno a caso)
    Array - PROMATER - 1 - 224.7MHz
    La variabile $telecomando è già "occupata" a memorizzare i dati del telecomando corrente, non puoi usarla anche come contatore. Lo si vede dal foreach:
    Codice PHP:
    foreach ($telecomandi as $telecomando) {
    così come quando accedi ai campi del vettore, per esempio $telecomando['marca'].

    I suggerimenti che do più spesso:


  6. #66
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Così come stiamo già facendo
    Codice PHP:
    $grouped_results = [];
    foreach (
    $results as $result) {
    $grouped_results[$result['marca']][] = $result;
    }
    Per il resto: dipende da cosa intendi ottenere con la numerazione.
    Se è solo un fatto estetico dovresti usare semplicemente <ol>:
    Codice PHP:
    echo "<ol>";
    foreach (
    $telecomandi as $telecomando) {
    echo
    "<li>" . $telecomando . "-" . $telecomando['marca'] . " - " . $telecomando['modello'] . "</li>";
    }
    echo
    "</ol>";
    Sistemando successivamente le varie classi CSS e relativi stili.
    In effetti è un contatore per stabilire l'anzianità dell'inserimento...

    Se invece non è solo una questione estetica bisogna chiarire bene cosa significano quei numeri. O sono intrinsecamente associati a ciascun telecomando, come un identificatore univoco (nel qual caso dovrebbero essere letti nel file txt), oppure no.
    Ma se non lo sono allora che ci stanno a fare? Quello che oggi è il telecomando 1, se domani modifichi il file txt, può diventare il telecomando 7, creando confusione.
    Ci devo riflettere. In effetti serve a me per guardare la cronologia dell'inserimento dei prodotti...


    La variabile $telecomando è già "occupata" a memorizzare i dati del telecomando corrente, non puoi usarla anche come contatore. Lo si vede dal foreach:
    Codice PHP:
    foreach ($telecomandi as $telecomando) {
    così come quando accedi ai campi del vettore, per esempio $telecomando['marca'].
    A questo punto lo metto nel file .txt. dev'essere univoco...

  7. #67
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Se quello che ti serve è l'anzianità, nel file txt dovresti aggiungere la data o timestamp di inserimento.

    I suggerimenti che do più spesso:


  8. #68
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Se quello che ti serve è l'anzianità, nel file txt dovresti aggiungere la data o timestamp di inserimento.
    Il timestamp sarebbe interessante, ma dovrebbe prenderlo da dove? Dalla scheda, presumo...
    In rete si trovano ottimi esempi, tipo (non è un timestamp)
    Codice:
    				
    				<script>
    				function Agg()
    				{
    				    this.length = Agg.arguments.length;
    				    for (var i=0; i>this.length; i++)
    				    {
    				        this[i + 1] = Agg.arguments[i];
    				    }
    				}
    				var gg = new Agg();
    				    gg[0] = "Domenica";
    				    gg[1] = "Lunedi";
    				    gg[2] = "Martedi";
    				    gg[3] = "Mercoledi";
    				    gg[4] = "Giovedi";
    				    gg[5] = "Venerdi";
    				    gg[6] = "Sabato";
    				var mm = new Agg();
    				    mm[0]  = "Gennaio";
    				    mm[1]  = "Febbraio";
    				    mm[2]  = "Marzo";
    				    mm[3]  = "Aprile";
    				    mm[4]  = "Maggio";
    				    mm[5]  = "Giugno";
    				    mm[6]  = "Luglio";
    				    mm[7]  = "Agosto";
    				    mm[8]  = "Settembre";
    				    mm[9]  = "Ottobre";
    				    mm[10] = "Novembre";
    				    mm[11] = "Dicembre";
    				var dd = new Date(document.lastModified);
    				with (document)
    				{
    				    write("Pagina aggiornata in data ");
    				    write(gg[(dd.getDay() + 1)], " ");
    				    write(dd.getDate(), " ");
    				    write(mm[(dd.getMonth())], " ");
    				    write(" ", dd.getFullYear());
    				    write(" alle ore ");
    				    write(dd.getHours(), ":");
    				    write(dd.getMinutes(), ":");
    				    write(dd.getSeconds());
    				}</script>
    Preso da https://www.mrwebmaster.it/javascrip...iano_6801.html

    Il problema è che lo script andrebbe sulla pagina del prodotto. Che dovrebbe quindi generare il file txt... ,mi sembra complicato (in teoria però la pagina del prodotto potrebbe leggere i dati dal file txt)

  9. #69
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Il timestamp sarebbe interessante, ma dovrebbe prenderlo da dove? Dalla scheda, presumo...
    Beh, il punto di partenza era che l'inserimento dei dati nel file txt volevi inserirli tu a mano. Quindi inseriresti a mano anche il timestamp.

    Il problema è che lo script andrebbe sulla pagina del prodotto. Che dovrebbe quindi generare il file txt... ,mi sembra complicato (in teoria però la pagina del prodotto potrebbe leggere i dati dal file txt)
    È la pagina del prodotto che può essere generata leggendo i dati dal file di testo. Quel codice di per se non fa altro che scrivere una data nel formato italiano anziché seguire le disposizioni del browser (il che non mi sembra nemmeno una buona idea ).

    I suggerimenti che do più spesso:


  10. #70
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Beh, il punto di partenza era che l'inserimento dei dati nel file txt volevi inserirli tu a mano. Quindi inseriresti a mano anche il timestamp.
    Si, riflettendoci ci ero arrivato. Timestamp e numero sequenziale a mano...

    È la pagina del prodotto che può essere generata leggendo i dati dal file di testo. Quel codice di per se non fa altro che scrivere una data nel formato italiano anziché seguire le disposizioni del browser (il che non mi sembra nemmeno una buona idea ).
    Ma infatti, perchè complicarsi la vita?
    Per generare la pagina dal file TXT ancora ci vuole, potrei già leggere i dati, ma faccio prima a scriverli a mano... tanto la pagina la genero a mano.
    MA quando le pagine saranno tante, se voglio cambiare un particolare nell'impostazione le devo cambiare tutte. Il problema non è risolvibile con il database perchè con quel programma le pagine devono esistere. E quindi dovrei lo stesso cambiare il template a mano per tutti i prodotti.... Joomla sarebbe meglio, ma voglio fare una cosa diversa....

  11. #71
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Ho modificato qui e là in base alle idee sviluppate.
    I risultati si trovano su http://veronacitysera.altervista.org...a-prodotti.php

    Per prima cosa ho aggiunto due campi
    Il primo la data nel formato aaaammgg... è scomodo da leggere ma è logico per l'ordinamento
    Il secondo è il progressivo di inserimento (in realtà avevo inserito altri prodotti prima, ma sto aggiustando le schede e conteggio solo quelle corrette)
    Quindi ora il record è

    Codice:
    ADHER|A433 - 433,92MHz|adher-a433-433.92mhz.html|images/Adher-A433--433.92Mhz-1-.jpg|1|bianco|433.92MHz|Codice fisso|8|20181228|0001
    Andando quindi a lavorare sul codice ho
    Codice PHP:
    <?php
    // Recupera i dati (questo non è stato modificato)
    $items = file('database/telecomandi01.txt', FILE_IGNORE_NEW_LINES);
    $results = [];
    foreach (
    $items as $record) {
    $data = explode('|', $record);
    $results[] = [
    'marca' => $data[0],
    'modello' => $data[1],
    'link' => $data[2],
    'immagine' => $data[3],
    'numero_tasti' => $data[4],
    'colore_tasti' => $data[5],
    'frequenza' => $data[6],
    'codifica' => $data[7],
    'dip' => $data[8],
    'data_inserimento' => $data[9],
    'num_record' => $data[10]
    ];
    }

    // Raggruppa i dati per marca
    $grouped_results = [];
    foreach (
    $results as $result) {
    $grouped_results[$result['marca']][] = $result;
    }

    // Stampa i risultati: un "blocco" per ogni marca, ogni blocco contiene i telecomandi
    foreach ($grouped_results as $marca => $telecomandi) {
    // Stampa la marca
    echo "<div class=\"tabellasuperiore\">";
    echo
    "<hr><h2 class=\"nome_telecomando\">" . $marca . "</h2><br/></div>";

    // Stampa i telecomandi di quella marca (a titolo di esempio mostra solo marca e modello)
    foreach ($telecomandi as $telecomando) {
    echo
    "<div class=\"risultato-ricerca\"><div class=\"borgia\">";
    echo
    $telecomando['num_record'] . " - " . $telecomando['marca'] . " - " . $telecomando['modello'] . "<br/>";
    echo
    "<a href=\"" . $telecomando['link'] . "\">"
    . "<img src=\"" . $telecomando['immagine'] . "\" alt=\"" . $telecomando['marca'] . " " . $telecomando['modello'] . "\" title=\"" . $telecomando['marca'] . " " . $telecomando['modello'] . "\" width=\"150\">"
    . "<br/>"
    . "<h2 class=\"nome_telecomando\">" . $telecomando['marca'] . "</h2> - " . $telecomando['modello']
    .
    "</a>"
    . "<br/>"
    . "numero tasti " . $telecomando['numero_tasti']
    .
    "<br/>"
    . "colore tasti " . $telecomando['colore_tasti']
    .
    "<br/>"
    . "frequenza " . $telecomando['frequenza']
    .
    "<br/>"
    . "tipo codifica " . $telecomando['codifica']
    .
    "<br/>"
    . "numero dip " . $telecomando['dip']
    .
    "<br/><br/>"
    . "Data inserimento <b>" . $telecomando['data_inserimento'] . "</b>"
    . "<br/></div></div>";
    }
    }
    ?>
    LA prima cosa che salta all'occhio è la data, dovrei trasformarla in un formato più "italiano", la seconda i due <br/> (credo sia meglio usare un <p>
    La terza è che in effetti i dati in bold ci stanno meglio... ma il modo migliore per farlo è il <b> o è meglio un div?

    Ultima cosa (la più importante)... ora debbo ordinare i dati a piacere...

  12. #72
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Il secondo è il progressivo di inserimento (in realtà avevo inserito altri prodotti prima, ma sto aggiustando le schede e conteggio solo quelle corrette)
    Puoi anche tenerlo, ma ora che hai il timestamp non serve più. A meno che tu non intenda usarlo in futuro come identificatore.

    LA prima cosa che salta all'occhio è la data, dovrei trasformarla in un formato più "italiano"
    Usa strtotime e date per convertire la data nel file di testo in un timestamp e poi darle il formato che vuoi:
    Codice PHP:
    . "Data inserimento <b>" . date('d/m/Y', strtotime($telecomando['data_inserimento'])) . "</b>"
    la seconda i due <br/> (credo sia meglio usare un <p>
    <p> rappresenta un paragrafo o capoverso, ha senso quasi esclusivamente all'interno di un lungo testo da leggere (per esempio un libro o una descrizione). Per campi diversi di un singolo prodotto probabilmente è più ragionevole uno <span> con una formattazione (CSS) adeguata.

    La terza è che in effetti i dati in bold ci stanno meglio... ma il modo migliore per farlo è il <b> o è meglio un div?
    <b> è in disuso a favore di <strong>, ma in questo caso è meglio usare <span> e CSS:
    Codice PHP:
    . "<span class=\"attributo-telecomando\">Data inserimento <span class="\data-inserimento\">" . $telecomando['data_inserimento'] . "</span></span>"
    Codice:
    attributo-telecomando {
        display: block;
    }
    
    data-inserimento {
        font-weight: bold;
    }
    Ultima cosa (la più importante)... ora debbo ordinare i dati a piacere...
    In linea di massima puoi usare usort.

    I suggerimenti che do più spesso:


  13. #73
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Puoi anche tenerlo, ma ora che hai il timestamp non serve più. A meno che tu non intenda usarlo in futuro come identificatore.
    Il timestamp non è completo. In una data posso inserire tre o più prodotti. Come fare per ordinarli? Il numero progressivo aiuta in questo, no?

    Usa strtotime e date per convertire la data nel file di testo in un timestamp e poi darle il formato che vuoi:
    Codice PHP:
    . "Data inserimento <b>" . date('d/m/Y', strtotime($telecomando['data_inserimento'])) . "</b>"
    In effetti mi da la data 01/01/1970 in tutti i casi, sono andato a guardare datetime.formats, mettendo la data in formato progressivo (yyyymmdd) non funziona, ho provato il formato europeo dd-mm-yy... e funziona, ma guardando meglio noto che in quella pagina dice
    Codice:
    $format = "d/m/Y H:i:s";
    Ma io non ho un orario... devo mettere mezzanotte per tutti o un valore arbitrario? Non basta il progressivo?
    Naturalmente questo solo per l'ordinamento per data....

    <p> rappresenta un paragrafo o capoverso, ha senso quasi esclusivamente all'interno di un lungo testo da leggere (per esempio un libro o una descrizione). Per campi diversi di un singolo prodotto probabilmente è più ragionevole uno <span> con una formattazione (CSS) adeguata.
    Il famoso display:block;

    <b> è in disuso a favore di <strong>, ma in questo caso è meglio usare <span> e CSS:
    Codice PHP:
    . "<span class=\"attributo-telecomando\">Data inserimento <span class="\data-inserimento\">" . $telecomando['data_inserimento'] . "</span></span>"
    Codice:
    attributo-telecomando {
        display: block;
    }
    
    data-inserimento {
        font-weight: bold;
    }
    Ho fatto un mix tra il date e strtotime e il css
    Codice PHP:
    . "numero dip " . $telecomando['dip']
    .
    "<br/><br/>"
    . "<span class=\"attributo-telecomando\">Data inserimento <span class="\data-inserimento\">"
    . date('d/m/Y', strtotime($telecomando['data_inserimento'])) . "</span></span>"
    . "<br/></div></div>";
    }
    }
    ?>
    E naturalmente non funziona
    Parse error: syntax error, unexpected '\' (T_NS_SEPARATOR), expecting ',' or ';' in /membri/veronacitysera/caravelli2/--pagina-prodotti.php on line 1206

    Corretta la posizione delle virgolette nello span data-inserimento
    Ma, a parte che non funziona, non posso usare uno span unico per tutti i risultati?
    Un
    <span class="\data-inserimento">"

    Codice:
    attributo-telecomando {
        display: block;
    }
    
    risultato {
        font-weight: bold;
    }
    Come mai tu fai sempre uno span per ogni risultato? E' importante?

    In linea di massima puoi usare usort.
    In linea di massima si, ma devo fare un sistema di select option per effettuare il tipo di sort...
    Ultima modifica di legaitalianalibera : 29-01-2019 alle ore 05.37.17

  14. #74
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Il timestamp non è completo. In una data posso inserire tre o più prodotti. Come fare per ordinarli? Il numero progressivo aiuta in questo, no?
    Giusto, mi ero lasciato ingannare dal fatto che lo stiamo chiamando timestamp mentre in realtà è una data.

    Ma io non ho un orario... devo mettere mezzanotte per tutti o un valore arbitrario? Non basta il progressivo?
    strtotime non è una scienza esatta alcuni formati li riconosce, altri no, anche in base alla versione PHP. Comunque non serve l'orario, se non lo metti PHP lo tratterà come se fosse la mezzanotte del giorno indicato.

    Ma, a parte che non funziona,
    Nel CSS che ti ho mostrato mancavano due punti:
    Codice:
    .attributo-telecomando {
        display: block;
    }
    
    .data-inserimento {
        font-weight: bold;
    }
    non posso usare uno span unico per tutti i risultati?
    Come mai tu fai sempre uno span per ogni risultato? E' importante?
    Lo <span> è un elemento in linea, cioè può contenere solo entità che stanno sulla stessa riga. Se vuoi i risultati in righe diversi devi usarne uno per ciascuno.

    I suggerimenti che do più spesso:


  15. #75
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio

    Nel CSS che ti ho mostrato mancavano due punti:
    Codice:
    .attributo-telecomando {
        display: block;
    }
    
    .data-inserimento {
        font-weight: bold;
    }

    Lo <span> è un elemento in linea, cioè può contenere solo entità che stanno sulla stessa riga. Se vuoi i risultati in righe diversi devi usarne uno per ciascuno.
    Giusto, non avevo notato i punti mancanti.
    Quello che intendevo è che non devo creare uno span per riga ma usare lo stesso per tutti.
    Ho rielaborato un po' la cosa mettendo lo stesso span a tutti

    Come Css ho usato
    Codice:
      <style type="text/css">
    h2.nome_telecomando {
        display: inline;
        font-weight: bold;
        font-family: Verdana;
        font-size: 12px;
    }
    .risultato-ricerca a img {
        display: block;
        margin: auto;
    }
    #risultati-ricerca {
        overflow: auto;
        width=100%
    }
    .risultato-ricerca {
        display: block;
        text-align: center;
        float: left;
        width: 25%;
    }
    .tabellasuperiore {
    	clear: both;
    	width: 100%;
        border: solid 1px #cccccc;
    	background: #F78731;
    }
    .attributo-telecomando {
        display: block;
        text-align: left;
        font-family: Tahoma;
        font-size: 12px;
    }
    </style>
    E come codice...

    Codice PHP:
    <?php
    // Recupera i dati (questo non è stato modificato)
    $items = file('database/telecomandi01.txt', FILE_IGNORE_NEW_LINES);
    $results = [];
    foreach (
    $items as $record) {
    $data = explode('|', $record);
    $results[] = [
    'marca' => $data[0],
    'modello' => $data[1],
    'link' => $data[2],
    'immagine' => $data[3],
    'numero_tasti' => $data[4],
    'colore_tasti' => $data[5],
    'frequenza' => $data[6],
    'codifica' => $data[7],
    'dip' => $data[8],
    'data_inserimento' => $data[9],
    'num_record' => $data[10]
    ];
    }

    // Raggruppa i dati per marca
    $grouped_results = [];
    foreach (
    $results as $result) {
    $grouped_results[$result['marca']][] = $result;
    }

    // Stampa i risultati: un "blocco" per ogni marca, ogni blocco contiene i telecomandi
    foreach ($grouped_results as $marca => $telecomandi) {
    // Stampa la marca
    echo "<div class=\"tabellasuperiore\">";
    echo
    "<hr><h2 class=\"nome_telecomando\">" . $marca . "</h2><br/></div>";

    // Stampa i telecomandi di quella marca (a titolo di esempio mostra solo marca e modello)
    foreach ($telecomandi as $telecomando) {
    echo
    "<div class=\"risultato-ricerca\"><div class=\"borgia\">";
    echo
    "<h2 class=\"nome_telecomando\">" . $telecomando['num_record'] . "</h2> - " . $telecomando['marca'] . " - " . $telecomando['modello'] . "<br/>";
    echo
    "<a href=\"" . $telecomando['link'] . "\">"
    . "<img src=\"" . $telecomando['immagine'] . "\" alt=\"" . $telecomando['marca'] . " " . $telecomando['modello'] . "\" title=\"" . $telecomando['marca'] . " " . $telecomando['modello'] . "\" width=\"150\">"
    . "<br/>"
    . "<h2 class=\"nome_telecomando\">" . $telecomando['marca'] . "</h2> - " . $telecomando['modello']
    .
    "</a>"

    . "<span class=\"attributo-telecomando\">numero tasti <h2 class=\"nome_telecomando\">" . $telecomando['numero_tasti'] . "</h2>"
    . "<span class=\"attributo-telecomando\">colore tasti <h2 class=\"nome_telecomando\">" . $telecomando['colore_tasti'] . "</h2>"
    . "<span class=\"attributo-telecomando\">frequenza <h2 class=\"nome_telecomando\">" . $telecomando['frequenza'] . "</h2>"
    . "<span class=\"attributo-telecomando\">tipo codifica <h2 class=\"nome_telecomando\">" . $telecomando['codifica'] . "</h2>"
    . "<span class=\"attributo-telecomando\">numero dip <h2 class=\"nome_telecomando\">" . $telecomando['dip'] . "</h2>"
    . "<span class=\"attributo-telecomando\">inserimento <h2 class=\"nome_telecomando\">"
    . date('d/m/Y', strtotime($telecomando['data_inserimento'])) . "</h2> </span></span>"
    . "</div></div>";
    }
    }
    ?>
    E fin qui ci siamo...
    Però, dovevo chiudere gli span ogni riga? Sembra che funzioni anche senza chiusura...

  16. #76
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Sì, vanno chiusi ad ogni riga anche se visivamente non si notano differenze.

    I suggerimenti che do più spesso:


  17. #77
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Sì, vanno chiusi ad ogni riga anche se visivamente non si notano differenze.
    Che spreco di byte... sembra che non li paghiamo... con i modem a 14.400 poi è un vero peccato inserire anche un solo carattere in più...

    Veniamo a usort, permette un solo tipo di ordinamento o si possono fare sort per chiavi multiple?
    Come lo uso? Devo creare un option select? E se si per gli ordinamenti multipli dovrei crearne parecchi...

  18. #78
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Che spreco di byte... sembra che non li paghiamo... con i modem a 14.400 poi è un vero peccato inserire anche un solo carattere in più...
    Beh è un punto di vista interessante...

    Veniamo a usort, permette un solo tipo di ordinamento o si possono fare sort per chiavi multiple?
    Come lo uso? Devo creare un option select? E se si per gli ordinamenti multipli dovrei crearne parecchi...
    Quando chiami usort in PHP devi passare il vettore da ordinare e una funzione che rappresenta il criterio in base a cui ordinare.
    Per esempio, mettiamo tu voglia ordinare per marca:
    Codice PHP:
    function confronta_marche($telecomando_a, $telecomando_b) {
    return
    strcmp($telecomando_a['marca'], $telecomando_b['marca']);
    }

    ...
    usort($telecomandi, 'confronta_marche');
    Occhio ad un paio di dettagli importanti: usort non crea una copia del vettore ordinato, ma modifica l'ordine di quello che gli passi; per passare una funzione in PHP come argomento usi il suo nome sotto forma di stringa, è una stranezza di PHP.

    Le funzioni che definisci devo restituire un valore minore di zero quando il primo argomento "viene prima" del secondo, maggiore di zero quando il primo "viene dopo" il secondo e 0 quando è indifferente.

    Una possibilità è preparare tante funzioni come confronta_marche, una per ciascun criterio su cui vuoi ordinare, quindi usare una select per dire al PHP quale criterio usare. Per esempio, supponiamo tu abbia un form con:
    Codice HTML:
    <select name="order_by">
        <option value="marca">marca</option>
        <option value="modello">modello</option>
        <option value="numero-tasti">numero tasti</option>
    </select>
    quindi nel PHP:
    Codice PHP:
    ...
    $order_by = $_GET['order_by'];
    $sort_function = "";
    if (
    $order_by == 'marca') {
    $sort_function = 'confronta_marche';
    }
    elsif ($order_by == 'modello') {
    $sort_function = 'confronta_modelli';
    }
    elsif ($order_by == 'numero-tasti') {
    $sort_function = 'confronta_numero_tasti';
    }
    ...
    usort($telecomandi, $sort_function);
    legaitalianalibera likes this.

    I suggerimenti che do più spesso:


  19. #79
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Beh è un punto di vista interessante...
    Se tutti risparmiassimo i bit alla fine verrebbe fuori qualche Tera risparmiato in qualche cloud, non sò se hai mai visto Silicon Valley, il serial sui nerd che inventano un nuovo meccanismo di compressione...


    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Quando chiami usort in PHP devi passare il vettore da ordinare e una funzione che rappresenta il criterio in base a cui ordinare.
    Per esempio, mettiamo tu voglia ordinare per marca:
    Codice PHP:
    function confronta_marche($telecomando_a, $telecomando_b) {
    return
    strcmp($telecomando_a['marca'], $telecomando_b['marca']);
    }

    ...
    usort($telecomandi, 'confronta_marche');
    Occhio ad un paio di dettagli importanti: usort non crea una copia del vettore ordinato, ma modifica l'ordine di quello che gli passi; per passare una funzione in PHP come argomento usi il suo nome sotto forma di stringa, è una stranezza di PHP.

    Le funzioni che definisci devo restituire un valore minore di zero quando il primo argomento "viene prima" del secondo, maggiore di zero quando il primo "viene dopo" il secondo e 0 quando è indifferente.
    Come principio ho capito, ma cosa fa il codice?
    crea 1000 nuovi vettori e se li memorizza prima di elaborarli? O continua a fare sort tra due vettori vicini fino a quando non ha ordinato tutto? In entrambi i casi mi sembra che la pagina diventa lenta e pesante...

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Una possibilità è preparare tante funzioni come confronta_marche, una per ciascun criterio su cui vuoi ordinare, quindi usare una select per dire al PHP quale criterio usare. Per esempio, supponiamo tu abbia un form con:
    Codice HTML:
    <select name="order_by">
        <option value="marca">marca</option>
        <option value="modello">modello</option>
        <option value="numero-tasti">numero tasti</option>
    </select>
    quindi nel PHP:
    Codice PHP:
    ...
    $order_by = $_GET['order_by'];
    $sort_function = "";
    if (
    $order_by == 'marca') {
    $sort_function = 'confronta_marche';
    }
    elsif ($order_by == 'modello') {
    $sort_function = 'confronta_modelli';
    }
    elsif ($order_by == 'numero-tasti') {
    $sort_function = 'confronta_numero_tasti';
    }
    ...
    usort($telecomandi, $sort_function);
    Ho provato questo codice (levando i puntini di sospensione), prima in testa alla visualizzazione attuale, poi di fianco in coda
    Nel primo caso mi viene fuori un
    Parse error: syntax error, unexpected '{' in /membri/veronacitysera/caravelli2/--pagina-prodotti.php on line 1216
    Nel secondo
    Parse error: syntax error, unexpected '{' in /membri/veronacitysera/caravelli2/--pagina-prodotti.php on line 1269
    Ora per logica il codice dovrebbe stare in testa ai risultati, l'option select magari non dovrebbe scrollare.
    Ma funzionerebbe? A naso direi di no, non ha ancora letto i dati del file e quindi cosa ordinerebbe?
    E ancora, se stesse in coda al codice precedente ricaricherebbe la pagina? Presumerei di si, non stiamo lavorando in Json, ma in php...

    Quindi la soluzione "colonna destra in cima" è la migliore.
    Ma dove sarebbe la parentesi graffa in più?
    Codice:
    <select name="order_by">
        <option value="marca">marca</option>
        <option value="modello">modello</option>
        <option value="numero-tasti">numero tasti</option>
    </select>
    <?php
    $order_by = $_GET['order_by'];
    $sort_function = "";
    if ($order_by == 'marca') {
        $sort_function = 'confronta_marche';
    }
    elsif ($order_by == 'modello') {
        $sort_function = 'confronta_modelli';
    }
    elsif ($order_by == 'numero-tasti') {
        $sort_function = 'confronta_numero_tasti';
    }
    usort($telecomandi, $sort_function); 
    ?>

  20. #80
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Se tutti risparmiassimo i bit alla fine verrebbe fuori qualche Tera risparmiato in qualche cloud, non sò se hai mai visto Silicon Valley, il serial sui nerd che inventano un nuovo meccanismo di compressione...
    Vero! Ma ormai "qualche tera" significa "un paio di dischi fissi da 40€", quindi non un risparmio significativo. Credo che il punto alla base di come sta diventando il web è che una singola immagine pesa comunque più del codice HTML di un centinaio di pagine messe assieme, dunque non c'è differenza apprezzabile tra scaricare una pagina web con un'immagine e un codice minimale e caricarne invece una con la stessa immagine ma ricca di tag. Questo anche grazie alla compressione: le pagine web non sono fornite così come sono, ma compresse, ed il browser le decomprime automaticamente prima di mostrarle (di solito).
    Compressione che comunque ha dei limiti, quelli del Primo teorema di Shannon. L'algoritmo di Silicon Valley non è realizzabile, resta una piacevole finzione cinematografica .

    Come principio ho capito, ma cosa fa il codice?
    crea 1000 nuovi vettori e se li memorizza prima di elaborarli? O continua a fare sort tra due vettori vicini fino a quando non ha ordinato tutto? In entrambi i casi mi sembra che la pagina diventa lenta e pesante...
    sort prende un vettore e lo ordina. L'ordine degli elementi è stabilito dalla funzione che gli passi come argomento. Internamente il tipo di ordinamento che esegue è un quicksort, quindi mediamente se hai 1000 elementi in un vettore esegue circa 10000 operazioni, il che richiede meno di 10ms. Se la pagina diventa lenta non è a causa dell'ordinamento.

    Ma dove sarebbe la parentesi graffa in più?
    Ho scritto elif anziché elseif .

    Ora per logica il codice dovrebbe stare in testa ai risultati, l'option select magari non dovrebbe scrollare.
    Ma funzionerebbe? A naso direi di no, non ha ancora letto i dati del file e quindi cosa ordinerebbe?
    E ancora, se stesse in coda al codice precedente ricaricherebbe la pagina? Presumerei di si, non stiamo lavorando in Json, ma in php...
    È passato un po' di tempo e non ricordo esattamente cosa stiamo facendo. Vediamo di fare il punto della situazione: hai bisogno di una pagina che mostri i telecomandi nel file di testo e dia la possibilità di ordinarli secondo diversi criteri.
    Per fare questo servono il codice per la lettura dei telecomandi, che già abbiamo, il codice per l'ordinamento ed il codice per permettere la scelta del criterio secondo cui ordinare.
    Complessivamente la pagina deve leggere i risultati, ordinarli se è stato richiesto un ordinamento, mostrarli, e mostrarle una select per permettere l'ordinamento.
    In caso di ordinamento, la stessa pagina viene ricaricata richiedendo un ordinamento tramite parametro GET.

    Come struttura generale direi:
    Codice PHP:
    // Legge i dati
    ...
    $telecomandi = ...

    // Ordina i risultati, se richiesto
    if (isset($_GET['order_by'])) {
    ...
    }

    // Mostra i dati
    foreach ($telecomandi as $telecomando) {
    ...
    }

    // Mostra la select per l'ordinamento
    echo "<form method=\"GET\">";
    echo
    "<select name=\"order-by\">";
    ...
    echo
    "</select>";
    echo
    "</form>";

    I suggerimenti che do più spesso:


  21. #81
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Vero! Ma ormai "qualche tera" significa "un paio di dischi fissi da 40€", quindi non un risparmio significativo. Credo che il punto alla base di come sta diventando il web è che una singola immagine pesa comunque più del codice HTML di un centinaio di pagine messe assieme, dunque non c'è differenza apprezzabile tra scaricare una pagina web con un'immagine e un codice minimale e caricarne invece una con la stessa immagine ma ricca di tag. Questo anche grazie alla compressione: le pagine web non sono fornite così come sono, ma compresse, ed il browser le decomprime automaticamente prima di mostrarle (di solito).
    Compressione che comunque ha dei limiti, quelli del Primo teorema di Shannon. L'algoritmo di Silicon Valley non è realizzabile, resta una piacevole finzione cinematografica .
    Si ho presente cosa fanno i siti di caching, usavo clodflare per un altro progetto...
    Silicon Valley è il top dell'umorismo informatico. Ci hanno infilato dentro tantissime situazioni paradossali e assurde che quando rivedo un episodio rido anche se conosco già cosa succederà.

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    sort prende un vettore e lo ordina. L'ordine degli elementi è stabilito dalla funzione che gli passi come argomento. Internamente il tipo di ordinamento che esegue è un quicksort, quindi mediamente se hai 1000 elementi in un vettore esegue circa 10000 operazioni, il che richiede meno di 10ms. Se la pagina diventa lenta non è a causa dell'ordinamento.
    Ok, la velocizzazione e il seo saranno MOOOLTO più in là... :D


    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Ho scritto elif anziché elseif .
    E io non l'ho notato...


    Citazione Originalmente inviato da mzanella Visualizza messaggio
    È passato un po' di tempo e non ricordo esattamente cosa stiamo facendo. Vediamo di fare il punto della situazione: hai bisogno di una pagina che mostri i telecomandi nel file di testo e dia la possibilità di ordinarli secondo diversi criteri.
    Per fare questo servono il codice per la lettura dei telecomandi, che già abbiamo, il codice per l'ordinamento ed il codice per permettere la scelta del criterio secondo cui ordinare.
    Complessivamente la pagina deve leggere i risultati, ordinarli se è stato richiesto un ordinamento, mostrarli, e mostrarle una select per permettere l'ordinamento.
    In caso di ordinamento, la stessa pagina viene ricaricata richiedendo un ordinamento tramite parametro GET.
    Si, però...

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Come struttura generale direi:
    Codice PHP:
    // Legge i dati
    ...
    $telecomandi = ...

    // Ordina i risultati, se richiesto
    if (isset($_GET['order_by'])) {
    ...
    }

    // Mostra i dati
    foreach ($telecomandi as $telecomando) {
    ...
    }

    // Mostra la select per l'ordinamento
    echo "<form method=\"GET\">";
    echo
    "<select name=\"order-by\">";
    ...
    echo
    "</select>";
    echo
    "</form>";
    Ecco, come potrai immaginare le persone se devono scrollare tutto per trovare il select si seccano (o pensano che non ci sia).
    C'è un modo di metterlo in testa?

  22. #82
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Ecco, come potrai immaginare le persone se devono scrollare tutto per trovare il select si seccano (o pensano che non ci sia).
    C'è un modo di metterlo in testa?
    Certo, basta spostare la parte che mostra la select prima di quella che mostra i risultati. La parte di lettura e di ordinamento può anche rimanere in cima, tanto non produce nulla nella pagina:
    Codice PHP:
    // Legge i dati
    ...
    $telecomandi = ...

    // Ordina i risultati, se richiesto
    if (isset($_GET['order_by'])) {
    ...
    }

    // Mostra la select per l'ordinamento
    echo "<form method=\"GET\">";
    echo
    "<select name=\"order-by\">";
    ...
    echo
    "</select>";
    echo
    "</form>";

    // Mostra i dati
    foreach ($telecomandi as $telecomando) {
    ...
    }

    I suggerimenti che do più spesso:


  23. #83
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Certo, basta spostare la parte che mostra la select prima di quella che mostra i risultati. La parte di lettura e di ordinamento può anche rimanere in cima, tanto non produce nulla nella pagina:
    Codice PHP:
    // Legge i dati
    ...
    $telecomandi = ...

    // Ordina i risultati, se richiesto
    if (isset($_GET['order_by'])) {
    ...
    }

    // Mostra la select per l'ordinamento
    echo "<form method=\"GET\">";
    echo
    "<select name=\"order-by\">";
    ...
    echo
    "</select>";
    echo
    "</form>";

    // Mostra i dati
    foreach ($telecomandi as $telecomando) {
    ...
    }
    Hummm, tenuto conto che al momento il sort è così
    Codice:
    <select name="order_by">
        <option value="marca">marca</option>
        <option value="modello">modello</option>
        <option value="numero-tasti">numero tasti</option>
    </select>
    <?php
    $order_by = $_GET['order_by'];
    $sort_function = "";
    if ($order_by == 'marca') {
        $sort_function = 'confronta_marche';
    }
    elseif ($order_by == 'modello') {
        $sort_function = 'confronta_modelli';
    }
    elseif ($order_by == 'numero-tasti') {
        $sort_function = 'confronta_numero_tasti';
    }
    usort($telecomandi, $sort_function); 
    ?>
    Io ho tre blocchi
    Codice:
    <?php   
    // Recupera i dati (questo non è stato modificato)  
    $items = file('database/telecomandi01.txt', FILE_IGNORE_NEW_LINES);  
    $results = [];  
    foreach ($items as $record) {  
    [...]
        ];  
    }  
    
    // Raggruppa i dati per marca  
    $grouped_results = [];  
    foreach ($results as $result) {  
        $grouped_results[$result['marca']][] = $result;  
    }  
    
    // Stampa i risultati: un "blocco" per ogni marca, ogni blocco contiene i telecomandi  
    foreach ($grouped_results as $marca => $telecomandi) {  
    [...]
    } 
    ?>
    Il sort dovrebbe esser posto dopo i raggruppamento per marca? A dire il vero ho provato a metterlo sia prima che dopo ma non fa nulla...
    Cioè, appare il select, ma non funziona. Come al solito qualcosa sfugge... l'ho riparcheggiato in attesa di aiuto...
    Alle volte penso si come una coperta corta, tiri da una parte e scopri che i piedi sono fuori... ora mi da un errore nella visualizzazione del motore di ricerca in home page. L'ultima volta che avevo avuto un errore simile avevo un percorso sbagliato nel file di database/telecomandi01.txt. Ho controllato e riuppato sia motore-ricerca01.php che database/telecomandi01.txt ... ma l'errore persiste: non trova i dati...
    Devo dire che ho aggiunto un paio di marche nell'option select, ma a parte questo non ricordo modifiche da quando funzionava...

  24. #84
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Bisogna definire le funzioni confronta_marche, confronta_modelli, ecc prima di poterle usare.

    Il sort dovrebbe esser posto dopo i raggruppamento per marca?
    Va messo prima: prima stabilisci l'ordinamento, poi raggruppi.

    Alle volte penso si come una coperta corta, tiri da una parte e scopri che i piedi sono fuori...
    Sì, è esattamente così!

    I suggerimenti che do più spesso:


  25. #85
    legaitalianalibera non è connesso Utente AlterBlog
    Data registrazione
    30-08-2017
    Messaggi
    48

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Bisogna definire le funzioni confronta_marche, confronta_modelli, ecc prima di poterle usare.


    Va messo prima: prima stabilisci l'ordinamento, poi raggruppi.
    Ci torno dopo, ho impiegato 2 giorni e decine di prove per capire COSA non facesse più andare il motore di ricerca in Home page

    (parlando del codice che non funzionava più)
    Alle volte penso sia come una coperta corta, tiri da una parte e scopri che i piedi sono fuori...
    Sì, è esattamente così!
    Il problema è che se aggiungo altri campi al database (ho aggiunto la data e il numero di record) devo definirli per la lettura anche nel motore di ricerca, altrimenti dopo aver letto i primi 8 elementi il motore-ricerca01.php non passa alla riga successiva me continua a leggere i dati in sequenza (almeno credo) anche perchè con il controllo del Json che mi avevi suggerito tu http://veronacitysera.altervista.org...hp?marca=ELVOX mi diceva che c'era un errore.
    Ho ampliato il motore-ricerca01.php in
    Codice:
    <?php
    $marca = isset($_GET['marca']) && !empty($_GET['marca']) ? strtolower($_GET['marca']) : 'any';
    $numero_tasti = isset($_GET['numero_tasti']) && !empty($_GET['numero_tasti']) ? strtolower($_GET['numero_tasti']) : 'any';
    $colore_tasti = isset($_GET['colore_tasti']) && !empty($_GET['colore_tasti']) ? strtolower($_GET['colore_tasti']) : 'any';
    $freq_telec = isset($_GET['freq_telec']) && !empty($_GET['freq_telec']) ? strtolower($_GET['freq_telec']) : 'any';
    $codif_telec = isset($_GET['codif_telec']) && !empty($_GET['codif_telec']) ? strtolower($_GET['codif_telec']) : 'any';
    $dip_telec = isset($_GET['dip_telec']) && !empty($_GET['dip_telec']) ? strtolower($_GET['dip_telec']) : 'any';
    $data_inserimento = isset($_GET['data_inserimento']) && !empty($_GET['data_inserimento']) ? strtolower($_GET['data_inserimento']) : 'any';
    $num_record = isset($_GET['num_record']) && !empty($_GET['num_record']) ? strtolower($_GET['num_record']) : 'any';
    
    $items = file('database/telecomandi01.txt', FILE_IGNORE_NEW_LINES);  
    $results = [];  
    foreach ($items as $record) {  
        $data = explode('|', $record);  
        if (($marca === 'any' || strtolower($data[0]) == $marca)
         && ($numero_tasti === 'any' || strtolower($data[4]) == $numero_tasti)
         && ($colore_tasti === 'any' || strtolower($data[5]) == $colore_tasti)
         && ($freq_telec === 'any' || strtolower($data[6]) == $freq_telec)
         && ($codif_telec === 'any' || strtolower($data[7]) == $codif_telec)
         && ($dip_telec === 'any' || strtolower($data[8]) == $dip_telec)
         && ($data_inserimento === 'any' || strtolower($data[9]) == $data_inserimento)
         && ($num_record === 'any' || strtolower($data[10]) == $num_record)
        ) {  
            $results[] = [  
                'marca' => $data[0],  
                'modello' => $data[1],  
                'link' => $data[2],  
                'immagine' => $data[3],  
                'numero_tasti' => $data[4], 
                'colore_tasti' => $data[5],   
                'freq_telec' => $data[6], 
                'codif_telec' => $data[7], 
                'dip_telec' => $data[8], 
                'data_inserimento' => $data[9],
                'num_record' => $data[10]
            ];  
        }  
    }  
    
    header('Content-Type: application/json');  
    echo json_encode($results);  
    ?>
    Aggiungendo ovunque data_inserimento e num_record
    Ora non mi mostra più 200 schede vuote di telecomandi con in più un undefinited in tutte...

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Bisogna definire le funzioni confronta_marche, confronta_modelli, ecc prima di poterle usare.


    Va messo prima: prima stabilisci l'ordinamento, poi raggruppi.
    Forse è l'ora, ma mi sono perso per strada...
    Qualche esempio?

  26. #86
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Il problema è che se aggiungo altri campi al database (ho aggiunto la data e il numero di record) devo definirli per la lettura anche nel motore di ricerca, altrimenti dopo aver letto i primi 8 elementi il motore-ricerca01.php non passa alla riga successiva me continua a leggere i dati in sequenza (almeno credo) anche perchè con il controllo del Json che mi avevi suggerito tu http://veronacitysera.altervista.org...hp?marca=ELVOX mi diceva che c'era un errore.
    Certo: come dicevamo qualche tempo fa, lo svantaggio di questo approccio è che ogni modifica al codice (o alla base di dati) andrà replicata sia nel motore di ricerca che nella pagina a cui stai lavorando.

    Forse è l'ora, ma mi sono perso per strada...
    Qualche esempio?
    Codice PHP:
    function confronta_marche($telecomando_a, $telecomando_b) {
    return
    strcmp($telecomando_a['marca'], $telecomando_b['marca'];
    }

    function
    confronta_modelli($telecomando_a, $telecomando_b) {
    return
    strcmp($telecomando_a['modello'], $telecomando_b['modello'];
    }

    function
    confronta_num_tasti($telecomando_a, $telecomando_b) {
    return
    $telecomando_a['numero_tasti'] - $telecomando_b['numero_tasti'];
    }
    legaitalianalibera likes this.

    I suggerimenti che do più spesso:


Pagina 3 di 3 PrimoPrimo 123

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •