Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Manual11/Views ...

Отображения


Оглавление документа


Отображение это с страница-шаблон, обычно названная так же как и действие. Например, отображение для 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."));
 
?>

Внутри файла элемента, все вставленные переменные доступны как имена ключей вставленного масива (больше похоже на set() в работе контроллеров с отображениями). В предыдушем примере, файл /app/views/elements/helpbox.thtml мог использовать переменную $helptext. Конечно, лучше вставлять масив в элемент.
Элементы можно использовать для того, чтобы делать отображения более удобчитаемыми, помещая в них повторяющиеся элементы. Они также могут помочь вам в переиспользовании фрагментов контента вашего веб-сайта.


 
Комментарии

Вопрос по отображениям. А если нужно собрать целую страницу из результатов отдельных контроллеров.. Что делать?

DeeperMd? (2008-02-01 14:56:31)

поищите на api.cakephp.org по запросу requestAction

AntonIsaykin (2008-02-01 16:22:35)

На сайте api.cakephp.org ничего не разобрал. Или я полный нуб или... И вравду, никто не знает что ли как сделать в layouts чтобы выводилось несколько view файлов и отробатывали несколько контроллеров. Скаффолдинг это не дело. До разработчиков не достучаться... Как сделать отдельно меню(создается динамически из базы данных) и сам контент...? Как же просто это делается при использовании include... И угораздило мне взяться за дипломную работу «Разработка сайта с помощью cake-php». Не фреймвок, а что то с чем то... Кто разобрался, помогите, плиз...!!!

91-151-32-160.skylink-chel.ru (2008-03-10 23:49:47)

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);?>", то все прекрасно отображается. Почему так???

91-151-35-253.skylink-chel.ru (2008-03-12 11:45:16)

а нефиг в корне создавать. создавай в webroot и все будет работать

79.140.0.110 (2008-03-19 12:43:59)

пояснею свой ответо выше:
в app/webroot/img кидаеш все свои картинки
если у тя кейк сразу расположен на домене тест.ру тогда к картинкам обращяешся по принципу
$html->image('
если у тя кейк установлен в какойто поддеректории тогда указываеш пукть еще к ней. но вебруут писать ненадо. там модреврайт отрабатывает.

79.140.0.110 (2008-03-19 12:47:28)

А как тогда поступить с js файлами? Закинул фаил в js-папку и как прописать хелпер? Единственный вариант у меня прошол в layouts->default.thtml прописал "<script language="Java Script?" src=" до директории cakePHP/app/webroot/js/file.js"></script>"

/Александр Васильев? (2008-05-11 15:38:21)

Аналогично! Возвращаемся к третьему комментарию. Как сделать так??

79.122.129.105 (2008-08-18 08:22:07)

И еще вопрос, как из отображения, например форма «Добавить запись» присвоить в поле базы данных значение переменной, но так, чтоб пользователь этого не видел?

79.122.129.105 (2008-08-18 08:24:41)

Мне нужно сделать выдачу информации в формате RSS 2.0. Я сделал для этого класс rss и хочу выводить информацию через view\rss\index.thtml


ВОПРОС: как мне отключить файл layouts\defoult.thtml, потому что в нем задается шапка ретд страницы, а мне нужен совсем другой фаормат?
(xain@mail.ru)

77.120.226.145 (2009-01-20 17:49:57)
Добавить комментарий:

Файлы [Скрыть файлы/форму]