Дек 05 2008

Заменяем стандартные хелперы не трогая ядро CakePHP

Раздел: ХелперыМета @ 08:27

Я уже писал заметку о расширении функциональности стандартных хелперов, но сегодня наткнулся на интересный пост на блоге 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

Теги: ,

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