Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Sistema template e inclusione file php

    ciao a tutti, da giorni ho un problema e non riesco a venirne a capo.

    praticamente ho un file index.php strutturato cosi

    Codice PHP:
    $contents "styles/common/".getFilename()."_body.php";

    $page_content file_get_contents($contents);

    $page_content str_replace("{HEADER}",file_get_contents("styles/templates/header.tpl"),$page_content);

    $page_content str_replace("{ROOT}"ROOT,$page_content);

    $page_content str_replace("{SIDEBAR}"file_get_contents("styles/templates/sidebar.tpl"),$page_content);

    $page_content str_replace("{FOOTER}"file_get_contents("styles/templates/footer.tpl"),$page_content);

    echo 
    $page_content
    **getFilename è una funzione che mi restituisce il nome della pagina, in questo caso "index" senza estenzione.

    sempicemente se nel file c'è del codice (se non mi sbaglio si chiama mnemonico) tipo {header}, mi stampa il contenuto del file "header.tpl" e fin qui ci siamo, ma se vorrei inserire del codice php?

    si potrebbe fare? xkè se faccio file_get_contents su di un file php stampa a video le query

    Mi date un'aiutino plz?

  2. #2
    Se vuoi eseguire del codice PHP inserito nel template lo devi includere tramite http://www.php.net/include o http://www.php.net/require (etc.).

    Questo è una possibile soluzione:

    Codice PHP:
    <?php 
    ob_start
    ();
    include(
    'styles/templates/header.tpl');
    $header ob_get_clean();

    $page_content str_replace("{HEADER}"$header$page_content); 
    ?>
    Il problema è che cosi' hai un overhead inutile poichè esegui l'include anche quando il suo risultato non verrà utilizzato.

    In alternativa puoi:

    1. Effettuare un replace di {HEADER} (etc.) con codice PHP (es. <?php include('styles/templates/header.tpl'); ?>) e poi eseguire il contenuto di $page_content con http://www.php.net/eval

    2. Utilizzare http://www.php.net/preg_replace_callback per effettuare la sostituzione ed includere automaticamente il file richiesto dalla callback (sempre usando ob_start()/ob_get_clean()).

    P.S.
    Perchè non usi un template engine già pronto?

  3. #3
    Originariamente inviato da filippo.toso
    Se vuoi eseguire del codice PHP inserito nel template lo devi includere tramite http://www.php.net/include o http://www.php.net/require (etc.).

    Questo è una possibile soluzione:

    Codice PHP:
    <?php 
    ob_start
    ();
    include(
    'styles/templates/header.tpl');
    $header ob_get_clean();

    $page_content str_replace("{HEADER}"$header$page_content); 
    ?>
    Il problema è che cosi' hai un overhead inutile poichè esegui l'include anche quando il suo risultato non verrà utilizzato.

    In alternativa puoi:
    nc
    1. Effettuare un replace di {HEADER} (etc.) con codice PHP (es. <?php include('styles/templates/header.tpl'); ?>) e poi eseguire il contenuto di $page_content con http://www.php.net/eval

    2. Utilizzare http://www.php.net/preg_replace_callback per effettuare la sostituzione ed includere automaticamente il file richiesto dalla callback (sempre usando ob_start()/ob_get_clean()).

    P.S.
    Perchè non usi un template engine già pronto?
    Grazie mille fllippo, ho risolto con

    ob_start();
    include('styles/templates/header.tpl');
    $header = ob_get_clean();

    ma sono andato a leggere sul manuale e forse ho capito che, invece di restituire la parte "di stampa", restituisce il codice da elaborare vero e proprio in php. è cosi?


    Cmq ho provato ad usare smarty, ma anche se posso dire di non essere proprio un "novellino" nel php, non resco a capirlo, anche se ho letto molti tutorial...

  4. #4
    ma sono andato a leggere sul manuale e forse ho capito che, invece di restituire la parte "di stampa", restituisce il codice da elaborare vero e proprio in php. è cosi?
    No, restituisce il contenuto del file incluso gia' processato dal motore PHP.

  5. #5
    ho capito...

    ma vorrei farti un'ultima domanda: dopo "[B]$header = ob_get_clean();[B]" devo mettere "ob_end_clean();"?

    grazie ancora

  6. #6

  7. #7
    Hai ragione scusa

    comunque grazie ancora

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 © 2026 vBulletin Solutions, Inc. All rights reserved.