2012-04-11 1 views
2

Я читал this и this. Но я не мог найти ответ.Извлечь блок из внешнего файла ctp

У меня есть этот файл, в котором существуют взгляды мои действия в: View/MyController/index.ctp

У меня есть этот файл View/Commons/blocks.ctp

Блоки .ctp файл включает в себя следующие:

$this->start('sidebar1'); 
echo 'Some content'; 
$this->end(); 

$this->start('sidebar2'); 
echo 'Some content more'; 
$this->end(); 

Таким образом, в файле "index.ctp" я хочу, чтобы принести sidebar1 или sidebar2. Как я могу это сделать? Я написал это index.ctp, но не работал.

<?php echo $this->fetch('sidebar1'); ?> 

Кроме того, это один не работает

<?php echo $this->fetch('../View/Commons/blocks.ctp/sidebar1'); ?> 

Спасибо

+1

По какой причине вы не используете элементы? Элементы могут также кэшироваться отдельно. – Costa

+0

@Costa Благодарим вас за ответ. Я новичок, поэтому я не знаю различий между «блоками просмотра» и «элементами». Я полагаю, что «блоки просмотра» новы в версии 2.1, но элементы существуют в течение длительного времени. Их использование кажется схожим, но каковы различия между эхом элемента или извлечением блока? Еще раз спасибо – trante

ответ

3

Put в верхней части index.ctp:

$this->extend('Common/blocks.ctp'); 

с блоками и вид наследования, вы могут создавать «вспомогательные макеты», которые в основном аналогичны стандартным файлам макета торта. Таким образом, у вас будет основной layout.ctp, а ctp view-control-action будет основан на родительском файле представления (например, /Commons/xxxx.ctp), который «заполняется» через блоки.

Блоки похожи на элементы, но менее «формальные», если вы не используете функции «наследования вида». Их разметка & данные создаются в ваших сценариях, возможно в нескольких местах, поэтому они могут быть более громоздкими для отладки/поддержки (т. Е. Представляют собой добавление разметки к блоку из нескольких классов). Они также сложнее использовать, если вы не используете наследование.

Элементы больше похожи на автономные файлы просмотра, которые можно использовать в любом контроллере + вид действия или макет: вся разметка находится в одном месте, и вы просто передаете данные.

Нижняя линия: если вы новичок в Cake, вы можете получить штраф с помощью только элементов. Просмотр наследования может помочь сделать вид/макеты более элегантными, но ценой некоторой сложности.

+0

Благодарим вас за подробный ответ. в течение нескольких месяцев я буду использовать элементы. Я позже перейду к блокам. Теперь я пытаюсь настроить логику использования элементов. Я добавляю файл ctp для каждого из моих элементов, я могу успешно эхо-элементы. Я ищу лучшие практики. >> Должен ли я помещать элементы в свой файл макета и передавать аргументы элементам из моих файлов представлений? >> Или мне нужно передать аргументы элементам из файлов моего контроллера? >> Иначе это осложняется, не так ли?Контроллер-> Вид-> Элемент-макет >> Или это рекомендуемая практика? Спасибо – trante

+2

Вы добавляли элементы в макеты только в том случае, если элемент отображается на каждой странице вашего сайта. В противном случае данные должны всегда заполняться в контроллере, а затем в представлении вы передаете данные элементу. (элементы отображаются с помощью операторов 'echo', поэтому они имеют смысл только в представлении/макете) – Costa