Структурирование Представлений CakePHP
Долгое время читатель, впервые постер:)
Я только начинаю свое первое приложение Cake, так что, надеюсь, вы, ребята, можете помочь мне на моем пути.
Первый вопрос о расширении / включении взглядов. Я понимаю, как работают макеты / представления, чтобы предотвратить повторение кода, но я не могу понять, как настроить то, что я хочу сделать без некоторого повторения.
Макет моей страницы состоит, кроме заголовка и нижнего колонтитула, левой навигационной панели, к которой я хочу, чтобы контроллеры добавляли себя, если это необходимо, и верхней навигационной панели, которая будет заполнена соответствующими страницами в текущем контроллере.
Я попытался создать блок представления изнутри контроллера, но это не сработало, я немного озадачен.
Вот что у меня есть:
Мой макет по умолчанию включает в себя боковую панель, в настоящее время только жестко запрограммированную, и содержимое:
Layout default.ctp
<!DOCTYPE html>
<html>
<head>.....</head>
<body>
...
<div id='leftnav'>
This is where I want my left nav
I want controllers to be able to add themselves
here.
</div>
<?php echo $this->fetch('content'); ?>
</body>
</html>
Тогда мой / клиент / просмотр индекса:
View index.ctp
<?php $this->extend('common'); ?>
<h1>Customers</h1>
.... do stuff with customers .....
Что расширяет мой / клиент / общий вид, чтобы вывести на верхнюю панель навигации, каждый вид должен включать эту строку расширения, было бы неплохо, если бы не было другого способа сделать это.
На данный момент ссылки просто исправлены, но я бы хотел, чтобы контроллер мог создавать эти параметры.
View common.ctp
<?php
echo $this->Html->Link('index', "index")." ";
echo $this->Html->Link('find', 'find')." ";
echo $this->Html->Link('add', 'add')." ";
echo $this->Html->Link('details', 'details');
echo $this->Session->flash();
echo $this->fetch('content');
?>
Ценю вашу помощь!:D
2 ответа
Я думаю, вы должны просто поместить эти ссылки в ваш файл макета. Но вам, возможно, придется переписать их как "$this->Html->link("Index", массив ("controller => $controller","action" => "index");" и т. Д.
Чтобы получить текущий контроллер в файле макета, вы можете сказать "$controller = $this->params['controller']".
Хорошо, после поиска вокруг я думаю, что нашел хороший способ сделать хотя бы одну из этих вещей.
Для верхней навигации, где ссылки будут заполняться контроллером, я передам массив из контроллера для просмотра. Затем вместо наличия ->extension в каждом представлении я создам элемент, чтобы превратить массив в панель навигации, и -> извлечь это в макете.
Это приводит меня к моему следующему вопросу....
Сколько кода в порядке в макете CakePHP?
Привет, вы можете использовать Cake PHP HTML Helperhttps://book.cakephp.org/3/en/views/helpers/html.html#creating-links
echo $this->Html->link('Users List', ['controller' => 'Users','action' => 'index']);
Результат будет выглядеть так:
<a href="/users/index">Users List</a>