ヘルパーで出力されるタグを変更する方法です。

やりたいこと

ビューで
< ?php echo $html->link('Love CakePHP', 'http://www.cakephp.org'); ?>
と書くと
<div class="link"><a href="http://www.cakephp.org" >Love CakePHP</a></div>
と div タグで囲んで表示するようにしたい。

概要

app/config 内に変更したいタグを定義してヘルパーの親クラス(AppHelper) で定義したタグを読み込むという方法です。
CakePHP1.1 と 1.2 で少し方法が違います。

CakePHP1.1

app/config に tags.ini.php というファイルを作成しここにタグを定義すると自動的に反映されます。
app/config/tags.ini.php
link = <div class="link"><a href="%s" %s>%s</a></div>

CakePHP1.2

app/config/tags.php

< ?php
$tags = array(
    'link' => '<div class="link"><a href="%s" %s>%s</a></div>'
);
?>

app/app_helper.php

< ?php
class AppHelper extends Helper {
    function __construct() {
        parent::__construct();
        $this->loadConfig();
    }
}
?>

CakePHP 1.2 の AppHelper::loadConfig は以下のようになっていてデフォルトでは app/config/tags.php を読み込み $this->tags にマージします。

function loadConfig($name = 'tags') {
    if (file_exists(APP . 'config' . DS . $name .'.php')) {
        require(APP . 'config' . DS . $name .'.php');
        if (isset($tags)) {
            $this->tags = array_merge($this->tags, $tags);
        }
    }
    return $this->tags;
}

AppHelper のコンストラクタで
$this->loadConfig("hoge.php");
とすれば hoge.php のように任意のファイルを読み込んでマージすることができます。

HTML ヘルパーが使用するタグは cake/libs/view/helpers/html.php で $tags として定義されています。
この中のフォーム関連のタグは Form ヘルパーでも使用していますので、上記の方法で Formヘルパーで使用するタグも変更できます。

参考URL
Overriding specific HTML tags before using helper methods | The Bakery, Everything CakePHP : Articles

関連する投稿