Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    57

    Include passaggio variabili tra 2 funzioni

    Ciao a tutti. Ho un problema con il passaggio di variabili tra le funzioni.
    Dunque, ho un file template che va dinamicamente a prendersi il file di lingua.
    Poi dal file index devo richiamare il template e far popolare i vari blocchi di codice con i relativi file di lingua. Riesco a stampare correttamente gli array delle 2 lingue, ma non riesco a far passare i valori alle altre funzioni del file template. So che dovrei usare globals ma dopo vari tentativi non ne vengo a capo.
    Qualche suggerimento? Grazie in anticipo

    File template.php
    Codice PHP:
    <?php 
    function language() { 
       if (isset(
    $_GET['lang'])) { 
          
    $lang=$_GET['lang']; } 
       
    $langFile "../lang/" .$lang.".php"
       if (
    file_exists($langFile)) { 
          include(
    $langFile); 
          
    print_r ($menu); 
          
    print_r ($test); } 
       else { echo 
    "Language Error!"; } 
    ?>
    <?php 
    function test() {
       echo 
    '

     Variabile : ' 
    $menu[2] . '</p>';
    }
    ?>
    File it.php
    Codice PHP:
    <?php 
    // menu 
    $menu[0] = "home"
    $menu[1] = "l'azienda"
    $menu[2] = "dove"
    $menu[3] = "news"
    $menu[4] = "contatti"
    $menu[5] = "area riservata"

    $test[0] = "it0"
    $test[1] = "it1"
    $test[2] = "it2"
    $test[3] = "it3"
    ?>
    File index.php
    Codice PHP:
    <?php 
    include '../common/template.php';
    language();
    test(); 
    ?>

  2. #2
    Molto semplice: sia nel file it.php che all'interno della funzione inserisci la riga
    Codice PHP:
    global $menu;
    global 
    $test
    Che in pratica non fa altro che indicare che la variabile che si andrà in seguito ad utilizzare è globale, cioè può ricevere modifiche da qualunque oggetto o funzione.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    57
    Grazie quit10!
    In effetti così funziona, sbagliavo mettendo il global solo in un file.
    Ma visto che le variabili saranno molte, non c'è un modo per rendere globale l'intero file di lingua?
    Inoltre, come posso portarmi dietro nelle varie pagine la variabile $lang una volta scelta?

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    57
    Ho trovato una funzione che in parte risolve la cosa :

    Codice PHP:
    <?php
    function globals(){
        
    $vars = array();
        foreach(
    $GLOBALS as $k => $v){
            
    $vars[] = "$".$k;
        }
        return 
    "global ".  join(","$vars).";";
    }
    function 
    foo(){
       eval(
    globals()); // just insert this line at the beggining of each function
    }

    function 
    language() {
        global 
    $lang;
        if (isset(
    $_GET['lang'])) {
               
    $lang=$_GET['lang']; 
           }
        
    $langFile "../lang/" .$lang.".php";
        if (
    file_exists($langFile)) {  
            include(
    $langFile);
            
    print_r ($menu);
            
    print_r ($test);
            }
        else {  
            echo 
    "Language Error!"
            }  
        }
    ?>
    <?php 
    function test() {
        eval(
    globals());
        echo 
    '

     Variabile : ' 
    $menu[2] . '</p>';
        echo 
    '[url="test.php?lang='.$lang.'"]test[/url]';
    }
    ?>
    <?php 
    function test2() {
        eval(
    globals());
        echo 
    '

     Variabile : ' 
    $menu[4] . '</p>';
        echo 
    '[url="index.php?lang='.$lang.'"]test[/url]';
    }
    ?>

  5. #5
    Per quanto riguarda la prima domanda, la funzione che hai trovato è perfetta, anche se secondo me faresti prima a memorizzare tutte le variabili in un array globale.
    Per la seconda domanda, ti consiglio di usare le sessioni:
    in pratica, all'inizio di ogni pagina in cui vorrai utilizzare la variabile $lang, inserisci la riga session_start();
    che va inserita subito dopo <?php, quindi anche prima di <html> o qualunque altro output.
    A questo punto, nella pagina in cui viene definito $lang (anche questa provvista della riga in questione), inserisci alla fine la riga
    Codice PHP:
    <?php
    $_SESSION
    ["lang"] = $lang;
    ?>
    Questo codice, in pratica, memorizza $lang nell'array $_SESSION, array speciale, creato da session_start() che in pratica rimane costante in qualunque pagina del tuo sito, un po' come un cookie, ma che viene cancellato alla chiusura del browser.
    A questo punto, quindi, non ti resta altro da fare che recuperare in ogni pagina del sito la variabile $lang contenuta nell'array:
    Codice PHP:
    <?php
    $lang 
    $_SESSION["lang"];
    ?>

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    57
    Grazie per l'aiuto quit.
    La funzione che ho trovato va bene, ma sono curioso, come posso memorizzare tutte le variabili in un array globale? Cioè come faresti tu?
    Inoltre, ho pensato anche io di utilizzare le sessioni, ma ho letto che ne penalizza l'indicizzazione, tu che dici?

    S.

  7. #7
    Con "memorizzare tutte le variabili in un array globale" intendevo semplicemente creare un array (ad esempio $langVars), dichiarato come globale e memorizzaci poi le variabili.
    Per quanto riguarda le sessioni, non mi risulta alcun problema (del resto non sono certo un esperto).
    Se vuoi, però, esiste anche un altro metodo:
    puoi creare un file di testo, in una cartella apposita, con, per nome, l'indirizzo ip dell'utente e, come contenuto, la variabile lang. In questo modo puoi rinunciare alle sessioni, anche se ti tocca realizzare un sistema decisamente più complesso e includere in ogni pagina lo script php corrispondente, che potrebbe essere così:
    Codice PHP:
    <?php
    if(!isset($dir))
    {
    //Imposto una directory di default nel caso non sia stata settata
    $dir "pathDellaDirectory/dir/";
    }
    //Controllo l'esistenza del file con l'ip dell'utente
    $ip $_SERVER['REMOTE_ADDR'];
    if(
    file_exists($dir.$ip.".txt"))
    {
    //Se il file esiste recupero il valore memorizzandolo in lang
    $lang file_get_contents($dir.$ip.".txt");
    }
    else
    {
    //Se il file non esiste controllo se dalla pagina è stata settata una variabile lang
    if(isset($lang))
    {
    //In tal caso la memorizzo nel nuovo file
    file_put_contents($dir.$ip.".txt"$lang);
    }
    else
    {
    //Se non è stata settata alcuna variabile $lang, ne creo una di default
    $lang "it"
    }
    }
    ?>
    In questo modo, nella pagina che imposta lang è sufficiente includere lo script DOPO il settaggio, mentre nelle pagine che usufruiscono di lang è sufficiente includere il file PRIMA della dichiarazione di lang.

    Non ho provato lo script ma dovrebbe andare.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    57
    Grazie Quit, alla fine ho optato per le sessioni. Non sono ancora riuscito a memorizzare tutte le variabili in GLOBALS, ma per ora mi faccio andar bene la funzione che ho trovato

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.