0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Coldfusionのカスタムタグの使い方

Last updated at Posted at 2022-01-05

どんな話?

久しぶりにColdfusionに触って、カスタムタグの使い方を忘れていたので。
公式マニュアルのこの辺の話。
https://helpx.adobe.com/jp/coldfusion/developing-applications/building-blocks-of-coldfusion-applications/creating-and-using-custom-cfml-tags.html

公式マニュアルは長いし、英語読むのも面倒だし、ざっくりと。

カスタムタグって何だっけ?

こんな感じで書くと、

test_customtag.cfm
<cf_hogetext id="hoge_id" name="hogename">  

サーバ側でごにょごにょ処理が実行されて、こんなものが出力される、みたいな。
(もちろん、こんな感じで出力されるように、裏で処理を作る必要はあります)

ブラウザ側への出力
<input type="text id="hoge_id" name="hogename" placeholder="ほげほげ">

主に画面表示出力などを共通化するための仕組みですね。
サーバ側の処理をCFMLで書いているなら、cffunctionの代わりに使えたりもしますね。

カスタムタグの配置場所を設定する

cf_hogetextタグを使ったときに呼びだされる処理は、hogetext.cfmに記述する必要があります。

例えばこんなディレクトリ構成
- src
    - gamen
        - test_customtag.cfm
        - hogetext.cfm

ただ、この構成だとちょっとわかりにくいと思います。
カスタムタグは、Application.cfcでパスを指定することで、そこにあるファイルを読み込むことができるようになります。
(パスの記述は環境に合わせてそれらしく)

Application.cfc
<cfset this.customtagpaths = "カスタムタグを配置する場所">

この設定をすることで、カスタムタグの処理を記述するファイルを分けることができます。

例えばこんなディレクトリ構成2
- src
    - customtag
        - hogetext.cfm
    - gamen
        - test_customtag.cfm

とりあえず処理を書いてみる(Attributesの使い方とか)

test_customtag.cfmカスタムタグって何だっけ?をそのまま使ってみる。

test_customtag.cfm
<cf_hogetext id="hoge_id" name="hogename">  

そしてカスタムタグの処理。
カスタムタグを使うときに記述されている属性(idとかnameとか)は、Attributesから取得できます。

hogetest.cfm
<cfoutput>
  <input type="text" id="#Attributes.id#" name="#Attributes.name#" placeholder="ほげほげ"> 
</cfoutput>

これでtest_customtag.cfmを呼び出せば、カスタムタグって何だっけ?と同じ結果が返ってくるはずです。

ブラウザ側への出力
<input type="text id="hoge_id" name="hogename" placeholder="ほげほげ">

これを応用すれば、データベースから取得した情報を使ってselectタグとoptionタグを生成したり、みたいなこともできますね。
cffunctionタグやCFScriptで関数定義したりでも似たようなことができると思いますが、状況によってはこちらの方が使いやすいと思います。

Callerなんてものが使える(けどあまり使いたくはない)

カスタムタグの処理内でCallerを使うことにより、カスタムタグの呼び出し元で定義されている変数を取得したり、値を書き換えたりすることもできます。
(多用するとソースが読みにくくなりそうですが・・・)

例えばこんなカスタムタグを定義してみます。

hogecaller.cfm
<cfscript>
  // もちろんCFMLではなく、こんな感じでCFScriptでも処理を書けます
  Caller.hogehoge = "書き換えたhogehoge";
  Caller.fugafuga = "新たにセットしたfugafuga";
</cfscript>

そしてカスタムタグを使うと、カスタムタグを呼び出す前にセットしたhogehogeが書き換えられますし、カスタムタグ内で新たにセットされたfugafugaの値を取り出すこともできます。

test_customtag.cfm
<cfset hogehoge = "ほげほげ">
<cf_hogecaller>

<cfdump var="#hogehoge#">  <!--- hogecallerタグによって書き換えられた値が出力される --->
<cfdump var="#fugafuga#">  <!--- hogecallerタグによって新たにセットされた値が出力される --->

いやでも、この仕組みはやっぱりソースの可読性が・・・
個人的には、共通の定数定義を読み込むときに使うくらいがいいような気がします。

TODO

時間がある時にまだ書けそうなことがありますね。そのうち追記します。

  • 終了タグを使った処理の書き方
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?