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

StackOverflow https://stackoverflow.com/questions/2628963

  •  26-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

ОБНОВИТЬ

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

  1. Обеспечение $title_for_layout подвергается эхом в макете
  2. Размещение $this->set() код в виду, а не в контроллере

Другие советы

Если вы хотите имитировать поведение торта 1.2, вы можете сделать следующее:

В вашем App_Controller создайте следующий метод:

в приложении / 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 () будет вызываться после завершения обработки ваших контроллеров, но до указания компоновки, что позволяет устанавливать переменные для макета.

В методе действий попробуйте это:

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

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

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

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

А в CTP:

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

Он работает в CakePhp 3.0

Для CakePhp 3.x,

Вы можете следовать совету здесь

По сути,

Внутри UsersController.php:

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

Внутри src/Template/Layouts/default.ctp

выше $this->fetch('title');

записывать:

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

Использовать beforeRender() вместо. Поместите следующее в AppController:

class AppController extends Controller {
    var $content;

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

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

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

Это сделает трюк.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top