Pregunta

No puedo conjunto title_for_layout en el PagesController que viene por defecto con CakePHP 1.3.

Estoy utilizando el siguiente código en la función de visualización:

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

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

En el controlador, el valor correspondiente es $this->pageTitle.

Actualizar

Vaya, como se señaló en los comentarios, esta es la solución 1,2. 1.3 posibilidades (después de hacer algunas investigaciones) incluyen:

  1. Asegurar que $title_for_layout tiene su eco en el diseño
  2. Colocar el código $this->set() en la vista en lugar de en el controlador

Otros consejos

Si desea imitar el comportamiento de la torta 1.2, puede hacer lo siguiente:

En su app_controller, crear el siguiente método:

en app / app_controller.php (puede que tenga que crear este archivo si no lo ha hecho)

public $pageTitle;

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

A continuación, en cualquiera de sus métodos de acción, que puede entonces utilizar el pageTitle como lo haría en 1.2.

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

El BeforeRender () método será llamado después de que sus controladores tienen procesamiento final, pero antes de la disposición que se queden, lo que le permite tanto a las variables establecidas para el diseño.

En el método de acción, intente lo siguiente:

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

Al igual que me gustaría añadir a cualquier persona nueva búsqueda de esta solución, que puede hacer $this->set('title', $title); en CakePHP 1.3 dentro del controlador y el título se procesará automáticamente.

Puede utilizar:

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

y en la CTP:

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

trabajar en CakePHP 3.0

Para CakePHP 3.x,

Puede seguir los consejos aquí

En esencia,

Dentro de UsersController.php:

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

Dentro de src/Template/Layouts/default.ctp

encima de la $this->fetch('title');

escritura:

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

Uso beforeRender() lugar. Poner el siguiente en AppController:

class AppController extends Controller {
    var $content;

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

Y en el controlador, sólo se puede hacer:

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

Eso va a hacer el truco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top