WebSite X5Help Center

 
Alessandro R.
Alessandro R.
User

Refresh pagine  it

Auteur : Alessandro R.
Visité 178, Followers 2, Partagé 0  

Vorrei riprendere una vecchia discussione affrontata più volte nel tempo, che però non ha dato i risultati sperati tramite la funzione di ricerca (ho inserito il termine "refresh pagina").

Ho due codici: uno per il refresh all'inizio di ogni sessione e un altro per ricordare i prodotti eventualmente inseriti nel carrello in caso di ordine non concluso.

Condivido questi codici per due motivi. Primo, per sapere se secondo voi ci sono errori. Secondo, per aiutare altri utenti con le stesse problematiche.

Sarebbe utile implementare queste funzioni di default all'interno del software Incomedia, perché quando modifico i prezzi dei prodotti sul mio eshop, spesso i clienti ordinano ai vecchi prezzi. Questo accade perché alcuni, o molti, non puliscono automaticamente o manualmente i file del browser.

refresh:

<script>
// Refresh alla prima visita di ogni sessione
document.addEventListener("DOMContentLoaded", function() {
if (!sessionStorage.getItem('sessionStarted')) {
location.reload(true);
sessionStorage.setItem('sessionStarted', 'true');
}
});
</script>

-------------------

Ricordare i prodotti del carrello:

<script>
// Funzioni di gestione del carrello
function saveCart(cart) {
localStorage.setItem('cart', JSON.stringify(cart));
}

function getCart() {
return JSON.parse(localStorage.getItem('cart')) || [];
}

function addToCart(product) {
let cart = getCart();
cart.push(product);
saveCart(cart);
}
</script>

ciao

Posté le
8 RéPONSES - 1 UTILES
Giuseppe Guida
Giuseppe Guida
User

Sì Alessandro, concordo con te: la memoria cache del browser crea molto spesso problemi con le pagine online e già visitate dagli utenti, ho ricontrato anche io problemi simili con utenti che assolutamente non sapevano nulla  dell'esistenza della cache del browser e del fatto che bisognrebbe "refreshare" manualmente le pagine.

Ciao

Lire plus
Posté le de Giuseppe Guida
Incomedia
Eric C.
Incomedia

Buongiorno Alessandro,
grazie del feedback, ho riportato i tuoi codici come esempio.

Lire plus
Posté le de Eric C.
Roberto M.
Roberto M.
User

Ciao. Per quanto riguarda il refresh secondo me.....ma posso sbagliarmi.....Il codice ha un problema logico: il refresh avviene con un loop infinito perché il "sessionStorage" viene impostato dopo aver ricaricato la pagina. Quindi, al refresh, lo script viene rieseguito senza che il valore sia stato memorizzato.

<script>
// Refresh alla prima visita di ogni sessione
document.addEventListener("DOMContentLoaded", function() {
if (!sessionStorage.getItem('sessionStarted')) {
location.reload(true);
sessionStorage.setItem('sessionStarted', 'true');
}
});
</script>

▲...Funziona solo una volta per sessione,non risolve il problema della cache perché la ricarica può comunque caricare la vecchia versione della pagina inoltre non controlla le modifiche nel sito quindi non garantisce che le nuove versioni vengano subito viste.

Se fossi io ad utilzzarlo lo cambierei in:

<script>
(function checkForUpdates() {
fetch(window.location.href, { cache: "no-store" })
.then(response => response.text())
.then(newContent => {
if (document.documentElement.innerHTML !== newContent) {
console.log("Aggiornamento rilevato! Ricarico la pagina...");
window.location.reload();
}
})
.catch(err => console.error("Errore nel controllo aggiornamenti:", err));

setTimeout(checkForUpdates, 5000); // Controlla ogni 5 secondi
})();
</script>

In questa maniera la funzione controlla se il sito è cambiato e solo allora ricarica la pagina.

