Как я могу установить title_for_layout в PagesController по умолчанию? - PullRequest
4 голосов
/ 13 апреля 2010

Я не могу установить title_for_layout в PagesController, который поставляется по умолчанию с CakePHP 1.3.

Я использую следующий код в функции дисплея:

$this->set('title_for_layout','some title');

Что я делаю не так?

Ответы [ 7 ]

7 голосов
/ 13 апреля 2010

В вашем контроллере соответствующее значение равно $this->pageTitle.

UPDATE

Упс, как отмечено в комментариях, это решение 1.2. 1.3 возможности (после некоторых исследований) включают в себя:

  1. Обеспечение отображения $title_for_layout в макете
  2. Размещение кода $this->set() в виде, а не в контроллере
3 голосов
/ 28 апреля 2011

Если вы хотите имитировать поведение торта 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 () будет вызван после того, как ваши контроллеры завершат обработку, но до отображения макета, что позволит вам установить переменные для макета.

2 голосов
/ 12 июля 2011

В методе действия попробуйте это:

function index()
{
    $this->pageTitle= 'Your Title';
}
1 голос
/ 28 октября 2014

Для CakePHP 3.x,

Вы можете следовать совету здесь

По существу,

Внутри UsersController.php:

$this->set('title', 'Login');

Внутри src/Template/Layouts/default.ctp

выше $this->fetch('title');

запись:

if (isset($title)) {
    $this->assign('title', $title); 
}
1 голос
/ 26 июля 2014

Вы можете использовать:

$this->assign('title', 'Some title');

и в ctp:

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

Это работает в CakePHP 3.0

1 голос
/ 09 февраля 2011

Просто подумав, что я добавлю к любому новому человеку, который найдет это решение, вы можете сделать $this->set('title', $title); в CakePHP 1.3 внутри контроллера, и заголовок будет отображен автоматически.

0 голосов
/ 03 июня 2011

Используйте beforeRender() вместо. Поместите в AppController следующее:

class AppController extends Controller {
    var $content;

    function beforeRender() {
        $this->set('content',$this->content);
    }            
}

А в контроллере вы можете просто сделать:

function index() {
    $this->content['title'] = '123'; }

Это сработает.

...