Wie kann ich die title_for_layout im Standard PagesController gesetzt?
-
26-09-2019 - |
Frage
Ich kann nicht Set title_for_layout
im PagesController, die mit CakePHP 1.3 standardmäßig kommt.
Ich verwende den folgenden Code in der Anzeigefunktion:
$this->set('title_for_layout','some title');
Was mache ich falsch?
Lösung
In Ihrem Controller, der entsprechende Wert ist $this->pageTitle
.
UPDATE
Oops, wie in den Kommentaren erwähnt, ist dies die 1,2 Lösung. 1.3 Möglichkeiten (nach einiger Forschung) schließen ein:
- , dass
$title_for_layout
Gewährleistung wird im Layout Echo
- Platzieren des
$this->set()
Code in der Ansicht, anstatt in der Steuerung
Andere Tipps
Wenn Sie 1.2 zu imitieren das Verhalten des Kuchens erhalten möchten, können Sie Folgendes tun:
In Ihrem app_controller, erstellen Sie die folgende Methode:
in app / app_controller.php (Sie benötigen diese Datei zu erstellen, wenn Sie nicht bereits haben)
public $pageTitle;
public function beforeRender() {
$this->set('title_for_layout', $this->pageTitle);
}
Dann in einem Aktionsmethoden, können Sie dann mit den aktuellen Seitentitel, wie Sie es in 1.2.
public function index() {
$this->pageTitle = 'Some Title';
}
Die Before () -Methode aufgerufen wird, nachdem Ihre Controller fertige Verarbeitung, aber vor dem Layout gemacht zu werden, so dass Sie auf Setvariablen für das Layout ermöglicht.
In der Aktionsmethode, versuchen Sie dies:
function index()
{
$this->pageTitle= 'Your Title';
}
Ich dachte, ich auf neue Leute hinzufügen würde diese Lösung zu finden, Sie $this->set('title', $title);
in CakePHP 1.3 in der Steuerung und der Titel automatisch gerendert wird tun können.
Sie können mit:
$this->assign('title', 'Some title');
und in CtP:
<title><?= $this->fetch('title'); ?></title>
Es funktioniert in CakePHP 3.0
Für CakePHP 3.x,
können Sie den Rat hier
folgenIm Wesentlichen
Innerhalb UsersController.php
:
$this->set('title', 'Login');
Innerhalb src/Template/Layouts/default.ctp
über den $this->fetch('title');
write:
if (isset($title)) {
$this->assign('title', $title);
}
Verwenden beforeRender()
statt. Legen Sie die folgenden in AppController:
class AppController extends Controller {
var $content;
function beforeRender() {
$this->set('content',$this->content);
}
}
Und in der Steuerung, können Sie einfach tun:
function index() {
$this->content['title'] = '123'; }
Das wird den Trick.