Отображение это с страница-шаблон, обычно названная так же как и действие. Например, отображение для Posts Controller?::add() будет /app/views/posts/add.thtml. Отображения Cake это довольно простые PHP-файлы, так что вы можете использовать любой PHP-код внутри них. Хотя большинство ваших файлов отображений и будут включать в себя HTML, но отображение может быть чем угодно: XML, изображения и т.д.
В файле отображения, вы можете использовать данные из соответствующей модели. Эти данные вставляются как вызванный масив $data. Любые данные переданные в отображение использованием set() в контроллере, теперь также доступны и в вашем отображении.
HTML Хелпер доступен в любом отображении по умолчанию, и является самым частоиспользуемым хелпером в отображениях. Он очень полезен при создании форм, включающий скрипты и медиа, связывающий и вспомогательный в проверке данных. Более подробно можете посмотреть в главе «Хелперы».
Большинство функций доступных в отображениях предоставлены Хелперами. Cake снабжен большим набором хелперов (о них в главе «Хелперы») и вы можете также включать собственные. Поскольку отображения не должны содержать много кода, есть немного используемых функций в классе отображений. Одна из полезных это renderElement(), о которой речь пойдет в разделе 1.2.
Верстка содержит в себе весь предъявляемый код, который обволакивает отображение. Все что вы хотите увидеть во всех ваших отображениях должно быть размещено в вашей верстке.
Файлы верстки находятся в /app/views/layouts. Верстка по умолчанию Cake может быть заменена на новую в /app/views/layouts/default.thtml. Когда новая верстка по умолчанию создана, код отображения контроллера помещается внутрь верстки, когда страница рендерится.
Когда вы создаете верстку, вам нужно сообщать Cake'у где разместить код отображения вашего контроллера: чтобы сделать это, убедитесь, что ваша верстка влючает место для $content_for_layout (и опционально $title_for_layout). Вот пример того как может выглядить верстка по умолчанию:
Самый простой способ установить заголовок для вашего отображения – это использование переменной $pageTitle из контроллера.
<?
class UsersController extends AppController
{
function viewActive()
{
$this->pageTitle = 'View Active Users';
}
}
?>
Вы можете создать столько видов верстки сколько только пожелаете для вашего сайта в Cake, просто поместите их в директорию app/views/layouts, и переключайтесь между ними в действиях вашего контроллера, используя переменную контроллера $layout, или функцию setLayout().
Например, если раздел моего сайта включает место для малейшего рекламного баннера, я могу создать новую верстку с маленьким местом для рекламы и объявить эту верстку для всех действий контроллера, использовав что-то вроде:
var $layout = 'default_small_ad';
Многие приложения имеют небольшие блоки кода, который должен быть на каждой странице, иногда в разных местах. Cake может помочь вам повторять куски вашего веб-сайта, которые нужно неоднократно использовать. Эти повторяющиеся части называются элементами. Реклама, блоки помощи, навигационный контроль, дополнительные меню и выноски представлены в Cake как элементы. Элемент это в основном мини-отображение, которое можно включать в другие отображения.
Элементы обитают в каталоге /app/views/elements/, имеют расширение .thtml.
Элемент по умолчанию не имеет никакого доступа к данным. Чтобы дать им доступ к данным, вы посылаете их с проименованым параметром в масив.
<?php echo $this->renderElement('helpbox'); ?>
<?php echo
$this->renderElement('helpbox', array("helptext" => "Oh, this text is very helpful."));
?>
Вопрос по отображениям. А если нужно собрать целую страницу из результатов отдельных контроллеров.. Что делать?
На сайте api.cakephp.org ничего не разобрал. Или я полный нуб или... И вравду, никто не знает что ли как сделать в layouts чтобы выводилось несколько view файлов и отробатывали несколько контроллеров. Скаффолдинг это не дело. До разработчиков не достучаться... Как сделать отдельно меню(создается динамически из базы данных) и сам контент...? Как же просто это делается при использовании include... И угораздило мне взяться за дипломную работу «Разработка сайта с помощью cake-php». Не фреймвок, а что то с чем то... Кто разобрался, помогите, плиз...!!!
C вопросом выше разобрался. А как быть с картинками? к примеру создаю деррикторию с корне 'cakephp' и называю ее 'pic'. В app/views/posts/index.thtml записываю такие строчки
"<? echo $html->image('http://localhost/cakephp/pic/1.gif',array('border'=>'1px solid','width'=>'100px','height'=>'100px'),true);?>", но картинка не отображается, хотя если я перемещю картинку в другой каталог, не относящийся к cakephp, то начинает все работать. К примеру создам в корне localhost/www/proba папку pic и напишу код:
"<?echo $html->image('http://localhost/proba/pic/1.gif',array('border'=>'1px solid','width'=>'100px','height'=>'100px'),true);?>", то все прекрасно отображается. Почему так???
а нефиг в корне создавать. создавай в webroot и все будет работать
пояснею свой ответо выше:
в app/webroot/img кидаеш все свои картинки
если у тя кейк сразу расположен на домене тест.ру тогда к картинкам обращяешся по принципу
$html->image('
если у тя кейк установлен в какойто поддеректории тогда указываеш пукть еще к ней. но вебруут писать ненадо. там модреврайт отрабатывает.
А как тогда поступить с js файлами? Закинул фаил в js-папку и как прописать хелпер? Единственный вариант у меня прошол в layouts->default.thtml прописал "<script language="Java Script?" src=" до директории cakePHP/app/webroot/js/file.js"></script>"
Аналогично! Возвращаемся к третьему комментарию. Как сделать так??
И еще вопрос, как из отображения, например форма «Добавить запись» присвоить в поле базы данных значение переменной, но так, чтоб пользователь этого не видел?
Мне нужно сделать выдачу информации в формате RSS 2.0. Я сделал для этого класс rss и хочу выводить информацию через view\rss\index.thtml
ВОПРОС: как мне отключить файл layouts\defoult.thtml, потому что в нем задается шапка ретд страницы, а мне нужен совсем другой фаормат?
(xain@mail.ru)