Структурирование Представлений 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

0

Решение

Я думаю, вы должны просто поместить эти ссылки в файл макета. Но вам, возможно, придется переписать их как «$ this-> Html-> link (« Index », массив (« controller => $ controller »,« action »=>« index »);» и т. Д.

Чтобы получить текущий контроллер в файле макета, вы можете сказать «$ controller = $ this-> params [‘controller’]».

0

Другие решения

Хорошо, после поиска вокруг я думаю, что нашел хороший способ сделать хотя бы одну из этих вещей.

Для верхней навигации, где ссылки будут заполняться контроллером, я передам массив из контроллера для просмотра. Затем вместо наличия -> extension в каждом представлении я создам элемент, чтобы превратить массив в панель навигации, и -> извлечь это в макете.

Это приводит меня к моему следующему вопросу ….
Сколько кода в порядке в макете CakePHP?

0

По вопросам рекламы [email protected]