Visualizzazione risultati 1 fino 16 di 16

Discussione: [Separare PHP da HTML] Tag vari

  1. #1
    Guest

    Predefinito [Separare PHP da HTML] Tag vari

    Ciao a tutti,
    ho creato una mia classe "Template" con le sue relative funzioni, questa classe prende una pagina html, la spezza principalmente in due e sostituisce titolo, e altre varie cose, cosi che io possa stampare all'inizio e alla fine della pagina:
    Codice PHP:
    $template->header;
    //Contenuto
    $template->footer;
    in questo modo è piu facile modificare i template, perô, ho ancora un problema:
    ad esempio ho una funzione che mi crea un menu, prende i file da database e crea una variabile nella classe che contiene html, vorrei fare che php è compeltamente separato, possibile? che funzione dovei creare? dovrei fare un file tipo: box.html:
    Codice HTML:
    <div class="box">{ TESTO }</div>
    che viene presa da php e sostituiso ilt esto con il testo che voglioio per poi stampare? è una buona idea? cerco consigli...grazie...ciao!

  2. #2
    Guest

    Predefinito

    Si ma farselo da soli è un pò un suicidio.
    Io ti consiglio di usare smarty.

  3. #3
    Guest

    Predefinito

    bom, ho gia fatto quasi tutto, e se intendi quello che ho spiegato io non mi sembra tanto difficile da fare con qualche funzione... io chiedevo se è una buona idea o se ci sono metodi migliori..

  4. #4
    Guest

    Predefinito

    Il mezzo suicidio lo intendevo in termini di tempo, non che sia complesso farlo, se hai tempo da buttare beato te :P
    In ogni modo si è una buona idea. E' così che funzionano gli altri.

  5. #5
    Guest

    Predefinito

    pensavo di fare qualcosa del genere:
    <h{ H_TYPE }><a href="{ H_LINK }" alt="{ TITLE }">{ TITLE }</a></h{ H_TYPE }>
    <div class="box">{ TEXT }</div>
    poi creare una funzione tipo text_field() che mi converte e stampa il testo, cosi verrebbero stampati tanti articoli, ma nn so se è una buona soluzione perche dovrei fare anche molti altri file html del genere e nn sono certo che siano utilissimi...fatemi sapere...grazie...ciao!

  6. #6
    Guest

    Predefinito

    se nel codice php mantengo dei tag tipo <a> è una brutta cosa? nel senso che sarebbe preferibile fare qualcosa tipo:
    Codice HTML:
    <a href="{ LINK }" >{ NOME_LINK }</a>
    per tutti i tag? non so se sia giusto...perchè non so effettivamente che grande utilita possa dare al designer, deve cercarsi anche tutti i file a.html ecc
    e poi cmq io dovrei avere una funzione per ogni tag, es:
    Codice PHP:
    public function link($link,$testo) {
    }
    //ecc
    e infine dovrei anche concatenare le funzioni, tipo:
    Codice PHP:
    echo titolo(link('www.google.it','Google'));
    perpiacere datemi qualche dritta, nn so proprio quale via prendere....graziea tutti, ciaooo!

  7. #7
    Guest

    Predefinito

    Che vuol dire ' deve cercarsi anche tutti i file a.html'. La separazione dell'html dal php è fatta attraverso dei file .tpl dove c'è tutto il codice html, in linea di massima le pagine che generano output hanno una corrispondente pagina .tpl dove definire lo stile, poi stai al template engine interpretare il tpl.
    Ora non so come la stai implementando tu...

  8. #8
    Guest

    Predefinito

    io al posto di file tpl elaboro file html, cambia qualcosa? cosa sono esattamente i file.tpl? io dico, la struttura del sito è facile da elaborare, am mettiamo che estraggo dei dati da db e devo scriverli facccio una funzione che mi prende il file (esempio) box.html che sara qualcosa tipo:
    Codice HTML:
    <h1>{ TITOLO }</h1>
    <div class="testo>{ TESTO }</div>
    uso eregi_replace o str_replace e al posto dei { ... } metto i dati estratti...c'è quaqlcosa che spiega cosa cambia tra file.tpl e file.html nella gestione dei template?
    hai delle soluzione che ho appena esposto prima nell'esempio?

    ciao, grazie!

  9. #9
    Guest

    Predefinito

    L'estensione è indifferente ma di solito se io ho due pagine uguali index.php e index.html se vado a chiamare la root a meno che non specifico che a prevalere sono i file .php ti verrà richiamato l'html che nel tuo caso non è stato parsato dal template engine.

    Per evitare ambiguità si cambia estensione.

    In ogni modo continuo a non capire come hai strutturato la cosa.
    Sopra ti ho scritto che di solito in un file template (.tpl) viene inserita tutta la pagina non dei pezzi, la cosa che mi ha perplesso è il fatto che tu parli di pagine al plurale.

    Io ti consiglio di vederti come lavora phpBB con i template per farti un'idea, non so se lo hai mai fatto...

    hai delle soluzione che ho appena esposto prima nell'esempio?
    questa frase non l'ho capita.

  10. #10
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    ----------------
    BABBO NATALE URANIO
    ----------------

    Ti do il "template engine" che utilizzo attualmente.
    Non ho mai avuto il tempo di implementare una funzione di ciclo e quindi adesso che mi voglio cimentare in un nuovo progetto ho deciso di abbandonarlo per smarty.
    Il codice originale lo avevo letto su un forum di html.it, io l'ho messo in una classe e modificato un po.

    Codice PHP:

    <?
    class TEngine
    {
    var
    $FileTemplate;
    var
    $Valori;


    function
    TEngine($filename)
    {
    $this->FileTemplate=implode("",file($filename));
    }

    function
    AddValore($nome,$valore)
    {
    $this->Valori[$nome] = $valore;
    }

    function
    Elabora()
    {

    return
    $this->SostituisciValori($this->Valori);
    unset(
    $this->Valori);
    }

    function
    SostituisciValori($valori)
    {
    return
    preg_replace('/(<!-- )\$(\w+)( -->)/e',"\$valori[$2]",$this->FileTemplate);
    }

    }
    ?>

    Il funzionamento è abbastanza semplice

    Codice PHP:
    $Engine = new TEngine(PATH_TEMPLATE."blog.html");

    $Engine->AddValore('TITOLO',"il titolo");
    $Engine->AddValore('NOMEUTENTE',"Ciccio");

    $Engine->Elabora();
    Il template(html è il file che vuoi) lo scrivi così:
    Codice PHP:
    Questo è un titolo: <!-- $SEZIONE -->
    questo è l'utente: <!-- $NOMEUTENTE -->
    Il vantaggio di scriverli così è che il template lo puoi visualizzare direttamente da browser dato che i campi vengono visti come commenti.

    Il problema è che non supporta i loop e io non amo le espressioni regolari quindi non ho voglia di implementarlo.
    Passerò a Smarty, con molte operazioni che non mi servono, ma non si può avere tutto dalla vita.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  11. #11
    Guest

    Predefinito

    Codice PHP:
    class myTemplate extends myUser {

    //Variabili

    # Class Construct
    public function __construct($mc,$request_uri) {

    $this->set_category($mc);
    $this->set_request_uri($request_uri);

    $template = file_get_contents('themes/'.$this->theme_path.'/framework.htm');
    $template = $this->element_replace($template);
    $template = explode('{ PAGE_CONTENT }',$template);

    $this->header = $template[0];
    $this->footer = $template[1];

    }

    # Replace Element
    public function element_replace($element) {

    $id_element = array(
    '{ TITLE }',
    '{ THEME_PATH }',
    '{ CATEGORY_MENU }',
    '{ REQUEST_URI }'
    );

    $id_language = array(
    '{ LNG_LOGIN }',
    '{ LNG_USERNAME }',
    '{ LNG_PASSWORD }',
    '{ LNG_REMEMBER }'
    );

    $re_element = array(
    $this->title,
    $this->theme_path,
    $this->category_menu,
    $this->request_uri
    );

    include
    'include/languages/'.$this->language_path.'.php';

    $pattern = array_merge($id_element,$id_language);
    $replace = array_merge($re_element,$re_language);

    return
    str_replace($pattern,$replace,$element);

    }

    // Altre funzioni per sostiruire i box di testo ecc

    }
    Ciao, io ho fatto qualcosa del genere, però mi sembra molto complicata rispetto alla tua...puoi darmi qualche consiglio?

  12. #12
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Non esiste un modo giusto di fare le cose, ma un modo migliore o peggiore.

    "class myTemplate extends myUser"
    A meno che i nomi delle classi sia sbagliati non ha senso, il template non deve estendere un utente.

    La tua classe myTemplate poi non è tanto un template engine, ma una "vista", cioè devi creare una classe con il solo compito da fare da engine stupido (tipo la mia), e poi una classe vista che lo utilizzi, caricando un template rispeto ad un altro in base alla sezione ad esempio.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  13. #13
    Guest

    Predefinito

    sisi, ma era perche doveo usare deelle variabili di myuser, è possibile creare l'oggetto all'inizio della classe? nn sos e mi hai capito.. cmq quello che ho postato prima è come aqvevo pensato io di farlo, è migliore o peggiore? dovre potrei migliorarlo? anche perche per il menu categorie faccio un'altra funzione che salva il codice in menu_category e poi lo sotituisco in element_replace... essendo nella mia situazione, per avere dei blocchi di codice separati, cosa faresti? io penso di fare più funzioni come gia detto prima, ad esempio text_field che prende il file text_field.htm e mi sostitusice il titolo e il testo, per poi stamplarlo...grazie dell aiuto!!! ciaooo..

  14. #14
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Per usare le variabili di myuser basta che le rendi pubbliche o MEGLIO fai delle proprietà che restituiscano il loro valore.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  15. #15
    Guest

    Predefinito

    sisi, ma dovrei creare un nuovo oggetto all'interno della classe User no?

  16. #16
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Forse ho capito male, ma mettiamo che una un template che deve usare la classe user:

    Codice PHP:
    //scrivo in pseudocodice
    class User
    {
    private
    $Nick

    public function GetNick(){
    return
    $this->Nick;
    }
    }
    Il template lo fare così:
    Codice PHP:
    class Template
    {

    public function
    __costruttore($User){
    $nick = $User->GetNick();
    //e a quersto putno ho la variabile che mi seriva
    }
    }


    //li utilizzi così
    $User = new User();
    $User->Login($username,$Password);

    $Template = new Template($User);
    $Template->PrintOut();
    Ultima modifica di binarysun : 24-04-2009 alle ore 09.50.14
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

Regole di scrittura

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