viewRenderer-> setScriptAction

ciao ragazzi...

quando scrivo  un controller che si chiama ad esempio IndexController attraverso la seguente istruzione

$this->_helper->viewRenderer->setScriptAction('layout');  

mi carica il file layout.phtml che in teoria deve essere presente nella cartella views/scripts/  (anzichè il file index.phtml)

io invece vorrei creare un unico template layout.phtml  e che quindi fosse posizionato in  views/scripts/layout.phtml poichè questo file sarà uguale a tutti i controller e quindi volevo sapere come posso fare caricare, tramite l'istruzione precedente, il template all'esterno della cartella relativa al controller

spero di essermi spiegato bene

inviato 7 anni fa
Toto007
X 0 X

cercando meglio ho trovato questa mezza soluzione che cmq deve essere completata

sto cercando di capire come utilizzare la tecnica del  " Two Step View  " per il layout... e ho fatto così

(ps. il codice con cui ho lavorato è quello del tutorial)

nel file di bootstrap  index.php ho aggiunto questo stringa

Zend_Layout::startMvc(array('layoutPath'=> 'views/layouts'));  (la sintassi però mi è poco chiara...)

impostando così la cartella del layout e caricando il file layout.phtml

poi nel indexController ho caricato il view di default index.phtml e dentro questo file ho ho messo l'istruzione

$this->layout()->content (anche la sintassi di questa istruzione non è tanto chiara) , caricandomi così il file layout.phtml.

il problema è il seguente

1)vorrei che il layout mi venga caricato direttamente senza dover passare tramite la view di default del controller (perchè in realtà ci passerà dopo aver caricato il layout...e non prima)

risposto 7 anni fa
Toto007
X 0 X

alleluia... alla fine ciò capito qualcosa  ^-^. Riassumendo lo scopo mio era quello di impostare un template fisso per tutte le pagine e mostrare le view dei controller all'interno di esso.

bisogna per prima cosa definire il layout (all'interno del bootstrap) che sarà valido per tutte le view dei  controller, tramite queste 2 istruzioni:

$options= array( 'layout' => 'main', 'layoutPath'=>'views/layouts','contentKey'=>'content');
/*
  - il primo parametro serve ad indicare che il layout da caricare è il file main.phtml
  - il secondo paramentro indica che il file main.phtml si trova all'interno della cartella views/layouts
  - il terzo parametro , che vedremo piu avanti, serve a indicare come si chiama la variabile in cui dovrà inserire 
        il template delle varie view dei controller
*/

//attiva il layout che sarà gestito in automatico da ora in avanti
Zend_Layout::startMvc($options);

a questo punto creiamo il nostro layout main.phtml (all'interno del path che abbiamo specificato prima)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title> QUesta e' una prova</title>

  </link></head>
  <body>
   
   <?php echo $this->layout()->content;?>
  </body>
</html>

finito :)

in maniera automatica senza specificare nessuna istruzione nei controller , le view saranno caricate all'interno di questo layout , sostituendo la variabile $this->layout()->content

risposto 7 anni fa
Toto007
modificato 7 anni fa
X 0 X

Mi hai preceduto di un soffio...

Comunque si, la soluzione che hai scritto è quella corretta. Ti segnalo solamente che i dati che inserisci nell'array $options non sono obbligatori ma servono a modificare quelle che sono le impostazioni di default.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

l'allievo supera il maestro  :D

peccato però che ciò perso una nottata per capirlo  :buck:

risposto 7 anni fa
Toto007
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda