Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    11

    [PHP] Combinare Template e Multilingue

    Salve,

    Sto realizzando un template engine in un contesto multilanguage.

    Dispongo dei seguenti file:

    - home.php
    - home.html.tpl
    - languages/en.php
    - languages/it.php
    - configurazione.php
    - template.php


    Per il momento analizziamo la parte dedicata alle lingue:

    configurazione.php

    Codice PHP:
    <?php

    //Lingua di default
    $defaultlang "it";

    //Cartella dei file di lingua (relativa in base alla posizione del file di config)
    $langpath "languages";

    //Iniziamo ad avviare le sessioni (toglietelo se già le avete aperte)
    session_start();

    //Se esiste la variabile di sessione 'lingua'
    if (isset($_SESSION['lingua'])) { 
        
    //Se esiste il parametro WEB inviato tramite GET 'lang'
        
    if(isset($_GET['lang'])) {
            
    //Effettuiamo qualche aggiusto per eventuali hack...
            
    $_GET['lang'] = str_replace("/",""trim(strtolower($_GET['lang'])));
            
    //Se esiste il file di lingua corrispondente al parametro GET richiesto
            
    if (is_file($langpath."/".$_GET['lang'].".php")) {
                
    //Imposta la sessione 'lingua' con la lingua scelta
                
    $_SESSION['lingua'] = $_GET['lang'];
            
    //Altrimenti
            
    } else {
                
    //Imposta la sessione 'lingua' in quella di default
                
    $_SESSION['lingua'] = $defaultlang;
            }
        }
    //Altrimenti
    } else {
        
    //Imposta la sessione 'lingua' in quella di default
        
    $_SESSION['lingua'] = $defaultlang;
    }
    //Finalmente includiamo il file di lingua giusto
    include($langpath."/".$_SESSION['lingua'].".php");

    ?>
    languages/it.php

    Codice PHP:
    <?
    //Impostiamo data, ora e giorni della settimana, insomma tutto in italiano
    setlocale(LC_ALL"it_IT");

    //Iniziamo quindi con i contenuti in italiano del sito
    $trad['titolo'] = "BlaBlaBla";
    $trad['autore'] = "Bla....";
    ?>

    Ora il template:

    template.php

    Codice PHP:
    <?
    class sysTemplate
    {
      var 
    $template;

      function 
    sysTemplate($ts=array(),$cache='d_cache.txt',$sec=3600,$tpl='tpl.html')
      {
        if(!
    $this->template=$this->r($cache,$sec))
        {
          (@
    file_exists($tpl))?$this->template=@file_get_contents($tpl):die('
          Attenzione: Il file '
    .$tpl.' non è presente');
          
    $this->parserT($ts,$cache);
        }
      }

      function 
    parserT($ts,$cache)
      {
        if(@
    count($ts)>0)
        {
          foreach(
    $ts as $t=>$d)
          {
            
    $d=(@file_exists($d))?$this->getFile($d):$d;
            
    $this->template=@str_replace('{'.$t.'}',$d,$this->template);
          }
          
    $this->buildCache($cache,$this->template);
        }else{
          die(
    'Attenzione: impossibile eseguire il replace dei tags.');
        }
      }

      function 
    getFile($doc)
      {
        @
    ob_start();
        include(
    $doc);
        
    $contenuto=@ob_get_contents();
        @
    ob_end_clean();
        return 
    $contenuto;
      }

      function 
    buildCache($cache,$contenuto)
      {
        
    $f=@fopen($cache,'w');
        @
    fwrite($f,$contenuto);
        @
    fclose($f);
      }

      function 
    r($cache,$sec)
      {
        if(@
    file_exists($cache)&&@filemtime($cache)>(@time()-$sec))
        {
          return @
    file_get_contents($cache);
        }
        return 
    false;
      }
       
      function 
    show()
      {
        return 
    $this->template;
      }
    }
    ?>
    e i file:

    home.php

    Codice PHP:
    <?php

    //Recupero il valore di lang
    $lang $_GET['lang'];
    //Se la variabile lang è nulla viene selezionata di default
    //la lingua italiana (it)
    if ($lang == FALSE)
    {
        
    $lang "italiano";
    }

    //Includo il file di linguaggio interessato
    require("languages/{$lang}.php");
    includeLang('home');
    //Aggiungo dei link per cambiare la lingua
    echo "Scelta:
    "
    ;
    echo 
    "[url='" $_SERVER[']IT[/url] - ";
    echo "[url='" . 
    $_SERVER[']EN[/url]";



    @require_once(
    'template.php');

    $temp=&new sysTemplate($ts,'cache.txt',0,'home.tpl.html');
    echo 
    $temp->show();

    ?>
    e home.html.tpl

    Codice PHP:
    <html>
    <
    head>
    <
    title>{titolo}</title>
    <
    meta 
    http
    -equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <
    link rel="stylesheet" type="text/css" href="style.css" />
    </
    head>
    <
    head>
    <
    body>
    <
    div id="autore">{autore}</div>
    </
    body>
    </
    html

    Purtroppo per quanto riguarda le lingue sono riuscito a risolvere in questo modo.
    Ma nel momento in cui lo devo combinare con il template engine, ho dei problemi.

    Vorrei ottenere che la pagina HOME.PHP ricevi la lingua da languages/IT.PHP e il template da HOME.HTML.TPL e che in quest'ultimo io possa utilizzare il {titolo} estrapolandolo dal file di lingua:

    $trad['titolo'] = "BlaBlaBla";

    Mentre invece questa cosa non avviene.. E mi stampa sempre {titolo} cosi come è scritto senza leggere nulla dal file di lingua.

    Sono sicuro di aver sbagliato il template engine, e di non saperlo utilizzare per il mio scopo.
    Potreste aiutarmi a delucidare i miei dubbi e fare luce sui miei errori sia in pratica (aiuto con esempio di codice) sia in logica (dal momento in cui non costruisco un sito web, ma voglio studiare e imparare tutto su questi affascinanti linguaggi di programmazione )

    Grazie infinite per tutto coloro che si accingeranno a leggere e "capire" il mio problema (spiegato malissimo ^-^')

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    non conosco bene il template (che mi pare derivi da una classe proposta proprio nei forum), ma... "$ts" dov'è settato?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    11
    Allora il multilingue funziona, l'ho realizzato esattamente come desideravo.
    Il problema è che devo adattare il template, in modo tale che io i dati contenuti
    nel file IT.PHP:

    Codice PHP:
    $trad['titolo'] = "BlaBlaBla"
    $trad['autore'] = "Bla......."
    Mi consenta di utilizzare la seguente forma nel file HOME.HTML.TPL

    Codice PHP:
    <title>{titoto}</title>

    oppure

    Questo testo è scritto da 
    {autore

    Quindi l'unico file da modificare è TEMPLATE.PHP che deve essere riscritto totalmente, e riadattato per questa soluzione.

    Bisogna concentrarsi solo su questo risultato, devo prendere domestichezza con i template.
    Per questo ho bisogno del vostro aiuto =)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    11
    In sintesi, altrimenti non si capisce molto.

    Devo far in modo che da un file PHP, la seguente stringa:

    Codice PHP:
    $trad['titolo'] = "BlaBlaBla";  
    $trad['autore'] = "Bla......."
    Tramite template, mi consenta di visualizzare sul file HTML.TPL al posto di:

    Codice PHP:
    <title>{titoto}</title>  

    Questo testo è scritto da {autore
    Questo:

    Codice PHP:
    <title>BlaBlaBla</title>  

    Questo testo è scritto da Bla....... 
    Voglio ottenere questo dal mio template system. Qualche dritta? C=

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mah... da quel che ho visto basta che passi la variabile $trad come primo parametro (quindi al posto di "$ts")...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    11
    Mhm provo subito, grazie ^-^

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    11
    Mhm mi dice: Object

    Ho modificato template.php

    Codice PHP:
    <?
    class sysTemplate
    {
      var 
    $template;

      function 
    sysTemplate($trad=array(),$cache='d_cache.txt',$sec=3600,$tpl='tpl.html')
      {
        if(!
    $this->template=$this->r($cache,$sec))
        {
          (@
    file_exists($tpl))?$this->template=@file_get_contents($tpl):die('
          Attenzione: Il file '
    .$tpl.' non è presente');
          
    $this->parserT($trad,$cache);
        }
      }

      function 
    parserT($trad,$cache)
      {
        if(@
    count($trad)>0)
        {
          foreach(
    $trad as $t=>$d)
          {
            
    $d=(@file_exists($d))?$this->getFile($d):$d;
            
    $this->template=@str_replace('{'.$t.'}',$d,$this->template);
          }
          
    $this->buildCache($cache,$this->template);
        }else{
          die(
    'Attenzione: impossibile eseguire il replace dei tags.');
        }
      }

      function 
    getFile($doc)
      {
        @
    ob_start();
        include(
    $doc);
        
    $contenuto=@ob_get_contents();
        @
    ob_end_clean();
        return 
    $contenuto;
      }

      function 
    buildCache($cache,$contenuto)
      {
        
    $f=@fopen($cache,'w');
        @
    fwrite($f,$contenuto);
        @
    fclose($f);
      }

      function 
    r($cache,$sec)
      {
        if(@
    file_exists($cache)&&@filemtime($cache)>(@time()-$sec))
        {
          return @
    file_get_contents($cache);
        }
        return 
    false;
      }
       
      function 
    show()
      {
        return 
    $this->template;
      }
    }
    ?>
    e il file home.php

    Codice PHP:
    <?php

    //Recupero il valore di lang
    $lang $_GET['lang'];
    //Se la variabile lang è nulla viene selezionata di default
    //la lingua italiana (it)
    if ($lang == FALSE)
    {
        
    $lang "italiano";
    }

    //Includo il file di linguaggio interessato
    require("{$lang}/home.mo");

    //Aggiungo dei link per cambiare la lingua
    echo "Scegli lingua: 
    "
    ;
    echo 
    "[url='" $_SERVER[']IT[/url] - ";
    echo "[url='" . 
    $_SERVER[']EN[/url]";


    @require_once(
    'template.php');

    $temp=&new sysTemplate($trad,'cache.txt',86400,'home.tpl.html');

    echo 
    $temp;

    ?>

    Mi aiuti a sistemare la faccenda dell'array?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    11
    Mi sono riscritto tutto dal principio, e ho risolto tutto!

    Credo che il problema fosse uno smarrimento, visto che è un esercizio vecchio,
    ripreso attualmente. (avevo dimenticato dei settaggi che avevo predisposto.)

    Grazie infinite per il tuo aiuto! ^-*

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.