Domanda

Non posso set title_for_layout nel PagesController che viene fornito di default con CakePHP 1.3.

Sto usando il seguente codice nella funzione di visualizzazione:

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

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Nel vostro controller, il valore corrispondente è $this->pageTitle.

Aggiorna

Ops, come notato nei commenti, questa è la soluzione 1.2. 1.3 possibilità (dopo aver fatto qualche ricerca) includono:

  1. Garantire che $title_for_layout è echeggiato nel layout
  2. Posizionamento del codice $this->set() nella vista piuttosto che nel controllore

Altri suggerimenti

Se vuoi per simulare il comportamento di torta 1.2, è possibile effettuare le seguenti operazioni:

Nel vostro app_controller, creare il seguente metodo:

in app / app_controller.php (potrebbe essere necessario creare questo file se non l'hai già)

public $pageTitle;

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

Poi, in uno dei tuoi metodi d'azione, è possibile quindi utilizzare il pageTitle come si farebbe in 1.2.

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

Il BeforeRender () metodo sarà chiamato dopo i controller ha elaborazione finito, ma prima che il layout in fase di rendering, che consente quindi di variabili fissati per il layout.

Nel metodo di azione, provate questo:

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

Ho pensato di aggiungere a qualsiasi nuove persone a trovare questa soluzione, si può fare $this->set('title', $title); in CakePHP 1.3 all'interno del controller e il titolo sarà reso automaticamente.

È possibile utilizzare:

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

e in CTP:

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

Si lavora in CakePHP 3.0

Per CakePHP 3.x,

è possibile seguire il consiglio qui

In sostanza,

All'interno UsersController.php:

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

All'interno src/Template/Layouts/default.ctp

sopra il $this->fetch('title');

scrittura:

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

Usa beforeRender() invece. Inserire il seguente nel AppController:

class AppController extends Controller {
    var $content;

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

E nel controllore, si può solo fare:

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

Basta così il trucco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top