Joomla.it Forum
Joomla! 3 => Joomla! 3 => : Daniele Pinna 15 Sep 2018, 20:01:48
-
Salve a tutti :-)
Sono alle prese con una estensione per Agenzie Immobiliari (non la nomino perché commerciale) che fra le varie funzioni ha la possibilità di "Confornto"... si aggiungono due o tre immobili e si procede al confronto delle caratteristiche.
La cosa particolare è che quando clicco su "Confronta" non mi visualizza la pagina aggiornata... ma la situazione preceente (ad esempio dove nella lista avevo incluso un immobile differente). Il problema lo risolvo facendo un semplice refresh della pagina (F5).
Il supporto (molto disponibile) pare non aver capito bene il problema (o forse a loro non lo fa)...
Sto cercando quindi di risolvere il problema in autonomia...
Un primo approccio è stato quello di cercare una esclusione o una scadenza breve nella cache per un percorso predefinito da impostatre su .htaccess. C'è qualcosa ma riguarda solo le estensioni e non i singoli URL.
Ho trovato quindi il file PHP del componente che genera la pagina di confronto e ho aggiunto del codice ($document->setMetaData ) in modo da ottenere le seguenti righe nel header:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
Purtroppo non cambia nulla...
Sto sbagliando qualcosa?
Devo usare del codice differente?
NOTA:
- la cache di Joomla! è disabilitata
- sul server (è un mio VPS) non viene usato Cloudfire o simili
Ringrazio Anticipatamente per le Risposte :-)
-
Ciao Daniele, puoi nominare pure l'estensione anche se commerciale perchè non vige più quel divieto.Cmq io proverei a far fare subito un refresh automatico a quella pagina dato che con quello il problema sembra risolversi ;D
-
nelle impostazioni della cache vi è la possibilità di escludere determinate URL
-
Ciao Daniele, puoi nominare pure l'estensione anche se commerciale perchè non vige più quel divieto.
Ah... ecco, non lo sapevo :-)Sono contento che non ci sia più questa restrizione...
Cmq l'estensione è OS Property...
Cmq io proverei a far fare subito un refresh automatico a quella pagina dato che con quello il problema sembra risolversi ;D
Ecco... non avevo pensato a questo... oggi provo con questo sistema :-)Grazie!!!
-
nelle impostazioni della cache vi è la possibilità di escludere determinate URL
Si avevo già provato ad impostare l'URL che non va memorizzato in cache nel plugin presente di default in Joomla! e anche usando una estensione aggiuntiva... ma non risolve :-(
Grazie cmq per il suggerimento :-)
-
fai attenzione che funziona solo se la cache è ativata ed è configurara dal pannello di controllo scegliendo il tipo di cache.
-
fai attenzione che funziona solo se la cache è ativata ed è configurara dal pannello di controllo scegliendo il tipo di cache.
Non ero sicurissimo di aver attivata la cache, quindi ho riprovato ad attivarla sia nel plugin (con la pagina impostata) sia da Configurazione Globale, senza però risolvere.
Però come ha suggerito tonicopi ho inserito un refresh nella pagina (modificando il sorgente) con il seguente codice
$document->setMetaData("refresh", "0", $attribute = "http-equiv");
che alla fine risulta una volta interpretata la pagina:
<meta http-equiv="refresh" content= "0" />
La pagina si riavvia in continuazione... quindi ho aumentato a 10 secondi e in effetti funziona. Ma è una scocciatura e certamente non va bene il riavvio ogni 10 secondi. Però è già una indicazione che "probabilmente" la strada è giusta.
Cercando varie soluzioni, anche con Script Java di Refresh, nessuno funziona (proprio non partono... forse per errore mio).Decido di adattarne una di queste soluzioni al PHP e nello stesso punto in cui avevo inserito il codice per il refresh, inserisco questo codice PHP
$osp_time=time(); //Leggo il Tempo
if (isset($_COOKIE['osp_reload'])) { //verifico se il cookie esiste
$osp_time_cookie = $_COOKIE['osp_reload']; //Recupero il valore del cookie
$osp_time_cookieFix = ($osp_time_cookie + 10); //aggiungo 10 secondi al valore letto dal cookie
setcookie("osp_reload", $osp_time, time()+3600); //Lo un nuovo valore nei cookie
if ($osp_time_cookieFix > $osp_time) { //Verifico il valore del cookie è superiore di 10 secondi rispetto a quello attuale
echo "AAA Cookie= " . $osp_time_cookieFix . " -> Time = " . $osp_time . " -> Diff= " . ($osp_time - $osp_time_cookieFix);
$document->setMetaData("refresh", "0", $attribute = "http-equiv"); //Inserisco l'struzione per ricaricare la pagina
} else {
echo "BBB Cookie= " . $osp_time_cookieFix . " -> Time = " . $osp_time . "-> Diff= " . ($osp_time - $osp_time_cookieFix);
}
} else { // il cookie non esiste, lo scrivo e faccio comunque il refresh
setcookie("osp_reload", $osp_time, time()+3600); //Lo salvo nei cookie
echo "CCC Cookie= " . $osp_time_cookieFix . " -> Time = " . $osp_time . "-> Diff= " . ($osp_time - $osp_time_cookieFix);
$document->setMetaData("refresh", "0", $attribute = "http-equiv"); //Inserisco l'struzione per ricaricare la pagina
}
In sintesi:- leggo il tempo attuale
- leggo il tempo memorizzato nei cookie (tempo precedente)
- se il tempo memorizzato nei cookie + 10 secondi è superiore al tempo attuale ricarico la pagina, altrimenti no.
Il problema è che "grazie" alla cache tutti quei valori rimangono gli stessi (lo si nota proprio per gli echo che visualizzo)
Ho provato anche una variante inserendo questo
$document->setMetaData("refresh", "0;URL=?$osp_time", $attribute = "http-equiv");
Aggiunge qualcosa di variabile all'URL e pensavo in quel modo di fregare la cache, ma niente... il valore di $osp_time non varia fino a quando non fa un vero e proprio riavvio :-\
-
RISOLTO!!! ;D ;D ;D
Cercando una soluzione sono arrivato ad una pagina che indicava come gestire la scadenza della cache con PHP
Più o meno con queste indicazioni:
header("Pragma: no-cache");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: on, 01 Jan 1970 00:00:00 GMT");
Chiaramente viene male inserirle così brutalmente su Joomla! e occorre usare la funzione SetHeader
JResponse::setHeader('Pragma: ', 'public',true);
JResponse::setHeader('Cache-Control: ','public',true);
JResponse::setHeader('Expires: ', gmdate('D, d M Y H:i:s', time()+(5)) . ' GMT',true); //scadenza dopo 5 secondi dalla generazione
Invece di lasciare una data moooolto vecchia (1970) prima che che i browser la rifiutiono per qualche motivio, ho deciso di calcolare al volo la data e aggiungere semplicemente 5 secondi per stabilire la data di scadenza.
Dato che ho citato un componente specifico, OS Property, segnalo che il file da modificare è il seguente:
/components/com_osproperty/classes/compare.php
sotto questa riga
$document->setTitle($configClass['general_bussiness_name']." - ".JText::_('OS_COMPARE_PROPERTIES'));
Chiaramente ora segnalo all'autore... questa soluzione... può essere che venga recepita :-)
In ogni caso ringrazio tutti per l'aiuto :-D
-
Grazie Daniele, talvolta ho usato OS Property (ma non ho mai usato il confronto) e mi tengo annotata questa cosa che potrebbe tornarmi utile!
-
Tieni presente che per far funzionare il confronto ho dovuto far intervenire il supporto e dargli l'accesso al sito...
Non so che modifiche abbia fatto per farlo funzionare :-D