Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2020
    Messaggi
    46

    caricamento impostazioni

    salve a tutti...
    stò sviluppando un applicazione web in htlm/javascript per interagire con un database mysql, lato server utilizzo php.
    Adesso ho la necessità di creare una pagina 'configurazione' per salvare alcune impostazioni di vario, ad esempio: per ogni tabella quali colonne voglio mostrare, oppure il colore di sfondo pagina!!
    Pensavo di salvare su un file magari xml sul server o nel database stesso su una tabella dedicata, anche per questa scelta accetto consigli ma il mio primo ostacolo è come caricare queste impostazioni solo alla prima apertura della pagina web e non ad esempio ad ogni refresh o ritorno alla pagina principale??
    graziee

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    Ciao
    Se non serve dare la possibilit� di condividere tramite server le configurazioni tra diversi client dello stesso utente, allora ti consiglio di salvare i dati in local storage. In questo modo ogni client ha la sua configurazione. Pensa ad esempio configurazioni diverse per mobile o per pc ecc.
    In ogni caso questo sistema ti consente comunque, nel caso sia necessario, di aggiornare le info del local storage con versioni provenienti dal server o addirittura aggiungere anche la possibilit� di caricarla sul client da file. Quindi volendo si potrebbero creare diversi file e scegliere quale � dove utilizzarlo.
    questo dovrebbe rispondere anche a quando caricarlo.
    Se devi salvare informazioni sul server io preferirei il database, visto che esiste già ed è il suo lavoro, poi se vuoi scambiare file di configurazioni tra client, farei tutto lato client, li crei e li carichi nel client.
    Oppure puoi aggiornarle quando carichi la pagina tramite numero di versione, controlli tramite javascript che versione hai nello storage e quando esiste una nuova versione sul server la carichi tramite ajax. In questo modo la ricarichi solo quando deve cambiare.
    ovviamente dovrai prevedere anche il salvataggio quando l’utente le cambia, che sia sul server o solo nel client.

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    .

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2020
    Messaggi
    46
    Quote Originariamente inviata da U235 Visualizza il messaggio
    Ciao
    Se non serve dare la possibilit� di condividere tramite server le configurazioni tra diversi client dello stesso utente, allora ti consiglio di salvare i dati in local storage. In questo modo ogni client ha la sua configurazione. Pensa ad esempio configurazioni diverse per mobile o per pc ecc.
    In ogni caso questo sistema ti consente comunque, nel caso sia necessario, di aggiornare le info del local storage con versioni provenienti dal server o addirittura aggiungere anche la possibilit� di caricarla sul client da file. Quindi volendo si potrebbero creare diversi file e scegliere quale � dove utilizzarlo.
    questo dovrebbe rispondere anche a quando caricarlo.
    Se devi salvare informazioni sul server io preferirei il database, visto che esiste già ed è il suo lavoro, poi se vuoi scambiare file di configurazioni tra client, farei tutto lato client, li crei e li carichi nel client.
    Oppure puoi aggiornarle quando carichi la pagina tramite numero di versione, controlli tramite javascript che versione hai nello storage e quando esiste una nuova versione sul server la carichi tramite ajax. In questo modo la ricarichi solo quando deve cambiare.
    ovviamente dovrai prevedere anche il salvataggio quando l’utente le cambia, che sia sul server o solo nel client.
    ciao U235..grazie per l'interessamento!
    La possibilità di salvare configurazioni in locale per ogni client è una gran cosa a cui non avevo pensato ma può essere molto utile!

    Considerando solo le impostazioni comuni per tutti i client e poniamo di salvarle sul database, come faccio a leggerle una sola volta ad esempio a inizio sessione?

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2020
    Messaggi
    46
    Quote Originariamente inviata da U235 Visualizza il messaggio
    Ciao
    Se non serve dare la possibilit� di condividere tramite server le configurazioni tra diversi client dello stesso utente, allora ti consiglio di salvare i dati in local storage. In questo modo ogni client ha la sua configurazione. Pensa ad esempio configurazioni diverse per mobile o per pc ecc.
    In ogni caso questo sistema ti consente comunque, nel caso sia necessario, di aggiornare le info del local storage con versioni provenienti dal server o addirittura aggiungere anche la possibilit� di caricarla sul client da file. Quindi volendo si potrebbero creare diversi file e scegliere quale � dove utilizzarlo.
    questo dovrebbe rispondere anche a quando caricarlo.
    Se devi salvare informazioni sul server io preferirei il database, visto che esiste già ed è il suo lavoro, poi se vuoi scambiare file di configurazioni tra client, farei tutto lato client, li crei e li carichi nel client.
    Oppure puoi aggiornarle quando carichi la pagina tramite numero di versione, controlli tramite javascript che versione hai nello storage e quando esiste una nuova versione sul server la carichi tramite ajax. In questo modo la ricarichi solo quando deve cambiare.
    ovviamente dovrai prevedere anche il salvataggio quando l’utente le cambia, che sia sul server o solo nel client.

    Rileggendo più volte la tua risposta, ho capito che forse devo strutturare diversamente la mia applicazione!
    Attualmente utilizzando l'applicazione ritorno sempre alla pagina principale che con onload mi carica le impostazioni, dovrei semplicemente utilizzare la pagina index come login e per caricare le impostazioni senza più tornarci??

    E' strutturato correttamente in questo modo??

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    Quote Originariamente inviata da toreg Visualizza il messaggio
    Rileggendo pi� volte la tua risposta, ho capito che forse devo strutturare diversamente la mia applicazione!
    Attualmente utilizzando l'applicazione ritorno sempre alla pagina principale che con onload mi carica le impostazioni, dovrei semplicemente utilizzare la pagina index come login e per caricare le impostazioni senza pi� tornarci??

    E' strutturato correttamente in questo modo??
    ciao
    difficile dare un giudizio al lavoro degli altri, a meno che non sia proprio sbagliato...
    Il punto � che il client potrebbe entrare in qualsiasi punto della tua applicazione, per cui normalmente dovresti prevedere il caricamento in ogni pagina in cui previdi di usare il sistema. Ma si pu� "risparmiare" dati in transito minimizzandoli, quindi al posto di inviare sempre la configurazione completa conviene salvare le configurazioni nel client e dal server inviare sempre un numero di versione, in modo che quando il client valuti che la sua versione � minore vada a fare una chiamata ajax per reperire la nuova versione (quindi la carica solo in questo momento). A questo punto seppure mandi al client la versione in tutte le pagine non fai transitare i dati della configurazione. Diversamente ogni volta dovrai inviare i dati di configurazione. Ma come ti dicevo prima alla fine non � che sia questo grande dispendio di dati... in genere le configurazioni sono pochi dati. Ecco perch� non posso permettermi di dare giudizi, alla fine non � molto differente per le prestazioni.

    Alla fine salvare nel client � pi� facile a farsi che a dirsi, chiaramente dipende molto dalla tua preparazione.
    In ogni caso ti posso fare un piccolo esempio di come farei io (ti mostro solo la parte client, lato server non c'� molto da mostrare):

    codice:
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Custom Configuration</title>
        <style>
            body {
                background-color: powderblue;
            }
            .myContent {
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <div class="myContent">
            <h1 id="el_h1"></h1>
            <select id="options">
                <option>Ciao</option>
                <option>Ola</option>
                <option>Hi</option>
            </select>
            <button onclick="editConfiguration()">Modifica configurazione</button>
            <button onclick="downloadFile()">Scarica configurazione</button>
            <button><label for="inputfile">Carica configurazione</label></button>
            <button onclick="localStorage.clear(); loadConfiguration();">Reset configurazione</button>
            <input id="inputfile" style="visibility:hidden;" type="file">
        </div>
        <script>
            const fileName = "Settings.txt", serverVersion = 1;//imposti da PHP
            var settings, file = document.getElementById('inputfile'), options = document.getElementById("options");
            loadConfiguration();
            if (serverVersion > settings.Version)//emula la chiamata al server se la versione locale � minore (edita la versione per non farlo ricaricare)
                if (confirm("� presente una versione maggione sul server, si desidera aggiornare?")) editConfiguration();
            file.addEventListener('change', () => {
                var fr = new FileReader();
                fr.onloadend = function () {
                    localStorage.setItem(fileName, this.result);
                    loadConfiguration();
                }
                fr.readAsText(file.files[0]);
            });
            options.addEventListener("change", () => {
                settings.optionSelected = options.selectedIndex;
                localStorage.setItem(fileName, JSON.stringify(settings));
                loadConfiguration();
            })
            function editConfiguration() {
                localStorage.setItem(fileName, prompt("Inserire configurazione", localStorage.getItem(fileName)));
                loadConfiguration();
            }
            function loadConfiguration() {
                settings = JSON.parse(localStorage.getItem(fileName));
                if (!settings) {
                    alert("no local data");
                    localStorage.setItem(fileName, '{"Version":0, "optionSelected":0, "css":"' + document.getElementsByTagName('style')[0].innerHTML.replace(/(?:\r\n|\r|\n)/g, '') + '"}');
                    settings = JSON.parse(localStorage.getItem(fileName));
                }
                var head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style');
                head.appendChild(style);
                style.type = 'text/css';
                style.appendChild(document.createTextNode(settings.css));
                document.getElementById("options").selectedIndex = settings.optionSelected;
                document.getElementById("el_h1").innerText = "Versione " + settings.Version;
            }
            function downloadFile() {
                var element = document.createElement('a');
                element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(localStorage.getItem(fileName)));
                element.setAttribute('download', fileName);
                element.style.display = 'none';
                document.body.appendChild(element);
                element.click();
                document.body.removeChild(element);
            }
        </script>
    </body>
    </html>
    puoi vederlo in funzione qui
    In questo caso potresti impostare tramite PHP il numero di versione (riga 1 dello script js) che l'utente ha salvato nel database, magari indicando per quali device va bene e per quali no, quindi magari il numero di versione non basta e dovrai strutturare un p� di pi�. Ovviamente questa � solo una bozza, quindi ho messo giusto un numero e una condizione. In questo caso il file di default viene creato con versione 0, quindi appena carichi la pagina ti apre un messaggio che ti chiede se vuoi caricare la nuova versione, rispondendo si, si apre un prompt che dovrebbe simulare una chiamata ajax (la stringa che editi sarebbe quella che arriva dalla chiamata ajax al server), a questo punto si presume che il numero di versione sia maggiore di quello impostato dal server, ma ovviamente dovrai modificarlo a mano nel testo del prompt. A questo punto non dovrebbe pi� aprire il prompt (ergo fare la chiamata ajax) fin tanto che il server non imposta la versione ad un numero maggiore di quello della configurazione che hai salvato.
    Puoi anche salvare e caricare i file direttamente dal client, in questo modo potresti semplicemente condividere le configurazioni con i device che preferisci ed avere tutte le versioni che vuoi cambiandole quando e come vuoi.

    Ricapitolando, l'esempio funziona cos�:
    Se si tratta del primo avvio, lo script legge il css della pagina e lo mette nella proprieta css del file nello storage locale (da ora sarà quello che si carica sempre che puoi modificare); mette la versione a 0; e l'indice della preferenza nell'elenco a discesa con indice 0. Confrontando la versione passata dal server nota che � maggiore quella del server, quindi apre il prompt (emula la chiamata ajax) dove puoi editare a mano la configurazione (che � scritta come json), dovrai editare la versione (da 0 a maggiore o uguale a 1) se no continuer� a chiedertelo ad ogni caaricamento.
    Fatto questo il resto viene da se: se cambi scelta nel menu a discesa lo salva nella configurazione e quindi te lo ritrovi, se clicchi su modifica si aprir� il prompt e potrai editare la configurazione che verr� salvata automaticamente. Inoltre potrai scaricare il file con la configurazione attuale e potrai caricarla ad esempio dopo aver fatto modifiche. Infine puoi resettare il tutto e cancellare tutti i dati nel local storage.

    Nel caso abbia dificolt� a capire qualche parte non avere timore di chiedere. Comunque non dovrebbe essere complesso.

  7. #7
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    . (solito problema di visualizzazione ultimo post)

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2020
    Messaggi
    46
    Quote Originariamente inviata da U235 Visualizza il messaggio
    . (solito problema di visualizzazione ultimo post)
    ciao U235..
    intanto ti volevo ringraziare visto che non ti ho più risposto!

    Localstorage non lo conoscevo e piano piano stò comprendendo il tuo codice imparando anche cose nuove.

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2022
    residenza
    Las Condes, Chile
    Messaggi
    1
    Gracias, esta información fue útil para el desarrollo general en esta área.
    Ultima modifica di santa_napolitan; 23-08-2022 a 13:19

  10. #10
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    Quote Originariamente inviata da toreg Visualizza il messaggio
    ciao U235..
    intanto ti volevo ringraziare visto che non ti ho più risposto!

    Localstorage non lo conoscevo e piano piano stò comprendendo il tuo codice imparando anche cose nuove.
    Ciao,
    non avevo letto il tuo post.
    Mi fa piacere
    Se hai bisogno di qualche chiarimento chiedi pure.

    Buon lavoro.

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.