Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    127

    Gestire il flusso di esecuzione delle istruzioni

    Ciao a tutti,

    sto lavorando a una versione flash di una rivista.
    Il testo di ogni pagina è diviso in quattro colonne e risiede su un db mySQL al quale mi interfaccio tramite php (la tabella contiene quattro campi che si chiamano colonna1...colonna4).
    Siccome utilizzo un component che mette tutta la rivista in cache ho la necessità di caricare tutti i testi nel primo frame del mio progetto, per renderli immediatamente disponibili e applicare qualche effetto.

    L'idea quindi è questa: creo quattro variabili temporanee, colonna1...colonna4 nelle quali copio i dati recuperati dal db per una data pagina, dopodiché copio queste variabili in quelle proprie della pagina (che nel caso di pagina 1 si chiameranno p1_colonna1...p1_colonna4).

    la funzione che utilizzo per caricare i dati da db è questa:

    Codice PHP:
    function loadData(url_par){
      
    loader = new LoadVars();
      
    loader.load(url_par);
      
    loader.onLoad = function(success) {
        if(
    success){
          
    _root.colonna1 = eval("this.colonna1");
          
    _root.colonna2 = eval("this.colonna2");
          
    _root.colonna3 = eval("this.colonna3");
          
    _root.colonna4 = eval("this.colonna4");
        }
      }

    Questo è invece il codice utilizzato per caricare i dati relativi a due pagine:

    Codice PHP:
    pagina=4// numero della pagina
    url="http://www.x.com/y.php?pag="+pagina
    loadData(url); // accedo al db
    /* copio i dati nelle variabili relative alla pagina */ 
    _root.p4_colonna1=_root.colonna1;
    _root.p4_colonna2=_root.colonna2;
    _root.p4_colonna3=_root.colonna3;
    _root.p4_colonna4=_root.colonna4;

    pagina=5// numero della pagina
    url="http://www.x.com/y.php?pag="+pagina
    loadData(url); // accedo al db
    /* copio i dati nelle variabili relative alla pagina */ 
    _root.p5_colonna1=_root.colonna1;
    _root.p5_colonna2=_root.colonna2;
    _root.p5_colonna3=_root.colonna3;
    _root.p5_colonna4=_root.colonna4
    E qua cominciano i primi problemi: quando flash chiama per la prima volta la funzione loadData non ne aspetta la terminazione ma procede oltre (ho verificato con il trace), richiama la stessa funzione per pagina 5 e mi trovo con due esecuzioni sovrapposte. Dato che queste funzioni agiscono sulle stesse variabili "globali", capite bene che la cosa non è propriamente desiderabile.

    Ho provato allora a usare un "semaforo", una variabile "fine" che viene settata a 1 all'ultima istruzione della funzione loadData e che utilizzo per segnalare la fine del caricamento dei dati:

    Codice PHP:
    function loadData(url){
      ...
      
    _root.fine=1;


    // pagina 1
    loadData(url_pagina1);

    while(
    _root.fine!=1){
    }

    // copio i dati nelle variabili della pagina

    _root.fine=0// resetto il semaforo

    // pagina 2
    loadData(url_pagina2); 
    ma non sembra funzionare

    Ora vi chiedo: esiste qualche altro metodo per bloccare il flusso dell'esecuzione finchè una data funzione non termina il suo lavoro ed evitare queste sovrapposizioni?

    Grazie a tutti

  2. #2
    beh la soluzione ottimale la puoi trovare qua
    http://flash.html.it/guide/lezione/2...-dellinfinito/

    con la paginazione
    nel tuo caso da quanto ho capito ti servirebbe, quando cambi pagina eliminare i cilp che hai creato con una funzione e riacaricare poi dopo i nuovi dati x la nuova pagina..sempre se ho ben capito il problema

    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    127
    grazie per l'interessamento

    provo a essere più chiaro, premettendo che io di clip e movieclip non ne capisco un'acca, io mi occupo solo della programmazione base e il mio socio pensa a quelle cose

    Allora, come dicevo devo caricare tutti i dati nel primo fotogramma perchè l'intera rivista va in cache e altrimenti ci sarebbero problemi di visualizzazione dei contenuti (in buona sostanza prima mi carico tutti i testi, e poi le pagine che risiedono in file esterni).

    ovviamente sono obbligato a usare una variabile diversa per ogni colonna di testo presente nella rivista.. se ci son 10 pagine, avrò 40 colonne e 40 variabili (non è il massimo, ma il progetto è parecchio complesso e rifarlo da zero sarebbe un suicidio).

    quello che vorrei io è una cosa del genere:

    1. carica dal db le colonne di pagina 1 e mettile nelle variabili temporanee colonna1...colonna4
    2. copia le variabili temporanee nelle variabili pagina1_colonna1....pagina1_colonna4
    quando tutto questo è FINITO....
    3. carica dal db le colonne di pagina 2 e mettile nelle variabili temporanee colonna1...colonna4
    4. copia le variabili temporanee nelle variabili pagina2_colonna1....pagina2_colonna4
    quando tutto questo è FINITO....
    5. carica dal db le colonne di pagina 3 e mettile nelle variabili temporanee colonna1...colonna4
    6. copia le variabili temporanee nelle variabili pagina3_colonna1....pagina3_colonna4

    eccetera eccetera

    praticamente sto cercando di capire come realizzare il controllo "quando tutto questo è finito"

  4. #4
    beh un mezzo macello ...direi con tutte quelle chiamate

    cmq, anche se avrei fatto la cosa in modo diverso dato che devi leggere tutte le var,
    farei adesso uso di array e con il metodo push aggiungerei agli array i diversi valori si colonna1

    cioè farei 4 array
    colonna1
    colonna2
    colonna3
    colonna4
    ed in questi nella lettura dei dati metteri i valori
    quindi ade se avrai nell'array colonna1=(valore1, valore2)
    a cui puoi accedere succ puntando all'indicice che ti serve

    ad es x la pagina 4
    _root.p4_colonna1=colonna1[0]
    _root.p5_colonna1=colonna1[1]

    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  5. #5
    beh volendo fare ad es con dei file txt ..che alla fine e la stessa cosa
    ad es x una sola var...colonna1

    allona ho diversi txt con dentro
    colonna1=valore&

    ora se suppondo che ho tre pagine quindi devo leggere tre volte i file e supponendo che i file si chiamano
    file1.txt , file2.txt, file3.txt

    ho questa cosa
    Codice PHP:
    stop();
    tot=1
    colonna1
    = new Array();
    function 
    loadData(url_par){ 
      
    loader = new LoadVars(); 
      
    loader.load(url_par); 
      
    loader.onLoad = function(success) { 
        if(
    success){ 
          
    colonna1.push(loader.colonna1)
          
    vai()
        } 
      } 
    }
    url="file1.txt" 
    loadData(url); 

    function 
    vai(){
        
    //faccio la chiamata tot volte quanto mi serve
        
    if(tot<3){
            
    tot++
            
    //magari qui metto dei nomi con un indice x le diverse chiamate
            
    url="file"+tot+".txt" 
            
    loadData(url); 
        }else{
            
    //qui fai l'assegnazione della var che ti servono
            
    trace("p4 ="+colonna1[0])
            
    trace("p5 ="+colonna1[1])
            
    trace("p6 ="+colonna1[2])
        }

    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    127
    si avevo pensato anche all'uso degli array che consente senz'altro di mantenere più compatto il codice... solo che vista l'esecuzione "sovrapposta" delle funzioni c'è il rischio di trovarsi con array non allineati (ad esempio i dati di pagina 4 sono in posizione 3 e quelli di pagina 5 in posizione 2).

    ci ho riflettuto un pò sopra, e probabilmente la soluzione più semplice è combinare l'uso degli array con la riscrittura del codice php... che anzichè restituire il contenuto di una singola pagina restituirà in un colpo solo il contenuto di tutta la rivista. e poi, con un bel ciclo, si riempiono gli array senza scrivere milioni di righe

    grazie per la consulenza

  7. #7
    Originariamente inviato da Nov@lis

    ci ho riflettuto un pò sopra, e probabilmente la soluzione più semplice è combinare l'uso degli array con la riscrittura del codice php... che anzichè restituire il contenuto di una singola pagina restituirà in un colpo solo il contenuto di tutta la rivista. e poi, con un bel ciclo, si riempiono gli array senza scrivere milioni di righe
    esatto ....... credo che sia la soluzione migliore

    leggi tutti i dati in un sol colpo e poi fai le tue assegnazioni....


    alla prox
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.