Сен 11 2008
Расширяем функциональность стандартных хелперов
CakePHP — платформа для разработки веб-сайтов, написанная по всем принципам объектно-ориентированного программирования. Все блоки платформы представлены как объекты, со сложными схемами взаимодействия. К чему это я? Не стесняйтесь использовать принцип наследования - расширяйте функциональность стандартных блоков платформы.
Рассмотрим на примере хелперов. У нас в студии часто попадаются проекты с большим количеством статических страниц. Их удобнее хранить отдельными представлениями (views), чтобы не было проблем со вставкой и обработкой форм, картинок, элементов динамики и тому подобного. Опять же часто в этих статических страничках бывают произвольно разбросаны по тексту однотипные элементы, например картинки с одинаковым классом css или таблицы с хитрым заголовком.
Верстальщику все время когда встречаются подобные элементы, приходится писать в представлении конструкцию вида:
<?php echo $html->image(’page1/img_sample_2.jpg’, array(’class’=>’special’));?>
Здесь папка «page1» уникальна для каждой странички, т.е. для каждой странички свой набор картинок, некоторые из которых являются специальными — у которых в названии встречается «_sample».
Как упростить работу верстальщика? Расширить функциональность стандартного хелпера HtmlHelper.
Создаем файл «/app/views/helpers/html2.php». Так и будет называться новый хелпер — Html2Helper. Он будет наследоваться от стандартного объекта Helper и использовать возможности HtmlHelper’а.
Для того, чтобы узнать в какой папке искать картинку, в контроллере надо установить переменную $this->params['inpage']. Весь массив $this->params[] доступен из хелперов. Реализуем в нашем хелпере обработку пути и имени картинки в методе image():
<?php
class Html2Helper extends Helper {var $helpers = array(’Html’); //подключаем для использования HtmlHelper
function image($img, $options = array()) { //первый параметр — имя картинки, второй — необязательные опции
if (isset($this->params['inpage']) && ($this->params['inpage'] <> 0)) { //если установлен путь где искать картинки
if (strpos($img, ‘_sample’) !== false) { //ищем в имени картинки вхождение «_sample»
$options['class'] = ’special’;//если нашли — добавляем класс «special»
}
return $this->Html->image($this->params['inpage'].’/’.$img, $options); //возвращаем оформленный тег img с правильным путем к картинке
} else {
return $this->Html->image($img, $options); // или выводим картинку из пути по-умолчанию
}
}
}
?>
Использовать этот хелпер для верстальщика гораздо проще. Ему достаточно написать в представлении:
<?php echo $html2->image(’img_sample_2.jpg’);?>
Конечно, программистам придется позаботиться чтобы в контроллере устанавливалась переменная с правильным путем к картинкам, соответствующим выбранной странице, но это совсем не сложно.
Ноябрь 5th, 2008 at 19:39
как то сложно у вас.
Не забываем что можно определить методы в AppHelper
и что HtmlHelper extends AppHelper
Декабрь 5th, 2008 at 08:40
[...] уже писал заметку о расширении функциональности стандартных хелперов, но сегодня наткнулся на интересный пост на блоге [...]