Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
28
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@ogrszk

FreeMarkerでちょくちょく見る記法や、おっ!と感じたTips集

こんにちは、スマートフォン向けソーシャルゲームのフロントエンドやってます。
うちのプロジェクトではFreeMarkerというJavaのテンプレートエンジンを使っています。

Freemarkerのリファレンスの使い方でよく使用するものを日本語でまとめ

こちらのブログは簡潔で分かりやすく、とても気に入っています。
ただ、ここに書かれてはいないけれど、よく使われているものは当たり前ですがまだ沢山あります。
今までプロジェクト内で見てきたもので、この書き方いいなあと思ったものや、自分が書いたものでこれはまたそのうち書きそうだな、と感じたものを少しだけコメントも交えてまとめようと思います。

上記の記事の内容を一通り頭に入れた後にこの記事を見ると、うちのプロジェクトの大抵のページのコードがFreeMarkerの観点でいえば、問題なく読めることを目指しています。


?string

flg?string('hoge', 'fuga') - 三項演算子みたいな

<#assign flg = true>
${flg?string('flgはtrue', 'flgはfalse')}

flgはtrue

jsでいうflg ? 'hoge' : 'fuga'みたいなことができます。

date?string('yyyyMMddHHmmss') - 日付表現

<#assign date = 201503252200?datetime('yyyyMMddHHmm')>
${date?string('yyyy年MM月dd日HH時mm分')}

2015年03月25日22時00分

seconds?string('00') - ゼロ埋め

<#assign restTime = {'minutes' : 5, 'seconds' : 3}>
${restTime.minutes}:${restTime.seconds?string('00')}

5:03

「0:00」のような表記をしたいのに、数値型で値が来てしまい「0:0」となってしまうのを防げます。

その他ビルトイン

?datetime('yyyyMMddHHmm')

<#assign dateNum = 201511262200>
${dateNum?datetime('yyyyMMddHHmm')?string('MM月dd日')},

<#assign dateStr = '2015年11月26日22時00分'>
${dateStr?datetime('yyyy年MM月dd日HH時mm分')?string('yyyy/MM/dd HH:mm')}

11月26日, 2015/11/26 22:00

大文字、小文字、一文字目大文字

<#assign str = 'hoGe'>
${str?upper_case}, ${str?lower_case}, ${str?capitalize}

HOGE, hoge, Hoge

#{q} - 小数を四捨五入せずに表示

<#assign q = 2.6>
${q}, #{q}

3, 2.6

list

1..n - 配列なしで指定回数回したいとき

<#assign n = 5>
<#list 0..n as i>
    ${i}
</#list>

0 1 2 3 4 5

Tips

<#assign list = list + [item]>

<#assign inputList = ['hoge', 'fuga']>

<#assign outputList = []>
<#list inputList as item>
    <#assign outputList = outputList + [item]>
</#list>

<#list outputList as out>
    ${out}
</#list>

hoge fuga

push(item)みたいなことができるのか、なるほどと感じました。

${['zero', 'one', 'two', 'three'][n]}

<#assign n = 2>
${['zero', 'one', 'two', 'three'][n]}

two

数字って素晴らしいなと思いました。

${item['${key}']}

<#assign item = {'name': 'hoge'}>
<#assign key = 'name'>
${item['${key}']}

hoge

入れ子にできるみたいで書いてて驚きました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
28
Help us understand the problem. What are the problem?