Codice molto personalizzato per esecuzione temporizzata
Autor: Giancarlo B.
Visited 1860,
Followers 3,
Udostępniony 0
Buongiorno, ho questa necessita, fare eseguire uno script o un codice CSS solo ad una certa data di inizio e fine, nel senso inizio esecuzione lunedì (00-00-2022) fine esecuzione venerdi (00-00-2022) una specie di IF THEN ELSE cosa che facevo anni fa con altri linguaggi, ma oggi credo occorra uno script in PHP e non sono molto ferrato su questo.
Grazie per l'attenzione e per l'eventuale aiuto.
Posted on the
Così su due righe, dovresti vedere se il tempo del server coincide con quello della tua località (ma essendo che sei su Aruba, diamo per scontato questo step per un codice più snello), in seconda battuta formatti il tempo e lo assegni a una variabile. Opzionalmente potresti fare un controllo sulla data con checkdate(month, day, year).
Imposti una terza variabile per la scadenza. Basta un if else.
Es.
$startdate = "2022/11/11"; // Data Inizio
$enddate = "2022/11/21"; // Data Scadenza
$current = date("Y/m/d"); // Data Attuale
// Controlliamo se la scadenza è comprese nei parametri impostati
if ($enddate < $current || $startdate > $current) {
echo "expired";
} else {
echo "active"; // Solo se compreso tra le due date
}
Non ho testato ma dovrebbe funzionare come richiesto, devi mettere il codice in una pagina PHP tra i tag <?php Code Here ?>. Fammi sapere se funziona.
Al posto del testo puoi mettere del codice di richiamo al CSS. Puoi anche assegnare una quarta variabile per fare un echo fuori dalla iterazione.
Spero sia utile!
Autor
Grazie Gabriele, faccio un test e ti dico.
Figurati! Spero non ci siano errori.
... se entri nello specifico con link e particolare da controllare e per quando, sarebbe meglio...
...qui trovi la mia storica invenzione applicata nel caso al controllo sul messaggio pubblicitario; ... codice base per tutte le personalizzazioni possibili, e che puoi provare subito con il messaggio pubblicitario cambiando le date, oppure cambiando provvisoriamente la data del PC:
https://helpcenter.websitex5.com/pl/post/254421
... in poche parole basta mettere la tua condizione nella funzione //K2<<
...
... è immediato, ma se ti servissero altri chiarimenti, avvisami...
.
Autor
Grazie KolAsim che abbondanza , faccio un pò di test.
Autor
Inizio provando il codice di Gabriele.
Ho senz'altro commesso errori perchè sull'header si vede il codice, quindi è in una posizione sbagliata o editato malamente.
https://www.giancarloweb.it/test-code/
non riesco ora a vedere dove lo hai messo, ma è un codice PHP , quindi serve la pagina in php non in html
Autor
si effettivamente non ho esportato la pagina in PHP
Autor
quì il test di KolAsim (non ho capito bene la gestione della data)
https://www.giancarloweb.it/test-code/kolasim-test.html
Autor
sono online entrambi i test, se porto la pagina in PHP con il codice di Gabriele siccede questo:
... nel mio codice precedente il mese deve essere come postato, mese-1, per esempio x dicembre > 12-1...
... ma nel NUOVO codice a seguire invece puoi usare il valore reale del mese, per esempio x dicembre > 12...
... nel tag <SCRIPT> non va inserito il tag <STYLE>
... in questo NUOVO codice puoi provare per esempio, prima con giornoA=11 e poi con giornoA=12, e noterai la differenza:
<script>
/** == x controlo visibilità selettori a tempo by KolAsim == **/
giornoA = 12; meseA = 11; annoA = 2022; /* = data inizioK1 */;
giornoB = 21; meseB = 11; annoB = 2022; /* = data fineK1 */ ;
ritardoK = 3; //=== fattore ritardo in secondi da valutare sul latenza della pagina===
//=============================================
meseA=meseA-1;meseB=meseB-1;
inizioK1= new Date(annoA, meseA , giornoA).getTime();
fineK1= new Date(annoB, meseB , giornoB).getTime();
//------------------------------------------------
$( document ).ready(function() {//K
oggiK=new Date().getTime();
setTimeout(function(){ //K1>
pulsanteSliderK = $("#imObjectContentSlider_3_05 > .content-slider-container > .slide-container > .slide-grid-container > .slide-txt-container > .slide-txt-content > .slide-txt-block-container > .slide-button");
if( oggiK >= inizioK1 && oggiK < fineK1) { //K2>
pulsanteSliderK = $("#imObjectContentSlider_3_05 > .content-slider-container > .slide-container > .slide-grid-container > .slide-txt-container > .slide-txt-content > .slide-txt-block-container > .slide-button")
$(pulsanteSliderK).hide();
} else {
$(pulsanteSliderK).show();
}//K2<<
}, ritardoK * 1000); //K1<<
}); //K
</script>
................................
.
Autor
Grazie Kol, modificando le date sembra attivarsi e disattivarsi, ora... di defoult il pulsante non si deve vedere mentre quando entra nella data di inizio il pulsante si deve vedere e non vedere passata la data.
Per rendere la cosa più complicata , i pulsanti sono 3, devo replicare una parte di codice in base ai 3 ID dei pulsanti?
Grazie ancora.
Autor
ummm!! in realtà sembra già che quando entra nella data di inizio il pulsante si vede però per vederlo oggi che è 11 io devo mettere 12 come data, può essere?
Autor
no mi sa funzioni al contrario
Buonasera, chiedo scusa ma ero fuori per lavoro.
Non ho capito se il codice funziona o meno. Ovviamente il buon KolAsim è top nei codici extra.
Ho avuto modo di testare il codice PHP da me strutturato e pare funzionare senza problemi. Vi metto una pagina di test qui https://www.stiac.it/sws/test.php
Ho variato le date e messo qualche echo per farvi comprendere meglio. La prima è scaduta, mentre la seconda scade il 21 di questo mese.
Errore 500 può essere dato dal fatto che tu abbia inserito qualche carattere speciale o HTML non correttamente. Se posti qualcosa posso provare a capire dove sia il problema.
Sempre tenendo presente che sono autodidatta, se mi parli di statiche ed economia già va meglio!
http://quellidelcucuzzolo.blogspot.com/2016/01/php-confronto-tra-due-date.html?m=1
Spunto interessante! Ciao Giorgio.
Autor
Ciao Gabriele grazie ancora rispondo da Cell sopra c'è il test del tuo codice
... per il mio codice, come puoi notare, se la data non è compresa nell'intervallo prestabilito, il pulsante non si vedrà...
... per esempio se giornoA=11 ... oggi che è 11 è già maturato l'evento ed il pulsante sarà visibile, se invece giornoA=12 l'evento si perfezionerà domani ed oggi il pulsante non sarà visibile...
... comunque puoi sempre impostarlo non visibile per default nello stile in HEAD, per esempio:
<style>
#imObjectContentSlider_3_05 > .content-slider-container > .slide-container > .slide-grid-container > .slide-txt-container > .slide-txt-content > .slide-txt-block-container > .slide-button {
display:none}
</style>
... oppure più semplicemente per pulsanti in simili oggetti e per lo stesso range:
<style>
.slide-button {display:none}
</style>
... indipendentemente da questo codice in style lo script lo controllerà di conseguenza...
... per controllare altri selettori (o pulsanti che siano) nella stessa condizione e dello stesso range,
basta modificare la variabile pulsanteSliderK in questo modo:
pulsanteSliderK = $(".slide-button");
... oppure puoi aggiungere variabili legate a selettori individuali, come fatto in precedenza per pulsanteSliderK...
... per esempio:
pulsanteSliderK1 = $("selettore di riferimento > eccetera eccetera");
pulsanteSliderK2 = $("selettore di riferimento > eccetera eccetera");
... eventualmente poi e/o nel caso si potrà approfondire relativamente alla pagina con più seletori presenti da controllare...
.
Autor
Chiaro Kol, ho aggiunto altri 2 oggetti con il pulsante (ora sono 3) la data di inizio ho messo 11 quindi da domani (dopo la mezzanotte di oggi ) i 3 pulzanti sono visibili (fatto test spostando la data sembra ok.
Domanda, ma è possibile inserire esattamente la data di inizio e fine?, nel senso che se metto 11 deve partire il giorno 11 e non iniziare il 12 perchè 11 fa parte del periodo NON visibile (e finire il giorno scritto), scusami non so se mi sono spiegato bene grazie.
Ho visto che nel tuo sito di prova il codice non è stato inserito correttamente essendo la pagina con estensione HTML. Di norma il codice PHP non è visibile nella pagina online e per essere eseguibile l'estensione deve essere PHP.
Spero il codice di KolAsim possa essere più semplice da usare. Resto a disposizione!
Autor
Buongiorno Gabriele grazie del tuo interessamento, si in effetti la pagina dovrebbe essere con estensione PHP, infatti nel link del test c'è anche quella con estensione PHP ma mi da l'errore che ti ho comunicato.
Quella HTML è per vedere il codice inserito se corretto. SE non è troppo disturbo, mi piacerebbe provare a testare anche questa soluzione alternativa, grazie Giancarlo.
Autor
Buongiorno Kol, i dati inseriti sulla pagina inizio fine sono:
/** == x controlo visibilità selettori a tempo by KolAsim == **/
giornoA = 11; meseA = 11; annoA = 2022; /* = data inizioK1 */;
giornoB = 23; meseB = 11; annoB = 2022; /* = data fineK1 */ ;
oggi (12) scredo si dovrebbe vedere, ma nulla (casa ho sbagliato) .
https://www.giancarloweb.it/test-code/kolasim-test.html
Grazie, Giancarlo.
Autor
sul test da programma sembrerebbe che vengono oscurati se il periodo cade dentro la data inizio e fine, e non il contrario come dovrebbe essere.
Buon dì ragazzi! Okay, mi era sfuggita quella info.
Ti allego il codice raw in txt. Ogni tanto può capitare che il form del sito si "pappi" qualche cosa.
Inseriscilo direttamente in un oggetto Codice HTML. Alla fine dovresti vedere verosimilmente quanto mostrato qui (https://www.stiac.it/sws/test.php). Puoi variare la data di scadenza per far cambiare lo stato.
Nella situazione reale dovresti inserire in un echo il richiamo del file per la situazione "active" e rimuovere gli altri che sono inseriti per comprendere il funzionamento. Come indicato nella tua richiesta:
Ad esempio:
echo "<linkrel='stylesheet'type='text/css'href='CSS/main_active.css'>";
Come risultato, dalla data T1 alla T2 (inizio e fine) nel codice HTML verrà richiamato il CSS o JS.
P.s. Ho inserito i tag <html><body> così se cambi l'estensione da txt a php puoi metterlo online per un test rapido.
A titolo di esempio:
Volendo si potrebbe anche provare con il codice PHP fornito da Giorgio.
Autor
Grazie Gabriele, io mio problema è la poca conoscenza del PHP e della sua sintassi, e inserire al posto della faccina e lo stato di attivo il codice .slide-button {display:none}
Di base, usando li codice allagato puoi già farlo, inserendo nel file CSS di richiamo il CSS che vuoi.
Autor
intendi questo richiamo?
Sì, in quel caso ti richiama il file. Generalmente per un codice più pulito, almeno personalmente, preferisco richiamare un file esterno, ma di base credo si faccia così da prassi quando si vuole inserire del CSS o altro nel HTML.
Volendo ci sarebbe anche l'opzione include, ma è meglio la prima.
Ti posto una seconda versione del codice, in questo caso puoi inserire il CSS che mi hai indicato.
Devi solo impostare lo stato di $status_add in base alle necessità.
Se vari la data di scadenza impostandola valida (es. 2022/11/23) il pulsante viene mostrato.
Autor
fatto un paio di CSS attivo e non attivo e sembra ok è online
Autor
forse così è poco elegante ma funziona
Autor
ahhh!! visto ora allegato, grazie provo
Ottimizzato ai minimi termini sarebbe così (allegato).
.... meglio on alterare nel flusso dello script la funzione del ritardoK (//K1<<), che serve per dare il tempo per leggere il contenuto della pagina, ma puoi personalizzarne il valore assegnato in testa, per es. 0 (x zero secondi), 0.5 (x mezzo secondo), 1 (x un secondo), eccetera...
... quindi, se vuoi ottenere l'effetto opposto, cioè normalmente sempre NON visibile, ma SI visibile solo nell'intervallo assegnato, basta invertire la condizione, e si otterrà...
... assegnando 11 (ieri) e/o 12 (oggi) ... i pulsanti saranno SI visibili;
... assegnando 13 (domani) e/o 14 (dopodomani) ... i pulsanti saranno NON visibili;
... per come è strutturata attualmente quella pagina e controllare contemporaneamente i tre pulsanti, prova con questo codice aggiornato per tale scopo:
............................
Nell'ultimo allegato devi solo impostare le date (inizio e fine) e inserire il CSS all'interno del tag preposto.
Lo stesso è un echo, che avviene solo in base allo stato che viene assegnato con If Statement. Ovvero al posto di mostrare la voce "Active / Expired" gli diciamo in PHP il valore.
Non so perché ma al posto di allegarmi il file rev3 vedo il viewer between two dates_rev.txt. Provo ad allegarlo nuovamente in questo commento.
È il sito che varia il titolo del file passandolo da rev3 a rev.
... ecco il codice aggiornato che mi è rimasto indietro:
<script>
/** == x controlo visibilità selettori a tempo by KolAsim == **/
giornoA = 12; meseA = 11; annoA = 2022; /* = data inizioK1 */;
giornoB = 23; meseB = 11; annoB = 2022; /* = data fineK1 */ ;
ritardoK = 3; //=== fattore ritardo in secondi da valutare sul latenza della pagina===
pulsanteSliderK = $(".slide-button");
//=============================================
meseA=meseA-1;meseB=meseB-1;
inizioK1= new Date(annoA, meseA , giornoA).getTime();
fineK1= new Date(annoB, meseB , giornoB).getTime();
//------------------------------------------------
$( document ).ready(function() {//K
oggiK=new Date().getTime();
setTimeout(function(){ //K1>
if( oggiK >= inizioK1 && oggiK < fineK1) { //K2>
pulsanteSliderK = $(".slide-button:nth-child(1),.slide-button:nth-child(2),.slide-button:nth-child(3)");
$(pulsanteSliderK).show();
} else {
$(pulsanteSliderK).hide();
}//K2<<
}, ritardoK * 1000); //K1<<
}); //K
</script>
.......................................................
.
Autor
Grazie Gabriele per il supporto ho messo online entrambi i test e sembrano OK
Autor
Grazie Kol sempre gentilissimo, messo online con questo intervallo
giornoA = 15; meseA = 11; annoA = 2022; /* = data inizioK1 */;
giornoB = 23; meseB = 11; annoB = 2022; /* = data fineK1 */ ;
oggi è il 12 (giorno non compreso nell'intervallo) ma i pulsanti sono visibili ....
... forse sono pochi 3 secondi...
... fai un prova con 6 secondi: ritardoK = 6;
.
Figurati! È un piacere essere di aiuto. Se non erro puoi sostituire le || con && anche nel PHP.
Ovviamente se devi usare obbligatoriamente delle pagine HTML, JS è la soluzione più idonea.
Io un po' di PHP lo bazzico, per il JS faccio difficoltà. Ad esempio il codice che ha proposto KolAsim non lo comprendo a primo impatto, mentre quello PHP, sarà perché l'ho buttato giù io, capisco quello che va a fare in modo logico semplicemente leggendolo come se fosse del testo.
In sintesi JS e PHP sono una bomba se messi insieme. Ad esempio stavo strutturando un modulo per il pagamento con lo scopo di sostituire PayPal (https://www.stiac.it/sws/pay.php). Prende lo stato dal PHP e lo inserisce in JS per i redirect.
... Scusami, colpa mia, ... vedendo online mi sono accorto di averti postato il codice errato contenente tue modifiche che mi sono trascinato...
... Il cofice corretto dovrebbe essere questo:
<script>
/** == x controlo visibilità selettori a tempo by KolAsim == **/
giornoA = 15; meseA = 11; annoA = 2022; /* = data inizioK1 */;
giornoB = 23; meseB = 11; annoB = 2022; /* = data fineK1 */ ;
ritardoK = 3; //=== fattore ritardo in secondi da valutare sul latenza della pagina===
//=============================================
meseA=meseA-1;meseB=meseB-1;
inizioK1= new Date(annoA, meseA , giornoA).getTime();
fineK1= new Date(annoB, meseB , giornoB).getTime();
//------------------------------------------------
$( document ).ready(function() {//K
pulsanteSliderK = $(".slide-button:nth-child(1),.slide-button:nth-child(2),.slide-button:nth-child(3)");
oggiK=new Date().getTime();
setTimeout(function(){ //K1>
if( oggiK >= inizioK1 && oggiK < fineK1) { //K2>
$(pulsanteSliderK).show();
} else {
$(pulsanteSliderK).hide();
}//K2<<
}, ritardoK * 1000); //K1<<
}); //K
</script>
.....................
.
Autor
ok Grazie Kol lo provo subito...
.. occhio! ... hai dimenticato la "<" di apertura iniziale in script> ... (<script>)
Autor
si si infatti ... è stato un attimo poi mi sono ripreso...
... OK .. visto ... adesso sì che funziona...
... volendo, si potrebbe mettere il JS esterno alla pagina, in modo da poter modificare e controllare i periodi, o abilitare e/o disabilitare il codice per quando serva, senza toccare il Progetto e senza riesportare tutte le volte, risparmiando tempo ed eventuali inconvenienti in agguato...
.
Autor
se metto giorno fine 12 non si vedono se metto 13 si ho inserito questo
giornoB = giornoB+1
sembra OK
... nel codice considera per esempio che:
> per data INIZIO (giornoA) 12 corrisponde le ore zero (0) del 12...
> data OGGI (oggiK) se rilevata alle ore 8 (o a qualsiasi orario) è maggiore di inizio controllo (>0);
> per data FINE (giornoB) 12 sono sempre le ore zero (0) del 12 e data OGGI per l'ora rilevata è maggiore di zero (>0), quindi fuori intervallo...
... quindi nel codice per limitare l'intervallo ad un giorno per esempio il 12:
INIZIO (giornoA) =12; FINE (giornoB) =13;
... e sarà controllato l'intervallo del solo giorno 12...
.
Autor
Ho spostato i vari test a questo link in moto da renderli disponibile anche ad altri utenti se interessati:
https://giancarlob.altervista.org/Test-time/
Autor
Grazie molte Kol...
Autor
.....
Potevi lasciare i crediti anche nei miei!
Autor
certo che si scusami
Autor
mia mancanza scusami ma è più che giusto
Con le emoji è più carino! Grazie
Autor
sono io che devo ringraziere te.
Ma va! Figurati è un piacere.