Я не могу установить title_for_layout
в PagesController, который по умолчанию поставляется с CakePHP 1.3.
Я использую следующий код в функции отображения:
$this->set('title_for_layout','some title');
Что я делаю не так?
Я не могу установить title_for_layout
в PagesController, который по умолчанию поставляется с CakePHP 1.3.
Я использую следующий код в функции отображения:
$this->set('title_for_layout','some title');
Что я делаю не так?
В вашем контроллере соответствующее значение равно $this->pageTitle
.
ОБНОВЛЕНИЕ
К сожалению, как отмечено в комментариях, это решение 1.2. 1.3 возможности (после проведения некоторых исследований) включают в себя:
$title_for_layout
отображалось в макете$this->set()
в представлении, а не в контроллере$title_for_layout
в своем фактическом макете? например <title><?php echo $title_for_layout; ?></title>
?
- person Rob Wilkerson; 13.04.2010
Если вы хотите имитировать поведение торта 1.2, вы можете сделать следующее:
В вашем app_controller создайте следующий метод:
в app/app_controller.php (вам может понадобиться создать этот файл, если вы еще этого не сделали)
public $pageTitle;
public function beforeRender() {
$this->set('title_for_layout', $this->pageTitle);
}
Затем в любом из ваших методов действий вы можете использовать pageTitle, как в версии 1.2.
public function index() {
$this->pageTitle = 'Some Title';
}
Метод beforeRender() будет вызываться после того, как ваши контроллеры закончат обработку, но до рендеринга макета, что позволит вам установить переменные для макета.
В методе действия попробуйте следующее:
function index()
{
$this->pageTitle= 'Your Title';
}
Просто подумал, что я добавлю к любым новым людям, находящим это решение, вы можете сделать $this->set('title', $title);
в CakePHP 1.3 внутри контроллера, и заголовок будет отображаться автоматически.
Ты можешь использовать :
$this->assign('title', 'Some title');
и в ктп:
<title><?= $this->fetch('title'); ?></title>
Это работает в CakePHP 3.0
Для CakePHP 3.x,
вы можете последовать совету здесь
По сути,
Внутри UsersController.php
:
$this->set('title', 'Login');
Внутри src/Template/Layouts/default.ctp
над $this->fetch('title');
записывать:
if (isset($title)) {
$this->assign('title', $title);
}
Вместо этого используйте beforeRender()
. Поместите следующее в AppController:
class AppController extends Controller {
var $content;
function beforeRender() {
$this->set('content',$this->content);
}
}
И в контроллере вы можете просто сделать:
function index() {
$this->content['title'] = '123'; }
Это поможет.
$title_for_layout
устарело с версии 2.5 Ссылка< /а> - person Do Nhu Vy   schedule 29.11.2014