Eecuzione di javascript in ciclo foreach php.

inftecnica

Nuovo Utente
25 Ott 2020
5
0
1
Buongiorno

Non riesco ad eseguire un controllo javascript all'interno di un ciclo foreach php.
In pratica devo modificare un contatore allo scadere di un tempo prefissato.
Ho questo codice:

PHP:
<tbody>

<?php foreach ($this->items as $item): ?>

<tr>

<?php

// ricavo valore ora
$hh = date('H', strtotime($item->date));
// ricavo valore minuti
$mm = date('i', strtotime($item->date));
// trasformo tutto in minuti
$ini = ($hh*60 + $mm);
// stampo i minuti per verifica
echo $ini;
 ?>

<td>

<script type="text/javascript"> 

function aggiorna() {

    var ini = <?php echo $ini ?>;    // inizializzo la variabile php in javascript

    var hour = new Date().getHours() ;    // ricavo ora corrente

    var min = new Date().getMinutes();    // ricavo minuti correnti

    var start = (hour*60 ) + (min + 2);    // predispongo il cambio con due minuti di anticipo

    if (start >= ini) {   //definisco quando far partire il cambio

        document.getElementById("cambio").innerHTML = "Coming Soon!";   

    }

}

    setInterval("aggiorna()", 1000);

</script>

<div id ="cambio">

    <div id="countdown_dashboard">

        <div uk-countdown="date: <?php echo  date("Y-m-d") . "T". date('H:i:s', strtotime($item->date));?>">

            <span class=" uk-countdown-hours"></span>

            <span>:</span>

            <span class=" uk-countdown-minutes"></span>

            <span>:</span>

            <span class="uk-countdown-seconds"></span>

        </div>

    </div>

</div>

</td>

</tr>

<?php endforeach; ?>

</tbody>

Il codice di per se funziona solo che mi rende i valori del solo l'ultimo record saltando quelli precedenti e visualizza il risultato nel primo record.
Se serve posso indicare il sito ove gira.

Grazie a chi vorrà aiutarmi a capire dove sbaglio.
 

Tommy03

Utente Attivo
6 Giu 2018
614
58
28
18
Vicenza
Il div con id=cambio è dentro un loop, quindi nel codice sorgente lo vedrai comparire più volte, e questo è sbagliato perche non possono esserci più elementi in una pagina con lo stesso id. Infatti il "Coming sono" lo visualizziamo solo nel primo elemento perche essendo id tutti uguali, gli altri non li considera.
Per risolvere secondo me potresti mettere una variabile numerica che si incrementa con il foreach, e chiamare il div con id=cambio_$variabile, così da poterlo richiamare nel JavaScript
 

inftecnica

Nuovo Utente
25 Ott 2020
5
0
1
Grazie, mi hai fatto ricordare che in una situazione simile avevo fatto proprio come hai suggerito. A volte le soluzioni sono a portata di mano e anche gia percorse ma non riusciamo a vederle.
 

inftecnica

Nuovo Utente
25 Ott 2020
5
0
1
Comunque stranamente anche cambiando l'id ad ogni ciclo ottengo che il cambio, questa volta avviene solo correttamente nell'ultimo record.
Questa la parte del codice modificato:
PHP:
<?php foreach ($this->items as $item): ?>
<tr>
<td>   
<?php
$Minutes = $item->duration;
// ricavo valore ora
$hi = date('H', strtotime($item->date));
// ricavo valore minuti
$mi = date('i', strtotime($item->date));
// trasformo tutto in minuti
$ini = ($hi*60 + $mi);
// stampo i minuti di inizio per verifica
//echo $ini . " ";
 ?>
<div id ="<?php echo $d ?>">   
    <div uk-countdown="date: <?php echo  date("Y-m-d") . "T". date('H:i:s', strtotime($item->date));?>">
        <span class=" uk-countdown-hours"></span>
        <span>:</span>
        <span class=" uk-countdown-minutes"></span>
        <span>:</span>
        <span class="uk-countdown-seconds"></span>
    </div>
</div>
</td>
<script type="text/javascript"> 
function aggiorna() {
    var ini = <?php echo $ini ?>;    // inizializzo la variabile php in javascript
    var hour = new Date().getHours() ;    // ricavo ora corrente
    var min = new Date().getMinutes();    // ricavo minuti correnti
    var start = (hour*60 ) + (min);    // trasformo in minuti
    if (start >= ini) {   //definisco quando far partire il cambio
        document.getElementById("<?php echo $d ?>").innerHTML = "Lezione Iniziata!";   
    }
}
    setInterval("aggiorna()", 1000);
