Come posso impostare il title_for_layout nel PagesController default?
-
26-09-2019 - |
Domanda
Non posso set title_for_layout
nel PagesController che viene fornito di default con CakePHP 1.3.
Sto usando il seguente codice nella funzione di visualizzazione:
$this->set('title_for_layout','some title');
Che cosa sto facendo di sbagliato?
Soluzione
Nel vostro controller, il valore corrispondente è $this->pageTitle
.
Aggiorna
Ops, come notato nei commenti, questa è la soluzione 1.2. 1.3 possibilità (dopo aver fatto qualche ricerca) includono:
- Garantire che
$title_for_layout
è echeggiato nel layout - Posizionamento del codice
$this->set()
nella vista piuttosto che nel controllore
Altri suggerimenti
Se vuoi per simulare il comportamento di torta 1.2, è possibile effettuare le seguenti operazioni:
Nel vostro app_controller, creare il seguente metodo:
in app / app_controller.php (potrebbe essere necessario creare questo file se non l'hai già)
public $pageTitle;
public function beforeRender() {
$this->set('title_for_layout', $this->pageTitle);
}
Poi, in uno dei tuoi metodi d'azione, è possibile quindi utilizzare il pageTitle come si farebbe in 1.2.
public function index() {
$this->pageTitle = 'Some Title';
}
Il BeforeRender () metodo sarà chiamato dopo i controller ha elaborazione finito, ma prima che il layout in fase di rendering, che consente quindi di variabili fissati per il layout.
Nel metodo di azione, provate questo:
function index()
{
$this->pageTitle= 'Your Title';
}
Ho pensato di aggiungere a qualsiasi nuove persone a trovare questa soluzione, si può fare $this->set('title', $title);
in CakePHP 1.3 all'interno del controller e il titolo sarà reso automaticamente.
È possibile utilizzare:
$this->assign('title', 'Some title');
e in CTP:
<title><?= $this->fetch('title'); ?></title>
Si lavora in CakePHP 3.0
Per CakePHP 3.x,
è possibile seguire il consiglio qui
In sostanza,
All'interno UsersController.php
:
$this->set('title', 'Login');
All'interno src/Template/Layouts/default.ctp
sopra il $this->fetch('title');
scrittura:
if (isset($title)) {
$this->assign('title', $title);
}
Usa beforeRender()
invece. Inserire il seguente nel AppController:
class AppController extends Controller {
var $content;
function beforeRender() {
$this->set('content',$this->content);
}
}
E nel controllore, si può solo fare:
function index() {
$this->content['title'] = '123'; }
Basta così il trucco.