<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    不做浮躁的人
    正在行走的人...
    posts - 171,  comments - 51,  trackbacks - 0
    <# ... > 中存放所有freemaker的內(nèi)容,之外的內(nèi)容全部原樣輸出。
    <@ ... /> 是函數(shù)調(diào)用
    兩個(gè)定界符內(nèi)的內(nèi)容中,第一個(gè)符號(hào)表示指令或者函數(shù)名,其后的跟隨參數(shù)。freemaker提供的控制包括如下:
    <#if condition><#elseif condition><#else></#if> 條件判斷
    <#list hash_or_seq as var></#list> 遍歷hash表或者collection(freemaker稱作sequence)的成員
    <#macro name param1 param2 ... ><#nested param></#macro> 宏,無(wú)返回參數(shù)
    <#function name param1 param2><#return val></#function>函數(shù),有返回參數(shù)
    var?member_function(...) 用函數(shù)對(duì)var進(jìn)行轉(zhuǎn)換,freemaker稱為build-ins。實(shí)際內(nèi)部實(shí)現(xiàn)類似member_function(var, ...)
    stringA[M .. N] 取子字符串,類似substring(stringA, M, N)
    {key:value, key2:value2 ...} 直接定義一個(gè)hash表
    [item0, item1, item2 ...] 直接定義一個(gè)序列
    hash0[key0] 存取hash表中key對(duì)應(yīng)的元素
    seq0[5] 存取序列指定下標(biāo)的元素
    <@function1 param0 param1 ... /> 調(diào)用函數(shù)function1
    <@macro0 param0 param1 ; nest_param0 nest_param1 ...> nest_body <
    /@macro > 調(diào)用宏,并處理宏的嵌套
    <#assign var = value > 定義變量并初始化
    <#local var = value> 在 macro 或者 function 中定義局部變量并初始化
    <#global var = value > 定義全局變量并初始化
    ${var} 輸出并替換為表達(dá)式的值
    <#visit xmlnode> 調(diào)用macro匹配xmlnode本身及其子節(jié)點(diǎn)
    <#recurse xmlnode> 調(diào)用macro匹配xmlnode的子節(jié)點(diǎn)



    <#if condition > </#if>
    <#list SequenceVar as variable > repeatThis </#list>
    <#include "/copyright_footer.html">

    一個(gè)ftl標(biāo)記不能放在另外一個(gè)ftl標(biāo)記里面,但是注釋標(biāo)記能夠放在ftl標(biāo)記里面。

    系統(tǒng)預(yù)定義指令采用<#...></#>
    用戶自定義指令采用<@...></@>

    hash片段可以采用:
    products[10..19] or products[5..] 的格式。

    序列也可以做加法計(jì)算:passwords + {"joe":"secret42"}

    缺省值: name!"unknown"?或者 (user.name)!"unknown"?或者 name!?或者 (user.name)!

    null值檢查: name?? or (user.name)??

    轉(zhuǎn)義列表:

    Escape sequence

    Meaning

    \"

    Quotation mark (u0022)

    \'

    Apostrophe (a.k.a. apostrophe-quote) (u0027)

    \\

    Back slash (u005C)

    \n

    Line feed (u000A)

    \r

    Carriage return (u000D)

    \t

    Horizontal tabulation (a.k.a. tab) (u0009)

    \b

    Backspace (u0008)

    \f

    Form feed (u000C)

    \l

    Less-than sign: <

    \g

    Greater-than sign: >

    \a

    Ampersand: &

    \{

    Curly bracket: {

    \xCode

    Character given with its hexadecimal Unicode code (UCS code)


    如果想打印${,則需要將{轉(zhuǎn)義,可以寫(xiě)成"$\{user}",或者可以用生字符(r指令):$(r "${xx}"}

    序列構(gòu)成:<#list ["winter", "spring", "summer", "autumn"] as x>${x}</#list>

    不同的對(duì)象可以存放在一個(gè)序列里面,比如:[2 + 2, [1, 2, 3, 4], "whatnot"]. 第一個(gè)是數(shù)字,第二個(gè)是序列,第三個(gè)是字符串。

    可用采用start..end的方式來(lái)定義一個(gè)數(shù)字序列,start可以小于end,同時(shí),end也可以省略。

    hash取值支持一下四種模式:book.author.name, book["author"].name, book.author.["name"], book["author"]["name"].

    特殊變量是指freemaker引擎本身定義的變量。訪問(wèn)時(shí),以.variable_name的語(yǔ)法訪問(wèn)。

    變量表達(dá)式支持嵌套模式,比如:${"Hello ${user}!"}。

    變量表達(dá)式在指令中的使用情況:
    變量表達(dá)式可以在指令中,用“”的方式存在,不如:<#include "/footer/${company}.html">.
    但是不允許下面的方式存在: <#if ${isBig}>Wow!</#if>,?正確寫(xiě)法是:<#if isBig>Wow!</#if>.
    而且 <#if "${isBig}">Wow!</#if>寫(xiě)法也不正確,因?yàn)?${isBig}"返回的是字符串,不是boolean類型。

    字符串中取字符或字符串采用以下語(yǔ)法:${user[0]},${user[0..2]} ${user[4..]},${user?string(4)}

    序列操作:
    ???加法:<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user> 但要注意串聯(lián)之后的讀取速度變慢。
    ???子序列:seq[1..4]

    序列和hash的串聯(lián)都只能用于兩個(gè)相加,不能有多個(gè)相加的模式,hash相加,如果兩個(gè)相加的hash存在相同的key,則后面會(huì)覆蓋前面的。

    在使用>=或者>時(shí),需要注意一些問(wèn)題,因?yàn)閒reemaker會(huì)將>解釋成標(biāo)記的關(guān)閉符,為了解決這個(gè)問(wèn)題,需要在表達(dá)式加上括號(hào),比如: <#if (x > y)>.?或者使用 &gt; and &lt符號(hào)來(lái)代替。

    無(wú)值變量(包括無(wú)該變量,null,返回void,無(wú)屬性等):unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!
    缺省值可以是任何類型,不一定是數(shù)字,比如:hits!0?或者 colors!["red", "green", "blue"].

    如果缺省值忽略,那么將會(huì)默認(rèn)為空串、空序列或者空hash,因?yàn)閒reemarker支持多類型的值。不過(guò)要讓默認(rèn)值為0或false,則不能省略缺省值。

    非頂層變量的無(wú)值處理:
    ???product.color!"red":只處理product不為空,color為空的缺省值處理,如果product為空,則freemaker會(huì)拋出異常。(product.color)!"red":則會(huì)處理product為空,color為空,或者沒(méi)有color屬性的無(wú)值情況。

    無(wú)值變量的判斷操作:unsafe_expr?? or (unsafe_expr)??

    判斷變量是否是無(wú)值。

    普通變量插入方式: ${expression},${3+5);
    數(shù)字變量插入方式: #{expression} or #{expression; format}:過(guò)期。
    變量只能用于文本區(qū)或者是字符串里面,比如:<h1>Hello ${name}!</h1>以及 <#include "/footer/${company}.html">

    數(shù)字值的插入:根據(jù)缺省的number_format輸出,以及可以通過(guò)setting來(lái)達(dá)到設(shè)置數(shù)字格式的目的,也可以通過(guò)內(nèi)置函數(shù)string來(lái)改變輸出格式。

    日期類型的格式設(shè)置:date_format, time_format?和 datetime_format


    定義宏:
    ???不帶參數(shù):<#macro 宏名>...</#macro>,引用<@宏名 />
    ???帶參數(shù):<#macro 宏名 參數(shù)...>...</#macro>,引用<@宏名 參數(shù)1=值1.../>,帶有參數(shù)的宏,調(diào)用是參數(shù)的值必須和參數(shù)的個(gè)數(shù)相同。當(dāng)然也可以在宏定義時(shí)給參數(shù)一些默認(rèn)值。比如:<#macro greet person color="black">


    宏里面的嵌套內(nèi)容:
    <#macro border>
    ? <table border=4 cellspacing=0 cellpadding=4><tr><td>
    ??? <#nested>
    ? </tr></td></table>
    </#macro>?
    在宏的定義body中加入<#nested>指令。嵌套的內(nèi)容可以是任何正確的ftl塊。

    宏的本地變量在嵌套內(nèi)容中是不可見(jiàn)的。

    宏定義時(shí),<#nest>指令相當(dāng)于調(diào)用定義的內(nèi)容,而使用宏時(shí),nest body相當(dāng)于定義。
    <#macro repeat count>
      <#list 1..count as x>
        <#nested x, x/2, x==count>
      </#list>
    </#macro>
    <@repeat count=4 ; c, halfc, last>
      ${c}. ${halfc}<#if last> Last!</#if>
    </@repeat>?


    定義變量:
    ???在模板中定義的變量將會(huì)隱藏(不是更改)數(shù)據(jù)模型根下面的同名的變量。

    模板中的3種類型變量:
    ???1:plain variables,能夠在模板中的任何地方訪問(wèn),一個(gè)模板include另外一個(gè)模板,也可以訪問(wèn)被包含模板的變量??梢酝ㄟ^(guò)assign或者macro指令產(chǎn)生或替換變量。
    ???如果要訪問(wèn)數(shù)據(jù)模型中的變量,則可以通過(guò).global來(lái)訪問(wèn):
    ???<#assign user = "Joe Hider">
    ???${user}????????? <#-- prints: Joe Hider -->
    ???${.globals.user} <#-- prints: Big Joe-->?
    ???2:Local variables,宏定義body中用local指令創(chuàng)建或者替換。
    ???3:Loop variables:由list指令產(chǎn)生。


    namespaces:
    <#import "/lib/my_test.ftl" as my> <#-- the hash called "my" will be the "gate" -->
    <@my.copyright date="1999-2002"/>
    ${my.mail}?

    設(shè)置命名空間里面的變量:<#assign mail="jsmith@other.com" in my>

    命名空間與數(shù)據(jù)模型:命名空間的ftl可以訪問(wèn)數(shù)據(jù)模型的變量。同樣命名空間的變量也會(huì)隱藏?cái)?shù)據(jù)模型中同名的變量。

    空白問(wèn)題:
    1:White-space stripping,默認(rèn)為enabled,清除ftl標(biāo)記帶來(lái)的空白以及縮進(jìn)。處理模板的空白。
    2:t, rt, lt指令。
    3:ftl的參數(shù)strip_text.

    用compress directive或者transform來(lái)處理輸出。
    <#compress>...</#compress>:消除空白行。
    <@compress single_line=true>.../@compress將輸出壓縮為一行。

    可替換語(yǔ)法:
    freemarker可用"["代替"<".在模板的文件開(kāi)頭加上[#ftl].
    posted on 2007-03-27 01:03 不做浮躁的人 閱讀(2890) 評(píng)論(2)  編輯  收藏 所屬分類: freemarker

    FeedBack:
    # re: freemaker學(xué)習(xí)筆記--設(shè)計(jì)指導(dǎo)
    2007-06-21 14:56 | 阿潔
    呵呵,指導(dǎo)的不錯(cuò)。謝謝你了。
    但是我覺(jué)得缺少一些簡(jiǎn)單的例子,這樣可以更有力于初學(xué)者學(xué)習(xí)快速學(xué)習(xí)一門(mén)新技術(shù)。學(xué)習(xí)能走捷徑就走捷徑!  回復(fù)  更多評(píng)論
      
    # re: freemaker學(xué)習(xí)筆記--設(shè)計(jì)指導(dǎo)
    2009-01-16 18:01 | dsfds
    <><><><><><><>  回復(fù)  更多評(píng)論
      

    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(9)

    隨筆分類(31)

    隨筆檔案(75)

    文章分類(1)

    文章檔案(3)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 日韩精品视频在线观看免费| 亚洲国产精品久久久久婷婷软件 | 亚洲乱码中文字幕小综合| 久久久综合亚洲色一区二区三区| 亚洲精品在线视频| 精品亚洲视频在线观看| 亚洲午夜国产片在线观看| 亚洲人成网站18禁止一区 | 最近新韩国日本免费观看| 日韩在线永久免费播放| 57pao国产成永久免费视频| **aaaaa毛片免费| 国产在线a免费观看| 好爽…又高潮了免费毛片| 国产禁女女网站免费看| 亚洲AV无码乱码在线观看性色扶| 亚洲Av无码国产情品久久| 亚洲一级片免费看| 亚洲成AV人片在线观看| 久久国产亚洲高清观看| 在线亚洲高清揄拍自拍一品区| 亚洲第一成年免费网站| 深夜免费在线视频| 任你躁在线精品免费| 亚洲黄色免费网站| 午夜成人免费视频| 亚洲精品国产V片在线观看| 好看的电影网站亚洲一区| 亚洲综合激情另类小说区| 亚洲成人激情小说| 免费国产黄网站在线观看动图| 中文在线免费不卡视频| 在线人成精品免费视频| 成人片黄网站A毛片免费| 亚洲Av无码国产情品久久| 亚洲av不卡一区二区三区| 亚洲中文字幕久久精品蜜桃 | 自怕偷自怕亚洲精品| 亚洲欧美熟妇综合久久久久| 一本岛v免费不卡一二三区| 少妇太爽了在线观看免费视频|