Сен 17 2008
Основные навыки создания шаблонов в CakePHP
Вольный перевод заметки Felix Geisendörfer Basic CakePHP templating skills.
Документация по CakePHP описывает различные аспекты использования платформы, но в ней не рассматриваются практики создания шаблонов (views). В этой заметке я попробую сформулировать собственные наработки по их удобному составлению. Конечно, у всех разработчиков, постоянно работающих с Кейком уже есть свои стандарты и привычки, но надеюсь для новичков мои советы окажутся полезными.
PHP теги
Хочу начать с рекомендации всегда использовать полные теги (<?php … ?>) для открытия блоков php-кода вместо коротких (<? … ?>). Почему? Потому что это рекомендуется стандартами разработки CakePHP и потому что полные теги более заметны в html-коде. Но самая важная причина в том, что короткие теги могут быть отключены на сервере хостинга в php.ini и ваше приложение может вовсе не заработать.
Условия
В обычном php-коде рекомендуется для всех условий использовать фигурные скобки. Но они не очень удобны в шаблонах. Попробуйте вместо них использовать следующий синтаксис:
1 2 3 4 5 | <?php if (!isset($user)): ?> <p>Пользователь не найден</p> <?php else: ?> <p>Добро пожаловать, <?php echo $user['User']['name']; ?>!</p> <?php endif; ?> |
Ключевые слова, используемые в таком синтаксисе читаются гораздо проще чем фигурные скобки. Однако, не все редакторы способны подсвечивать парные теги условий, записанных таким способом.
Циклы
При работе с шаблонами в CakePHP очень часто используются циклы foreach — для перебора практически всех массивов. Здесь я тоже рекомендую использовать сокращенный синтаксис как и в условиях:
1 2 3 4 | <?php foreach ($events as $event): ?> <h2><?php echo $html->link($event['Event']['title'], Event::getUrl($event)) ?></h2> <?php echo $event['Event']['html'] ?> <?php endforeach; ?> |
Перевод строки
Часто при просмотре исходников получившейся из представления html-странички вы видите, что весь код слипся в одну длинную строку. Это не проблема CakePHP, а общая особенность интерпретатора php. Всегда когда последними символами в строке появляется закрывающий тег php-кода, интерпретатор удаляет следующий за своим тегом символ возврата каретки и html слипается в одну строку. Избежать этого очень просто — ставьте пробел после закрывающего тега php ?>. И не забудьте проверить настройки вашего редактора — некоторые автоматически удаляют конечные пробелы в строках.
Избегайте многострочных команд
Для меня это один из главных принципов при написании шаблонов. В каждом включенном в шаблон php-выражении должна быть ровно одна команда. Конечно, иногда приходится нарушать это правило, но в целом — это очень хороший индикатор того, что вся логика находится в контроллере, а не в шаблоне. Если вам все-таки нужно реализовать логику именно в шаблоне, то лучше вынесите ее в хелпер. Самое худшее что вы можете сделать это объявить в шаблоне (view) функцию. Они обязательно должны выноситься по меньшей мере в хелпер. В некоторых случаях один шаблон может выводится несколько раз за один запрос — и тогда вы получите ошибку интерпретатора о дважды объявленной функции.
Таблицы с чередующимися по цвету строками
В прошлом мне встречались html-странички, где люди вручную прописывали цвет для каждой строки таблицы. Конечно же сейчас это легко автоматизируется:
1 2 3 4 5 | <?php for ($num=0;$num<count($events);$num++): ?> <tr class="<?php echo ($num % 2) ? 'row-a': 'row-b'; ?>"> <td><?php echo $events[$num]['Event']['title']; ?></td> </tr> <?php endfor; ?> |
Каждое второе число в целочисленной последовательности делится на 2 без остатка (а точнее с нулевым остатком). Именно это условие и проверяется при определении класса каждой строки.
Надеюсь, эти советы помогут вам при написании шаблонов в CakePHP.
Октябрь 9th, 2008 at 00:04
В принципе по готовому Контроллеру и Модели достаточно легко генерировать Вид с помощью Cake Bake. Гораздо интереснее тема подключения Смарти шаблонизатора. Но и этот пост тож интересен. И вообще ресурс приятный.
Октябрь 9th, 2008 at 11:02
Я против использования дополнительных шаблонизаторов в CakePHP.
Зачем плодить сущности? Зачем заставлять дизайнера шаблонов изучать еще один язык - пускай лучше изучит стандартные функции и управляющие структуры PHP.
К тому же, шаблонизатор - это дополнительное время выполнения скрипта.
Что можно сделать на Smarty из того что не делается просто на PHP?
Февраль 8th, 2009 at 21:30
Или я чего-то не понимаю, или в самом первом листинге логическая ошибка. Похоже, должно быть наоборот.
Февраль 9th, 2009 at 10:22
Да, действительно, пропустил отрицание. Исправляю.