Comment puis-je régler la title_for_layout dans le PagesController par défaut?
-
26-09-2019 - |
Question
Je ne peux pas définir title_for_layout
dans le PagesController qui vient par défaut avec CakePHP 1.3.
Je suis en utilisant le code suivant dans la fonction d'affichage:
$this->set('title_for_layout','some title');
Qu'est-ce que je fais mal?
La solution
Dans votre contrôleur, la valeur correspondante est $this->pageTitle
.
UPDATE
Oops, comme il est indiqué dans les commentaires, c'est la solution 1.2. 1.3 possibilités (après avoir fait quelques recherches) comprennent:
- Veiller à ce que
$title_for_layout
est reprise dans la mise en page - Mise en place du code
$this->set()
dans la vue plutôt que dans le contrôleur
Autres conseils
Si vous souhaitez imiter le comportement de gâteau 1.2, vous pouvez faire ce qui suit:
Dans votre app_controller, créez la méthode suivante:
app / app_controller.php (vous devrez peut-être créer ce fichier si vous avez pas déjà)
public $pageTitle;
public function beforeRender() {
$this->set('title_for_layout', $this->pageTitle);
}
Ensuite, dans l'une de vos méthodes d'action, vous pouvez alors utiliser le pageTitle comme vous le feriez dans 1.2.
public function index() {
$this->pageTitle = 'Some Title';
}
La méthode beforeRender () sera appelé après vos contrôleurs ont terminé le traitement, mais avant la mise en page étant rendu, vous permettant ainsi de variables définies pour la mise en page.
Dans la méthode d'action, essayez ceci:
function index()
{
$this->pageTitle= 'Your Title';
}
Juste pensé que j'ajouter à tout nouveau les gens à trouver cette solution, vous pouvez le faire $this->set('title', $title);
dans CakePHP 1.3 à l'intérieur du contrôleur et le titre sera rendu automatiquement.
Vous pouvez utiliser:
$this->assign('title', 'Some title');
et ctp:
<title><?= $this->fetch('title'); ?></title>
Il fonctionne dans CakePHP 3.0
Utilisez beforeRender()
à la place. Mettez ce qui suit dans AppController:
class AppController extends Controller {
var $content;
function beforeRender() {
$this->set('content',$this->content);
}
}
Et dans le contrôleur, vous pouvez simplement faire:
function index() {
$this->content['title'] = '123'; }
Ça va faire l'affaire.