Quanto sopra avverrebbe in una sequenza del tutto automatizzata ma se uno volesse pilotarla si potrebbe mettere un pulsante "AGGIORNA LA PAGINA" con il codice seguente del tutto personalizzabile inserito in un oggetto HTML

<input type="button" value="Aggiorna la pagina ▼" onclick="forceReload();" class="custom-button" />

<script>
function forceReload() {
window.location.href = window.location.pathname + "?v=" + new Date().getTime();
}
</script>

<style>
.custom-button {
width: 250px;
height: 25px;
background-color: initial;
border: 1px solid #000;
cursor: pointer;
background-color: #bf9000 !important;
}

.custom-button:hover {
background-color: #E7BF21 !important; /* marrone */
}
</style>

Il pulsante usa un timestamp nella URL per forzare il browser a scaricare la versione più recente.

Se poi volessimo abbondare ed evitare che anche i file CSS e JS richiamati sulla pagina ivi compresi i png non causino problemi di cache possiamo aggiungere a tutto il codice:

<linkrel="stylesheet"href="style.css?v=<?= time(); ?>">

<scriptsrc="script.js?v=<?= time(); ?>"></script>

<imgsrc="TUO LOGO.png?v=<?= time(); ?>" />

In quest'ultimo caso Il browser caricherà sempre la versione più aggiornata dei file. Questa tecnica funziona solo per i file CSS ,JS e png che vengono esplicitamente referenziati in HTML.

<?= time(); ?> in PHP restituisce un numero unico basato sull'orario corrente. Il browser vede una URL diversa ad ogni caricamento (es. style.css?v=1700001234), quindi forza il download della versione aggiornata invece di usare la cache.

Per quanto riguarda invece il codice riguardante il carrello prodotti per quello che è chiamato a fare è praticamente OK anche se per me è migliorabilie dal punto di vista dei prodotti che si presenteranno eventualmente duplicati.

Lire plus
Posté le de Roberto M.
Alessandro R.
Alessandro R.
User
Auteur

x Giuseppe,

Mi scuso per il ritardo nella risposta.

Hai perfettamente ragione, il problema è reale. Un vecchio visitatore potrebbe non accorgersi degli aggiornamenti delle pagine, soprattutto in questo periodo di inizio anno in cui ci sono cambiamenti di prezzi. Se un cliente ordina utilizzando i vecchi prezzi, potrebbe ricevere una fattura errata. Spiegargli che deve rifare l'ordine e che il precedente non è valido può risultare complicato e rischia di far sembrare la nostra azienda poco seria.

Spero che questa versione sia più chiara ed efficace! Se hai bisogno di ulteriori miglioramenti o altre modifiche, fammelo sapere.

Lire plus
Posté le de Alessandro R.
Alessandro R.
Alessandro R.
User
Auteur

x Roberto, credo che hai ragione sul discorso del loop infinito, come vedi questo codice? 

<script>
(function checkForUpdates() {
fetch(window.location.href, { cache: "no-store" })
.then(response => response.text())
.then(newContent => {
if (document.documentElement.innerHTML !== newContent) {
console.log("Aggiornamento rilevato! Ricarico la pagina...");
window.location.reload();
}
})
.catch(err => console.error("Errore nel controllo aggiornamenti:", err));

setTimeout(checkForUpdates, 5000); // Controlla ogni 5 secondi
})();
</script>

Lire plus
Posté le de Alessandro R.
Alessandro R.
Alessandro R.
User
Auteur

Roberto, t invio anche il codice del carrello modificato...

una versione migliorata che si assicura di evitare duplicati solo quando il browser viene riaperto, ma permette di aggiungere ulteriori pezzi del prodotto in fase di ordine:

