Pergunta

Eu não posso definir title_for_layout no PagesController que vem por padrão com o CakePHP 1.3.

Eu estou usando o seguinte código na função de exibição:

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

O que estou fazendo de errado?

Foi útil?

Solução

No seu controlador, o valor correspondente é $this->pageTitle.

ATUALIZAR

Opa, conforme observado nos comentários, esta é a solução 1.2. 1.3 As possibilidades (depois de fazer algumas pesquisas) incluem:

  1. Garantindo isso $title_for_layout está sendo ecoado no layout
  2. Colocando o $this->set() código na visualização e não no controlador

Outras dicas

Se você gostaria de imitar o comportamento de bolo 1.2, você pode fazer o seguinte:

Em seu app_controller, crie o seguinte método:

no app/app_controller.php (você pode precisar para criar este arquivo se você não tiver)

public $pageTitle;

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

Em seguida, em qualquer um de seus métodos de ação, em seguida, você pode usar o título de página, como você faria em 1.2.

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

BeforeRender() método será chamado após o seu controladores de ter terminado o processamento, mas antes o layout a ser apresentado, permitindo a você configurar as variáveis para o layout.

No método de ação, tente o seguinte:

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

Apenas pensei em adicionar a qualquer pessoa nova que encontre esta solução, você pode fazer $this->set('title', $title); no CakePhp 1.3 dentro do controlador e o título será renderizado automaticamente.

Você pode usar :

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

e no CTP:

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

Funciona no CakePhp 3.0

Para CakePhp 3.x,

você pode seguir o conselho aqui

Essencialmente,

Lado de dentro UsersController.php:

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

Lado de dentro src/Template/Layouts/default.ctp

acima de $this->fetch('title');

Escreva:

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

Usar beforeRender() em vez de. Coloque o seguinte no AppController:

class AppController extends Controller {
    var $content;

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

E no controlador, você pode simplesmente fazer:

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

Isso vai fazer o truque.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top