Дек 05 2008
Заменяем стандартные хелперы не трогая ядро CakePHP
Я уже писал заметку о расширении функциональности стандартных хелперов, но сегодня наткнулся на интересный пост на блоге cakebaker’а и в его обсуждении Admad привел замечательный пример как добиться эффекта гораздо быстрее и проще.
Если у вас уже написан проект с применением стандартных хелперов, или допустим не хватает их возможностей, но не хочется создавать отдельный новый хелпер — чтобы не приходилось вызывать $html2-»image() вместо $html-»image() - то можно применить такой прием:
Все равно создаем новый хелпер на основе стандартного.
// app/views/helpers/example.php App::import('Helper', 'Html'); class ExampleHelper extends HtmlHelper { public function link($title, $url = null, $htmlAttributes = array(), $confirmMessage = false, $escapeTitle = true) { return '<a href="http://example.com">example</a>'; } }
Создаем специальный класс для шаблонов:
// app/views/example.php class ExampleView extends View { public function &_loadHelpers(&$loaded, $helpers, $parent = null) { $loaded = parent::_loadHelpers($loaded, $helpers, $parent); //Обратите внимание! //Именно здесь производится подмена стандартного хелпера Html новым хелперомExample. if(isset($loaded['Example'])) { $loaded['Html'] = $loaded['Example']; unset($loaded['Example']); } return $loaded; } }
И, наконец, подключаем класс для шаблонов к приложению:
// app/app_controller.php class AppController extends Controller { public $view = 'Example'; public $helpers = array('Example'); }
И все — после этого все ссылки в вашем приложении станут указывать на http://example.com