Question

I cannot set title_for_layout in the PagesController that comes by default with CakePHP 1.3.

I am using the following code in the display function:

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

What am I doing wrong?

Was it helpful?

Solution

In your controller, the corresponding value is $this->pageTitle.

UPDATE

Oops, as noted in the comments, this is the 1.2 solution. 1.3 possibilities (after doing some research) include:

  1. Ensuring that $title_for_layout is being echoed in the layout
  2. Placing the $this->set() code in the view rather than in the controller

OTHER TIPS

If you'd like to mimic the behavior of cake 1.2, you can do the following:

In your app_controller, create the following method:

in app/app_controller.php (you may need to create this file if you haven't already)

public $pageTitle;

public function beforeRender() {
    $this->set('title_for_layout', $this->pageTitle);
}

Then in any of your action methods, you may then use the pageTitle as you would in 1.2.

public function index() {
    $this->pageTitle = 'Some Title';
}

The beforeRender() method will be called after your controllers have finished processing, but prior to the layout being rendered, thus allowing you to set variables for the layout.

In the action method, try this:

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

Just thought I'd add to any new people finding this solution, you can do $this->set('title', $title); in CakePHP 1.3 inside the controller and the title will be rendered automatically.

You can use :

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

and in ctp :

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

It work in CakePHP 3.0

For CakePHP 3.x,

you can follow the advice here

Essentially,

Inside UsersController.php:

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

Inside src/Template/Layouts/default.ctp

above the $this->fetch('title');

write:

if (isset($title)) {
    $this->assign('title', $title); 
}

Use beforeRender() instead. Put the following in AppController:

class AppController extends Controller {
    var $content;

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

And in the controller, you can just do:

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

That'll do the trick.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top