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

    da classe salvare il phtml e renderizzarlo

    Salve,
    vorrei salvare il layout di una pagina e cambiare il contenuto centrale in base all'azione svolta dall'utente, cioè ho ad esempio il mio file phtml di questo tipo:
    codice:
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      </head>
      <body>
        <h1>MAHS CMS - Public</h1>
        <?php 
          echo $this->layout()->content;
        ?>
      </body>
    </html>
    In pratica all'interno di una classe "View" salvo questo layout, poi chiamo il mio controller che mi genera il contenuto della pagina e lo impagina mediante un altro file phtml relativo al controller scelto (quindi in base all'azione svolta dall'utente), lo salvo nella variabile content e poi stampo tutto (dovrebbe essere la filosofia dello zend framework, ma è una cosa molto, molto più piccola).... è fattibile? Ho cercato di studiare lo ZF, ma è veramente troppo complesso ed arghigogolato per capire come faccia!
    Avete qualche idea?

    Grazie in anticipo
    Marco
    warcomeb - IL LEADER O.O.O.

  2. #2
    guarda se non erro è una cosa del genere l'idea di base:

    Codice PHP:

    class View{

    public 
    $miavariabile "World!";

    public function 
    render(){

        
    ob_implicit_flush(false);
        
    ob_start();
        include 
    "my_view.tmpl";
        
    $output ob_get_contents();
        
    ob_end_clean();

        return 
    $output//or just echo $output
    }

    e il tuo template sarà:

    Codice PHP:

    <h1>Hello <?php echo $this->miavariabile?></h1>


    questo è il sistema di base


    EDIT: ovviamente puoi estendere l'idea usando un template per il layout e un template per ogni view specifica per le actions dei controller. Insomma ci siamo capiti immagino.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Intanto ti ringrazio... non sapevo dell'esistenza di queste funzioni! Le provo subito e vedo quello che mi viene fuori!!!

    Grazie
    Marco
    warcomeb - IL LEADER O.O.O.

  4. #4
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    guarda se non erro è una cosa del genere l'idea di base:

    EDIT: ovviamente puoi estendere l'idea usando un template per il layout e un template per ogni view specifica per le actions dei controller. Insomma ci siamo capiti immagino.
    Ci sto ragionando da un bel pò, ma non riesco proprio a capire come fare a usare un template per il layout e uno per ogni singolo view!! Qualche indizio?

    Grazie
    Marco
    warcomeb - IL LEADER O.O.O.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Ma utilizzare dei controlli if?
    if (IS_ADMIN)
    print_this();
    elseif (IS_USER)
    print_other();
    ...

    Cioè salvare l'output e modificarlo mi sembra...
    ...stupido...
    ...si può fare ma non ha molto senso...

    ob_start();
    include
    "my_view.tmpl";
    $output = ob_get_contents();
    ob_end_clean();

    if (IS_USER)
    $output = str_replace("questo", "quest'altro", $output);

    echo $output;

  6. #6
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    Ma utilizzare dei controlli if?
    if (IS_ADMIN)
    print_this();
    elseif (IS_USER)
    print_other();
    ...

    Cioè salvare l'output e modificarlo mi sembra...
    ...stupido...
    ...si può fare ma non ha molto senso...

    ob_start();
    include
    "my_view.tmpl";
    $output = ob_get_contents();
    ob_end_clean();

    if (IS_USER)
    $output = str_replace("questo", "quest'altro", $output);

    echo $output;

    Mi sono espresso male... quello che volevo dire era: vorrei aggiungere un layout generico per la pagina, all'interno di questo aggiungere una variabile (magari chiamata body) che stampa il contenuto della parte centrale della pagina alla pagina richiesta!
    warcomeb - IL LEADER O.O.O.

  7. #7
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    Ma utilizzare dei controlli if?
    if (IS_ADMIN)
    print_this();
    elseif (IS_USER)
    print_other();
    ...

    Cioè salvare l'output e modificarlo mi sembra...
    ...stupido...
    ...si può fare ma non ha molto senso...

    ob_start();
    include
    "my_view.tmpl";
    $output = ob_get_contents();
    ob_end_clean();

    if (IS_USER)
    $output = str_replace("questo", "quest'altro", $output);

    echo $output;
    Mi sono espresso male! Quello che intendevo dire era: vorrei caricare un layout per tutte le pagine, all'interno del layout aggiungere una variabile (magari chiamata body) che carica il contenuto da un altro file scelto in base alla pagina richiesta!

    Spero di essermi spiegato meglio!
    warcomeb - IL LEADER O.O.O.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    allora l'esempio di @Santino83_02 è perfetto...

    Prova tu stesso a fare una prova con dei file generici creati appositamente per capire esattamente l'effetto di queste istruzioni e riutilizzarle nel tuo sito:

    <?php
    ob_start();
    include
    "page1.tpl";
    $output1 = ob_get_contents();
    ob_end_clean();


    ob_start();
    include
    "page2.tpl";
    $output2 = ob_get_contents();
    ob_end_clean();


    ob_start();
    include
    "page3.tpl";
    $output3 = ob_get_contents();
    ob_end_clean();


    echo $output1 . $output2 . $output3;
    ?>

  9. #9
    Per avere un layout di base e uno per ogni view, basta che fai un layout di base del tipo:

    codice:
    <html>
    <head></head>
    <body>
    <?php echo $content_view; ?>
    </body>
    </html>
    e quindi fai due render (vedi mia prima risposta), la prima renderizzando la view da sola e salvando il risultato nella variabile $content_view, la seconda renderizzando il layout dando visibilità a quella variabile.

    Cmq questo è un modo abbastanza grossolano, ci sono addirittura framework per gestire queste cose con un controllo molto maggiore
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.