WebSite X5Help Center

 
Alessandro R.
Alessandro R.
User

Refresh pagine  it

Autore: Alessandro R.
Visite 212, Followers 2, Condiviso 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

Postato il
11 RISPOSTE - 3 UTILI
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

Leggi di più
Postato il da Giuseppe Guida
Incomedia
Eric C.
Incomedia

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

Leggi di più
Postato il da 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.

Leggi di più
Postato il da Roberto M.
Alessandro R.
Alessandro R.
User
Autore

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.

Leggi di più
Postato il da Alessandro R.
Alessandro R.
Alessandro R.
User
Autore

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>

Leggi di più
Postato il da Alessandro R.
Alessandro R.
Alessandro R.
User
Autore

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

Leggi di più
Postato il da Alessandro R.
Alessandro R.
Alessandro R.
User
Autore

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.

Leggi di più
Postato il da Alessandro R.
Alessandro R.
Alessandro R.
User
Autore

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 :)

Leggi di più
Postato il da Alessandro R.
Roberto M.
Roberto M.
User
Alessandro R.
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>

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.

Leggi di più
Postato il da Roberto M.
Alessandro R.
Alessandro R.
User
Autore

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/it/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!

Leggi di più
Postato il da Alessandro R.
Giuseppe Guida
Giuseppe Guida
User

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.

Leggi di più
Postato il da Giuseppe Guida