CakePHP 3.x - изменить боковую панель для конкретного контроллера - PullRequest
0 голосов
/ 09 октября 2018

У меня есть приложение в CakePHP 3.5.13, которое имеет левое меню навигации.

В моем Template/Layout/default.ctp у меня есть это:

<body>
    <?= $this->element('left_sidebar', ['lh_menu' => $lh_menu, 'cache' => true]);?>

    <?= $this->fetch('content') ?>
</body>

Это делает Template/Element/left_sidebar.ctp вкл.каждая страницаЭто также позволяет мне передавать некоторые данные ($lh_menu) из моего AppController:

// src/Controller/AppController.php
public function beforeFilter(Event $event) 
{
    // $lh_menu is some data from a DB used to populate a navigation menu
    $this->set('lh_menu', $lh_menu);
}

Я недавно добавил новый контроллер (называемый SubstanceViewController.php) и хотел бы использовать другое левое меню(Template/Element/substance_sidebar.ctp) для всех функций в этом контроллере.Я читал об использовании View Blocks , но примеры не показывают, как использовать их в отношении функций контроллера - неясно, где будет размещен код в документации.

Пожалуйстаможет кто-нибудь просветить меня о том, как это делается?У меня также будет требование позже передать данные в substance_sidebar.ctp через SubstanceViewController.php, и я не уверен, отличается ли это от передачи их через AppController?

1 Ответ

0 голосов
/ 10 октября 2018

Я предлагаю добавить beforeFilter функцию в SubstanceViewController, которая будет set флагом, который проверяет ваш макет.

В контроллере:

$this->set('use_substance_sidebar', true);
parent::beforeFilter($event);

В макете:

if (isset($use_substance_sidebar) && $use_substance_sidebar) {
    ...
}
...