</script>
</tr>
<?php endforeach; ?>
 

Tommy03

Utente Attivo
6 Giu 2018
614
58
28
18
Vicenza
Hai controllato facendo Ispeziona che gli id siano tutti diversi tra loro? Non vedo nessun incremento della variabile $d
 

inftecnica

Nuovo Utente
25 Ott 2020
5
0
1
Sì scusa nel codice mancava la riga

PHP:
$d = 'div' . $item->id;

Che viene incrementato dal valore dell'id del record.

puoi vederlo a sviluppo.infotecnica.eu
 

Tommy03

Utente Attivo
6 Giu 2018
614
58
28
18
Vicenza
Forse non risolve, però la riga del setInterval va scritta così:
HTML:
setInterval(aggiorna, 1000);
 

inftecnica

Nuovo Utente
25 Ott 2020
5
0
1
E invece era proprio quella, non so come ringraziarti. Metto a disposizione l'applicazione appena la finisco (gestione orario lezioni, componente per joomla) per chi dovesse servire.
 
Discussioni simili
Autore Titolo Forum Risposte Data
L countdown multiplo javascript Javascript 1
S Problemi Javascript + Aruba Javascript 2
M Inviare un file su un server remoto con JavaScript Javascript 0
T a href="javascript:;" Javascript 0
F Creare elementi html con javascript Javascript 4
A pulsante di update campo mysql con javascript Javascript 2
8 Javascript - PDF Form Javascript 0
B javascript per problemi con pdf e Safari Javascript 0
N informazione javascript Programmazione 0
P javascript:document.forms Javascript 7
S Consiglio esercizio Javascript Javascript 2
MarcoGrazia Aggiungere o rimuovere classi in javascript Javascript 1
P Passaggio id php a javascript PHP 6
E lettura da un Database con Javascript jQuery 2
V TRIS in javascript Javascript 1
IClaude Funzione Javascript Javascript 8
Alex_70 Javascript date color Javascript 3
F Convertire JavaScript per la compatibilità nei browser obsoleti Javascript 0
I Passare dei parametri in javascript PHP 0
Shyson Meglio Javascript o HTML? Javascript 4
M Chiamare pagina php da javascript Javascript 8
M Errore JavaScript per php [objeto HTMLParagraphElement] PHP 0
D Javascript per il download dei dati Javascript 0
grgfede Problema javascript con aruba Javascript 1
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
W Modificare il Type di un Input box in javascript ovunque si trovi Javascript 0
I javascript come caricare una pagina sopra quella corrente in automatico Javascript 2
L [Javascript] Problema salvataggio dati in db Javascript 1
max1974 [Javascript] Grafico chartjs con dati da J.ajax Javascript 3
G Quiz Javascript Javascript 4
A [Javascript] Scrittura su più campi contemporaneamente Javascript 19
F classic asp popolare combo box javascript Presentati al Forum 1
claudio_lorenzo [Javascript] aiuto su jquery per calcolo altezze dom Javascript 1
F [Javascript] comando innerHTML non funziona Javascript 5
alexice51 proggrammi per scrivere in javascript? Javascript 3
max1974 [Javascript] Accordion aria-exspanded Javascript 0
D [Javascript] salvare immagine canvas - paypal Javascript 0
O [Javascript] Conflitto Jquery: forse... Javascript 0
M [Javascript] Canvas js css Javascript 1
M Programmazione web HTML, CSS e JavaScript Offerte e Richieste di Lavoro e/o Collaborazione 6
G [Javascript] Errore inserimento dati Backend Node.js e workbench Javascript 1
A Creare con Javascript un percorso all'interno di uno spazio Javascript 0
D [Javascript] inserire uno script in un file php Javascript 6
Monital [Javascript] inserire dati estratti dal db in html fisso Javascript 1
K [javascript] Tecnica per rilevare celle contenenti caratteri ricevute in dinamico Javascript 1
F [JavaScript] Ottenere il CSS dopo transform: scale() e transform-origin Javascript 0
S [Javascript] Problema costrutto if Javascript 0
I [Javascript] window.location.href porta alla nuova pagina e ritorna incomprensibilmente. Javascript 0
L [Javascript] input variabili di scrittura con canvas Javascript 2
G [Javascript] Passare un valore via querystring Javascript 1

Discussioni simili