2015-05-11 11 views
9

sostanzialmente in default.ctp ho questo per il mio titolo:

<title> 
    <?= $this->fetch('title') ?> 
</title> 

E all'interno del controller ho questa linea:

$this->set('title', 'Test-Title'); 

Ma non fa nulla, visualizza ancora il nome controllori (Lavoro, controllori nome completo os JobsController.ctp)

Ma se metto questo all'interno del mio file vista:

$this->assign('title', 'Test-Title'); 

Cambia il titolo. Quindi cosa c'è di sbagliato con $ this-> set ('title', $ title) ?

risposta

11

Si può solo set() la variabile nel controller:

// View or Controller 
$this->set('title', 'Test-title'); 

quindi utilizzarlo come una variabile standard è nel layout o vista:

<!-- Layout or View --> 
<title> 
    <?php echo $title; ?> 
</title> 

dettagli qui: http://book.cakephp.org/3.0/en/views.html#setting-view-variables

Utilizzare è diverso, motivo per cui funziona con fetch(). assign() viene utilizzato con Visualizza blocchi: http://book.cakephp.org/3.0/en/views.html#using-view-blocks

+0

Sì, lo so che posso fare questo all'interno della vista, ma voglio farlo all'interno del controller, si dovrebbe lavorare all'interno del controllore pure, ma non – Tachi

+0

Lo stesso vale per controller - non usare 'fetch()', basta usarlo. – Dave

17

fetch() restituisce il contenuto di un blocco non una variabile. Utilizzando set() nel controller è l'impostazione di una variabile che possono essere emesse a suo avviso modelli facendo echeggiare la variabile: -

<?php echo $title; ?> 

Se si desidera utilizzare fetch() è necessario utilizzare in combinazione con assign() nella vista modelli per definire il blocco. Ad esempio nella tua View uso modello: -

<?php $this->assign('title', $title); ?> 

E poi nel modello di layout: -

<title><?php echo $this->fetch('title'); ?></title> 

In CakePHP 3 l'idea è di impostare il titolo della pagina assegnando nella vista come si riferisce al rendering della pagina. Ciò differisce dal modo in cui questo è stato originariamente gestito in CakePHP 2 in cui definisci title_for_layout nel controller e quindi echo la variabile $title_for_layout nel modello di layout (questo è stato deprecato a favore dell'approccio di CakePHP 3 nelle versioni successive di Cake 2).

+1

Nota a margine, il valore di blocco predefinito 'title' è assegnato in [**' Cake \ View \ View :: renderLayout() '**] (http://api.cakephp.org/3.0/source-class-Cake .View.View.html # 477-513), è derivato dal valore 'View :: $ viewPath'. – ndm

+0

l'assegnazione funziona secondo necessità, grazie – mewc

0

Solo per il completamento, mi sono imbattuto in una situazione in cui un .js sceneggiatura non valido di variabili indefinite riferimento tra <head></head> provocato la <title></title> tag di essere inviati ad DOM (mostrato nel sorgente della pagina), ma Chrome, Firefox e (dalla memoria) MSIEall non è riuscito a recapitare il contenuto del titolo all'interfaccia utente APP, nuovamente dalla memoria - mobile iOS non è stato modificato.

0

Se si vuole attaccare al vostro codice, dopo aver impostato "titolo" variabile semplicemente scrivere questo:

<?= __('Main Project Name') ?> 
    <?php if(isset($title)) $this->assign('title', $title); ?> 
    <?= ' - ' . $this->fetch('title') ?> 
0

ho fatto questo, in questo modo in default.ctp

<?php 
    $cakeDescription = __d('cake_dev', 'Your Title'); 
?> 

<title> 
    <?php echo $cakeDescription ?>: <?php echo $title_for_layout; ?> 
</title> 

Nel mio file vista , L'ho fatto.

<?php $this->assign('title', 'Your Title');?>