javascript<script> // Funzioni di gestione del carrellofunctionsaveCart(cart) { localStorage.setItem('cart', JSON.stringify(cart)); } functiongetCart() { returnJSON.parse(localStorage.getItem('cart')) || []; } functionaddToCart(product) { letcart = getCart(); letproductIndex = cart.findIndex(item =>item.id=== product.id); if(productIndex !== -1) { cart[productIndex].quantity+= product.quantity; // Incrementa la quantità del prodotto già presente} else{ cart.push(product); // Aggiungi il nuovo prodotto} saveCart(cart); } document.addEventListener("DOMContentLoaded", function() { letcart = getCart(); saveCart(cart); // Salva nuovamente il carrello per evitare duplicati}); </script>

In questo codice:

  1. Quando si aggiunge un prodotto al carrello (addToCart), viene controllato se il prodotto è già presente. Se lo è, viene incrementata solo la quantità del prodotto presente nel carrello.

  2. Quando la pagina viene caricata (DOMContentLoaded), il carrello viene recuperato e salvato nuovamente. Questo evita che il carrello venga duplicato ogni volta che il browser viene riaperto.

Con questo approccio, il cliente potrà aggiungere ulteriori pezzi dello stesso prodotto durante la navigazione, ma non vedrà duplicati ogni volta che riapre il browser.

...come potrai intuire il codice non é mio :) ...ho richiesto l aiutino AI... volevo capire se tu avevi riscontrato dei duplicati alla riapertura del browser...

in ogni caso grazie del tuo interessamento perché stai aiutando anche tutta la community

Lire plus
Posté le de Alessandro R.
Alessandro R.
Alessandro R.
User
Auteur

Ciao Eric,

Grazie per aver riportato i codici.

In passato, molti codici creati da KolAsim, fondamentali per la gestione dell'eshop, sono stati ignorati. Mi dispiace dirlo, ma quando si ha il "piatto pronto" o quasi pronto, l'implementazione non dovrebbe costare molto. Questo approccio delude profondamente, poiché non risponde alle esigenze cruciali degli utenti.

Apprezzo il tuo lavoro e ti ringrazio, ma dobbiamo fare di più. Se l'icona della lampadina delle idee non funziona o viene poco considerata dal team di sviluppo, potrebbe essere utile creare un'altra icona nel forum, come un'icona computer, che rappresenti modifiche importanti e urgenti da implementare subito. In questo modo, si darebbe maggiore risalto alle idee fondamentali per il funzionamento di x5.

Naturalmente, deve cambiare anche la visione di chi valuta queste idee. Senza un cambiamento da parte vostra, possiamo avere tutte le icone che vogliamo nel forum, ma i risultati rimarranno invariati.

Questo post non vuole alimentare discussioni con altri utenti che, spesso a ragione, si lamentano dei mancati sviluppi. Il mio intento è stimolare una migliore considerazione delle proposte degli utenti, che continuano ad avere problemi reali nell'utilizzo di x5 nel 2025.

P.S.: Come molti altri, desidero vedere un prodotto migliore, più moderno, che sia competitivo con quelli della concorrenza. Nessuno pretende miracoli da un programma come x5, considerando la fascia di prezzo, ma qualche miglioramento nelle prestazioni che non richieda investimenti significativi da parte di Incomedia potrebbe essere fattibile.

Quando avete i codici tra le mani, per favore implementateli. E certe idee semplici, createle voi anticipatamente, non aspettate che gli utenti si trovino in difficoltà e debbano trovare soluzioni extra.

Nel mio caso, non avrei voluto perdere tempo a scrivere questi commenti, ma dopo 14 anni mi trovo ancora di fronte alle stesse richieste che raramente vengono ascoltate. E non si tratta di richieste utili a pochi utenti, ma di richieste che sarebbero utili praticamente a tutti.

Lire plus
Posté le de Alessandro R.
Alessandro R.
Alessandro R.
User
Auteur

x Giuseppe...Ai, migliora anche i commenti nel forum...e ti lascia anche la firma (se uno si dimentica di cancellarla...) :) :) :) 

scrivere in modo chiaro senza errori é utile a tutti :)

Lire plus
Posté le de Alessandro R.