Refresh pagine 
Автор: Alessandro R.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
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
Buongiorno Alessandro,
grazie del feedback, ho riportato i tuoi codici come esempio.
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.
Автор
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.
Автор
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>
Автор
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:
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.
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
Автор
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.
Автор
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 :)
Il codice è valido ma sempre secondo me è migliorabile e ti spiego il perchè:
Il codice postato confronta l'intero HTML della pagina e potrebbe non essere affidabile. Gli script, gli elementi dinamici e i contenuti generati da JavaScript possono cambiare, causando falsi positivi quindi sarebbe meglio confrontare solo una parte chiave della pagina, ad esempio un div contenente il contenuto principale.
Inoltre ogni 5 secondi l'intera pagina viene scaricata di nuovo, il che potrebbe risultare pesante per il server. Al riguardo si potrebbe creare un endpoint API lato server che restituisca solo un hash della versione attuale della pagina (come un timestamp dell'ultima modifica) e di cui ne avevo parlato già nel mio precedente post. Infatti se il server risultasse temporaneamente irraggiungibile, potrebbe essere utile impostare un limite al numero di tentativi prima di fermare il polling.
Quindi migliorerei in questa maniera:
<script>
(function checkForUpdates() {
fetch(window.location.href, { cache: "no-store" })
.then(response => response.text())
.then(newContent => {
let currentContent = document.querySelector("body").innerHTML; // Confronta solo il corpo
if (currentContent !== newContent) {
console.log("Aggiornamento rilevato! Ricarico la pagina...");
window.location.reload();
}
})
.catch(err => console.error("Errore nel controllo aggiornamenti:", err));
setTimeout(checkForUpdates, 10000); // Intervallo aumentato a 10 secondi per ridurre il carico
})();
</script>
Per quanto attiene invece all'intero discorso rivolto da te ad INCOMEDIA per quanto mi riguarda sono anni che segnaliamo all'Azienda la necessità di migliorare aspetti fondamentali del loro software, come un responsive realmente efficace, un Blog rimasto fermo al passato e uno Store che andrebbe completamente ripensato. Eppure, le nostre richieste vengono sistematicamente ignorate. Anzi, gli aggiornamenti rilasciati finiscono spesso per creare nuovi problemi, segno evidente di una scarsa attenzione ai test e al controllo qualità del prodotto che vendono.
E qui sta il punto: vendono. Perché Website X5 non è certo un software gratuito, e chi investe nel suo acquisto – spesso con la speranza di ottenere uno strumento affidabile e in costante miglioramento – si trova invece di fronte a una realtà ben diversa.
E il paradosso più grande? La versione Web Agency, che dovrebbe distinguersi per funzionalità e valore aggiunto, non è altro che un clone della versione senza licenza commerciale, venduto con un sovrapprezzo importante. Un costo che non trova alcuna giustificazione concreta, rendendo l’acquisto tutt’altro che vantaggioso per chi lavora nel settore.
Se Incomedia vuole davvero dimostrarsi all’altezza delle esigenze di chi sviluppa siti web in modo professionale, deve smettere di ignorare le critiche e iniziare a offrire un prodotto che giustifichi il prezzo richiesto. Altrimenti, non potrà stupirsi se sempre più utenti cercheranno alternative più affidabili e trasparenti.".
Per quanto mi riguarda, alla scadenza della licenza non la rinnoverò se la situazione rimarrà invariata, nonostante le mie innumerevoli segnalazioni, finite praticamente nel dimenticatoio. Continuerò a gestire i progetti già avviati con Incomedia, ma per i nuovi svilupperò con altri CMS.
Se consideriamo l'investimento fatto nel tempo e il fatto che molti altri professionisti stanno prendendo la stessa decisione, Incomedia – e soprattutto chi la dirige – dovrebbe seriamente rivedere la propria strategia. Perché se non cambiano approccio, il calo degli utenti e, di conseguenza, degli introiti, sarà inevitabile.
Автор
Ciao Roberto,
provero´ il tuo codice e spero che possa portare benefici anche ad altri utenti.
Per quanto riguarda Incomedia, non avevo intenzione di creare polemiche. Al contrario, desideravo che l'azienda intraprendesse azioni semplici, come selezionare una ventina di post con idee facili da realizzare e includerli nel prossimo aggiornamento. In questo modo, si potrebbe evitare la perdita di clienti. Inoltre, se ascoltassero le richieste tue e di altri utenti, potrebbero attrarre nuove Web Agency, il che sarebbe vantaggioso per tutti.
Grazie per il tempo che hai dedicato, Roberto. Tu e molti altri riuscite a colmare quei vuoti che talvolta non dovrebbero esistere.
Eric, vedi, forse tutto è partito da qui: https://helpcenter.websitex5.com/ru/post/269814
Un utente legge il post e si chiede: quante volte bisogna ripetere le stesse problematiche?
La seconda domanda che ci si pone è: verrà risolto il problema?
Gestire un'azienda come la vostra può essere complesso, ma non è facile neanche lavorare con un software imperfetto. Attualmente lavoro con la versione 2024.3.2: mi sto perdendo aggiornamenti importanti?
Posso scaricare l'ultima versione senza problemi?
Avendo un'attività commerciale e non un blog, non posso rischiare di perdere tempo o ordini a causa di vari inconvenienti.
La sintesi di tutto il discorso è questa: per favore, almeno quando gli utenti contribuiscono allo sviluppo attraverso i codici, implementateli e non lasciateli nel forum.
Buon weekend!
Ciao Alessandro, non preoccuparti, avevo capito che nella parte finale del messaggio c'era lo zampino di ChatGPT :-)
D'altronde ormai i codici si fanno tutti con ChatGPT, se glielo chiedi ti crea anche tutto il codice sorgente di un intero sito web così come lo desideri e con tutte le caratteristiche e funzionalità che più ti piacciono... "qualcuno" dovrebbe meditare a fondo e seriamente su questo per non ritrovarsi fuori dal mercato entro qualche annetto.
Verissimo. Incomedia fa pagare MagixText e fa la metà di quello che fa copilot o chatgpt a partire dalla lunghezza dei testi "description" che non rispetta MAI ed è stato già segnalato da Giancarlo Web ma da una parte guardano dall'altra archiviano.
Автор
'aiuto di ChatGPT è enorme, ma come dimostrato da Roberto (che ringrazio nuovamente) commette ancora alcuni errori. Chi ha competenze riesce a individuarli e correggerli, mentre chi non ne ha si ritrova con gli errori. Tuttavia, anche dal punto di vista didattico è importante perché aiuta a creare un codice che un principiante non potrebbe neanche immaginare.
Questo discorso è collegato al post perché senza l'AI (o il contributo significativo di altri utenti) non sarei mai riuscito a portare avanti il progetto del Refresh. In conclusione, ho verificato che nessun cliente ha ordinato con i vecchi prezzi (utilizzando vecchie pagine di cache), quindi la missione è riuscita.
Автор
... scusatemi, la parte finale la voglio evidenziare in grassetto....In conclusione, ho verificato che nessun cliente ha ordinato con i vecchi prezzi (utilizzando vecchie pagine di cache), quindi la missione è riuscita.
Автор
La missione è stata completata con successo utilizzando il vecchio codice.
Tuttavia, sto riscontrando alcuni problemi con il nuovo codice di Roberto.
Quando lavoro in locale, la pagina si aggiorna automaticamente dopo pochi secondi, rendendomi difficile operare. Inoltre, faccio fatica a entrare nelle impostazioni e non riesco a visualizzare i prodotti nella pagina mioweb-cartsearch/index.html (in locale).
Se stai lavorando in locale (file:// o localhost), puoi disabilitare l'auto-refresh. Se utilizzi chat-gpt basta che gli dai in pasto il codice con allegati la descrizione dei problemi da te riscontrati e lei correggerà il codice.
Автор
Uso Copilot, ma durante l'elaborazione dei codici spesso è necessario effettuare molte prove. Non è raro che tra una copia e l'altra si perda qualche parte di codice. Più copie si fanno, maggiori sono i problemi. Spesso si trova la modifica al codice, ma il codice originale è da ricostruire e non è sempre facile risalire alla versione iniziale. Quindi, sebbene Copilot possa apparire utile, nella realtà può anche generare complicazioni che richiedono tempo prezioso per essere risolte. Anche ChatGPT non è esente da errori. Pertanto, se non conosci i codici HTML e ti affidi all'AI, potresti trovarti in un labirinto in cui l'unica via d'uscita sono i backup... la soluzione di tutti i problemi, consisterebbe nell utilizzare un software piu avanzato nelle funzioni di base...
Scusami Alessandro io non sono tanto esperto di codice, comunque riassumendo: per utilizzare il tuo che hai scritto all'inizio, va inserito sulle proprietà delle pagine "speciali" (carrello) modalità esperto, prima della chiusura del TAG Head ?
questo intendo:
<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>
Talvez ajude sobre o assunto, recentemente no servidor cPanel que uso, impantaram um recurso que acaba fazendo que a atualização do site seja praticamente impossível imediatamente, nem tenho ideia de quanto demora para ser publicada as alterações, pois somente consegui o resultado limpando diretamente do Painel do Servidor.
Segue parte da tela, onde tem a opção de Cache, que ao estar habilitada aparece uma opção de LIMPEZA IMEDIATA que passa a funcionar efetivamente "no mesmo momento":
Este es un comportamiento normal.
Si tienes una caché en el host, tienes que borrarla o ponerlo en lo que muchos hosts llaman modo 'desarrollador' para poder actualizar el contenido y que se publique el contenido actualizado. Ejemplo típico con la caché de Cloudflare.
Personalmente, encuentro la caché en el host inútil con un sitio hecho con WebsiteX5, donde ya tengo muy buen rendimiento.
Por lo tanto, siempre la desactivo desde el principio.
Автор
Alberto, i due codici sono ancora in versione di prova...beta :) non mi sembrano ancora affidabili, pero se vuoi fare delle prove, magari su un web di prova (crei una cartella sul server) allora puoi inserire i codici in impostazioni, codice e statistiche - codice - nella sezione header (magari dopo l apertura)...lo scrivo a titolo indicativo, magari uno piu esperto di me potrá consigliarti diversamente...
ciao
Si ok faccio sempre delle prove su un sito provvisorio
c'è anche il codice di Roberto che mi sembra hai già testato, che problema ti dava?
Автор
leggi il commento sopra - Postato il 23/02/2025 13:38:15
ciao
ps: in ogni caso Roberto ha dato un grande contributo
Con le mie limitate competenze ci provo e ti ringrazio. Tuttavia, le complessità di questi codici spesso incontrano ostacoli con diverse strutture di layout o codici preesistenti che impediscono la sovrascrittura delle regole CSS. Pertanto, è tutto un continuo prova su prova. Ti lascio tre pulsanti per il controllo del refresh e della cache. Non sono una soluzione definitiva, ma semplici strumenti utili che potrebbero esserti d'aiuto per altre situazioni, dato che stiamo parlando di aggiornamento della cache.
<input type="button" value="Aggiorna la pagina con refresh ▼" onclick="location.reload(true);" class="custom-button" />
<style>
.custom-button {
width: 250px;
height: 25px;
background-color: initial;
border: 1px solid #000;
cursor: pointer;
}
.custom-button:hover {
background-color: #ff0000 !important; /* Rosso vivo */
}
</style>
=====================
<input type="button" value="Aggiorna la pagina e la cache ▼" 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>
===================
<input type="button" value="Scarica complatamente la cache ▼" onclick="forceReload();" class="custom-button" />
<script>
function forceReload() {
// Elimina la cache del browser
if ('caches' in window) {
caches.keys().then(function(names) {
for (let name of names) caches.delete(name);
});
}
// Ricarica la pagina con un URL unico
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>
Автор
Grazie Roberto, informazioni utilissime a tutta la community.
Concordo, quando si parla di codici a volte si generano situazioni impreviste.
L idea del pulsante é buona, nel mio caso (e forse in quella di tutti gli eshop) il refresh dovrebbe essere automatico e nascosto...perché ogni situazione fuori standard potrebbe generare timore nel potenziale nuovo visitatore...
grazie di tutto...