Visualizzazione risultati 1 fino 7 di 7

Discussione: [PHP] Loop e Template Engine

  1. #1
    Guest

    Predefinito [PHP] Loop e Template Engine

    Ciao a tutti!
    Ho un problema nel gestire un loop che recupera i dati con la classe per il template engine.
    In pratica invece di vedere tutti i risultati visualizzo solo l'ultimo.

    La classe del template engine è questa:

    Codice PHP:
    <?php
    error_reporting
    (E_ALL);

    class
    Pagina {
    private
    $page;
    public function
    __construct($file) {
    $this->page = file_get_contents($file);
    }

    public function
    assegna($vars) {
    if(
    is_array($vars)) {
    foreach(
    $vars as $key => $value) {
    if(
    preg_match_all("/\{([a-zA-Z0-9\-\.\_]*?)\}/", $value, $regs)) {
    foreach(
    $regs[0] as $reg) {
    $reg = str_replace(array("{", "}"), "", $reg);
    $vars[$key] = str_replace("{" . $reg . "}", $vars[$reg], $vars[$key]);
    }
    }
    $this->page = str_replace("{" . $key . "}", $value, $this->page);

    }
    }
    }

    public function
    stampa() {
    return
    $this->page;
    }
    }
    ?>
    E io la vado ad utilizzare così:

    Codice PHP:
    <?php
    require("./template/engine.inc.php");

    $glob = glob("./data/articolo_*.xml");
    $body = new Pagina("./template/body.tpl");
    $vars = array();
    $body_cont = null;

    for(
    $i = count($glob) - 1; $i >= 0; $i--) {
    $xml = simplexml_load_file($glob[$i]);

    foreach(
    $xml->articolo as $articolo) {
    $data = date("d/m/y", intval($articolo->data));
    $tags = str_replace("-", " ", $articolo->tags);
    $vars = array(
    "a-id" => $articolo["id"],
    "a-titolo" => $articolo->titolo,
    "a-autore" => $articolo->autore,
    "a-data" => $data,
    "a-testo" => $articolo->testo,
    "a-tags" => $tags
    );
    $body->assegna($vars);
    $body_cont .= $body->stampa();
    }
    }

    echo
    $body_cont;
    ?>
    Putroppo stampa tutti gli articoli identici all'ultimo estratto.
    Non riesco a capire dove sbaglio :S

  2. #2
    Guest

    Predefinito

    Codice PHP:
    public function assegna($vars) {
    if(
    is_array($vars)) {
    foreach(
    $vars as $key => $value) {
    if(
    preg_match_all("/\{([a-zA-Z0-9\-\.\_]*?)\}/", $value, $regs)) {
    foreach(
    $regs[0] as $reg) {
    $reg = str_replace(array("{", "}"), "", $reg);
    $vars[$key] = str_replace("{" . $reg . "}", $vars[$reg], $vars[$key]);
    }
    }
    $this->page = str_replace("{" . $key . "}", $value, $this->page);

    }
    }
    }
    la riga interessata è
    Codice PHP:
    $this->page = str_replace("{" . $key . "}", $value, $this->page);
    questa si trova dentro ad un foreach, ad ogni ciclo 'riassegni' quella variabile con il nuovo contenuto perdendoti quello che avevi prima.


    Comunque ce ne sono parecchi di template engine in giro, non so quanto ti conviene costruirtene uno da solo.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da stoner Visualizza messaggio
    Comunque ce ne sono parecchi di template engine in giro, non so quanto ti conviene costruirtene uno da solo.
    Io preferisco costruirmi il sito con le mie mani.

  4. #4
    Guest

    Predefinito

    Un conto è farsi un sito, un conto è farsi il template engine. Quando metti in cantiere un progetto non riscrivi ogni cosa da capo, ci sono tanti aspetti da valutare.

    Se poi la cosa è a scopo educativo/studio allora si, può provare a farselo da se.

  5. #5
    Guest

    Predefinito

    In effetti stavo pensando si usare o smarty o raintpl.
    Ma non so quale dei 2 scegliere.
    Di risolvere ho risolto in un altro modo, cioè ho creato un altro file tpl e dopo l'ho inserito in body.tpl (altrimenti mi stampava il menu per quanti articoli estraeva )

  6. #6
    Guest

    Predefinito

    Mi rifaccio avanti consigliandoti quello di phpbb2. Ieri sono riuscito a completarlo integrando la funzione include e le condizioni.

    E' completo ed ottimo per tutto, ha i cicli molto facili da utilizzare, con rainTPL non sempr eli puoi utilizzare.

    Basta mettersi un pò e capire come funziona il resto, sarà abbastanza facile poi farsi le cose.

  7. #7
    Guest

    Predefinito

    Credo che userò anche io quello di phpbb2, ho trovato anche una piccola guida sul sito ufficiale.

    Per recuperare il codice credo userò quello che hai postato in una tua vecchia discussione !

    Grazie e saluti!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •