Сен 17 2008

Основные навыки создания шаблонов в CakePHP

Раздел: ШаблоныМета @ 22:53

Вольный перевод заметки 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.

Теги: , ,

4 Responses to “Основные навыки создания шаблонов в CakePHP”

  1. BorisPlus says:

    В принципе по готовому Контроллеру и Модели достаточно легко генерировать Вид с помощью Cake Bake. Гораздо интереснее тема подключения Смарти шаблонизатора. Но и этот пост тож интересен. И вообще ресурс приятный.

  2. Мета says:

    Я против использования дополнительных шаблонизаторов в CakePHP.
    Зачем плодить сущности? Зачем заставлять дизайнера шаблонов изучать еще один язык - пускай лучше изучит стандартные функции и управляющие структуры PHP.

    К тому же, шаблонизатор - это дополнительное время выполнения скрипта.

    Что можно сделать на Smarty из того что не делается просто на PHP?

  3. Longedok says:

    Или я чего-то не понимаю, или в самом первом листинге логическая ошибка. Похоже, должно быть наоборот.

  4. Мета says:

    Да, действительно, пропустил отрицание. Исправляю.

Напиши комментарий!