Как я могу установить title_for_layout в PagesController по умолчанию?

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

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

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

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


person ion    schedule 13.04.2010    source источник
comment
Обновление: $title_for_layout устарело с версии 2.5 Ссылка< /а>   -  person Do Nhu Vy    schedule 29.11.2014


Ответы (7)


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

ОБНОВЛЕНИЕ

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

  1. Обеспечение того, чтобы $title_for_layout отображалось в макете
  2. Размещение кода $this->set() в представлении, а не в контроллере
person Rob Wilkerson    schedule 13.04.2010
comment
В качестве дополнения: вы также можете установить это значение в соответствующем представлении, что было бы еще более MVC - person harpax; 13.04.2010
comment
Извините, ребята, но $this-›PageTitle, насколько мне известно, предназначен для cakephp 1.2, а не для 1.3. В любом случае при использовании cakephp 1.2 выдает ошибку. - person ion; 13.04.2010
comment
Извинения. Я пропустил спецификацию 1.3 в вашем вопросе, если это не было частью редактирования. Похоже, что это исчезло в версии 1.3 (book.cakephp.org/view/1561/Migrating-from-CakePHP-1-2-to-1-3). Я еще не использовал 1.3, но чтение документации показывает, что то, что вы делаете, должно работать, если остальная часть контекста верна. - person Rob Wilkerson; 13.04.2010
comment
Рискуя констатировать очевидное, повторяете ли вы переменную $title_for_layout в своем фактическом макете? например <title><?php echo $title_for_layout; ?></title>? - person Rob Wilkerson; 13.04.2010
comment
Похоже, решение состояло в том, чтобы поместить код $this-›set() в представление, а не в контроллер. - person ion; 16.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() будет вызываться после того, как ваши контроллеры закончат обработку, но до рендеринга макета, что позволит вам установить переменные для макета.

person aminal    schedule 28.04.2011

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

function index()
{
    $this->pageTitle= 'Your Title';
}
person Chirag    schedule 12.07.2011

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

person Calvin    schedule 09.02.2011

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

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

и в ктп:

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

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

person Obi    schedule 25.07.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); 
}
person Kim Stacks    schedule 28.10.2014

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

class AppController extends Controller {
    var $content;

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

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

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

Это поможет.

person windmaomao    schedule 03.06.2011