Долгое время читатель, впервые постер 🙂
Я только начинаю свое первое приложение 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
Я думаю, вы должны просто поместить эти ссылки в файл макета. Но вам, возможно, придется переписать их как «$ this-> Html-> link (« Index », массив (« controller => $ controller »,« action »=>« index »);» и т. Д.
Чтобы получить текущий контроллер в файле макета, вы можете сказать «$ controller = $ this-> params [‘controller’]».
Хорошо, после поиска вокруг я думаю, что нашел хороший способ сделать хотя бы одну из этих вещей.
Для верхней навигации, где ссылки будут заполняться контроллером, я передам массив из контроллера для просмотра. Затем вместо наличия -> extension в каждом представлении я создам элемент, чтобы превратить массив в панель навигации, и -> извлечь это в макете.
Это приводит меня к моему следующему вопросу ….
Сколько кода в порядке в макете CakePHP?