2009-02-06 8 views
8

Chiunque ha funzionato in questo problema ...Zend Framework: headTitle() -> append() problema

Nel mio layout.phtml ho:

<head> 
    <?= $this->headTitle('Control Application - ') ?> 
</head> 

poi nel index.phtml devo :

<? $this->headTitle()->append('Client List'); ?> 

mi aspetto che, quando vado a mia azione index, il titolo dovrebbe essere 'Application Control - client List', ma invece ho 'ListControl applicazioni client -'

Cosa sta succedendo? Come posso risolvere questo?

risposta

22

Il comportamento predefinito di headTitle() deve essere aggiunto allo stack. Prima di chiamare headTitle() in layout.phtml, il vostro stack è:

Clientlist

Poi, vi invito headTitle con il primo argomento e non secondo argomento (which makes it default to APPEND), con conseguente il seguente stack:

ClientListControl Applicazione -

Il soluzione, in layout.phtml:

<?php 
    $this->headTitle()->prepend('Control Application -'); 
    echo $this->headTitle(); 
?> 
+0

Per favore, in ZendFramework 2.0? (hai dato esempio, questo non funziona) – YumYumYum

2

Io in realtà non utilizzare headTitle, ma non usare ZF, e ho avuto un rapido sguardo sulla mailing list, questo potrebbe risolvere il problema:

<head> 
    <?= $this->headTitle('Control Application') ?> 
</head> 

Poi:

<?php 
$this->headTitle()->setSeparator(' - '); 
$this->headTitle()->prepend('Client List'); 
?> 
+0

in questo modo risulta in "Elenco client - Applicazione di controllo" invece di "Applicazione di controllo - Elenco client". – Andrew

+0

OH, oops.Beh, questo dovrebbe essere risolto usando "ante" anziché "append" (ho aggiornato la mia risposta), ma l'hai già in un'altra risposta, quindi non importa :-). –

6

Inoltre, è possibile utilizzare il metodo setPrefix nel layout in quanto tale:

<head> 
    <?= $this->headTitle()->setPrefix('Control Application') ?> 
</head> 

e nelle vostre controllori/azioni/etc utilizzare l'accodamento/Anteponi di serie :

0

Ciò accade perché il layout è l'ultimo script da eseguire. Quindi in realtà fai l'append PRIMA dell'insieme del titolo, in modo che non ci sia ancora nulla da aggiungere. Impostare il titolo principale (Applicazione di controllo) in un controller. Ad esempio, lo faccio sempre nell'azione predispatch di un initPlugin in modo che sia eseguito prima di qualsiasi altra azione del controller e posso aggiungerlo o aggiungerlo a piacimento.

Per utilizzare un plugin basta definire una nuova classe che estende Zend_Controller_Plugin_Abstract e definire una funzione preDispatch (Zend_Controller_Request_Abstract $ richiesta) dove si può mettere tutto il vostro codice comune-to-the-tutta-site, e per iscriversi il plugin lo inserisce nel controllerFront del tuo bootstrap: $ controller-> registerPlugin (new InitPlugin());