Cookieを使ったメモと計算 ColdFusion編

元記事はこちらです。

■Application.cfm

<cfsetting enableCFoutputOnly="yes">
<cfapplication name="#hash(GetDirectoryFromPath(GetCurrentTemplatePath()))#">

<cfset request.cookie_st = "t001">	<!--- 他のシステムとCookie変数がかぶらないようにするためのもの --->

■index.cfm

<cfset cst_exec()>
<!---=================================================================
cst_exec
    ※output="no"の場合、呼んだ関数で表示しても、表示されない
==================================================================--->
<cffunction name="cst_exec" returnType="void" output="yes">
    <cfset var local = structNew()>

    <!--- 変数セット --->
    <cfset cst_setValue("u", "0")>
    <cfset cst_setValue("r", "0")>
    <cfset cst_setValue("k", "0")>
    <cfloop index="local.idx" from="1" to="6">
        <cfset cst_setValue("title#local.idx#", "title#local.idx#")>
    </cfloop>
    <cfloop index="local.idx" from="1" to="6">
        <cfset cst_setValue("memo#local.idx#", "")>
    </cfloop>

    <cfset cst_dsp()>   <!--- 画面表示 --->
</cffunction>
<!---=================================================================
cst_dsp
==================================================================--->
<cffunction name="cst_dsp" returnType="void" output="yes">
    <cfset var local = structNew()>

    <cfoutput>
    <html>
    <head>
        <title>test</title>
    </head>
    <body>

    <script>
    <!--
    function js_keyChk(obj) {
        var str = obj.value;
        var str2 = "";
        for(i=str.length;i--;) {
            if(str.charCodeAt(i) >= '0'.charCodeAt(0) && str.charCodeAt(i) <= '9'.charCodeAt(0)) {
                str2 = str.charAt(i) + str2;
            }
        }
        obj.value = str2;
    }
    //-->
    </script>
    <style type="text/css">
    <!--
    input.num {
        text-align:right;
        }
    input.t_clr {
        border: 0;
        background: lightskyblue;
        }
    table {
        margin:5px 5px 0px 0px;
        padding:5px 5px 0px 5px;
        border: 1px black solid;
        border-collapse: collapse;
        border-spacing: 0;
        }
    table th {
        white-space: nowrap;
        padding: 5px;
        border: black solid;
        border-width: 0 0 1px 1px;
        background: lightskyblue;
        font-weight: bold;
        line-height: 120%;
        text-align: center;
        }
    table td {
        white-space: nowrap;
        background: white;
        padding: 5px;
        border: 1px black solid;
        border-width: 0 0 1px 1px;
        }
    //-->
    </style>

    <!--- 計算 --->
    <cfset local.mr = Ceiling(form.r / 10000)*10000>
    <cfset local.ms = 0>
    <cfset local.m = 0>
    <cfset local.zan = form.u - local.mr>
    <cfif local.zan gt form.k>
        <cfset local.tmp = local.zan - form.k>
        <cfset local.ms = int(local.tmp / 10000)*10000>
    </cfif>
    <cfset local.m = local.mr + local.ms>

    <form name="frm" action="#cgi.script_name#" method="post">
    <table>
        <tr>
            <td colspan="2">&nbsp;</td>
            <th>memo</th>
        </tr>
        <tr>
            <th>
                <input type="text" name="title1" size="15" class="t_clr" value="#form.title1#">
            </th>
            <td>
                <input type="text" name="u" size="10" maxlength="10" class="num" value="#form.u#"
                        onKeyup="js_keyChk(this)">
            </td>
            <td>
                <input type="text" name="memo1" size="30" value="#form.memo1#">
            </td>
        </tr>
        <tr>
            <th>
                <input type="text" name="title2" size="15" class="t_clr" value="#form.title2#">
            </th>
            <td>
                <input type="text" name="r" size="10" maxlength="10" class="num" value="#form.r#"
                        onKeyup="js_keyChk(this)">
            </td>
            <td>
                <input type="text" name="memo2" size="30" value="#form.memo2#">
            </td>
        </tr>
        <tr>
            <th>
                <input type="text" name="title3" size="15" class="t_clr" value="#form.title3#">
            </th>
            <td align="right">#numberformat(local.mr)#</td>
            <td>
                <input type="text" name="memo3" size="30" value="#form.memo3#">
            </td>
        </tr>
        <tr>
            <th>
                <input type="text" name="title4" size="15" class="t_clr" value="#form.title4#">
            </th>
            <td>
                <input type="text" name="k" size="10" maxlength="10" class="num" value="#form.k#"
                        onKeyup="js_keyChk(this)">
            </td>
            <td>
                <input type="text" name="memo4" size="30" value="#form.memo4#">
            </td>
        </tr>
        <tr>
            <th>
                <input type="text" name="title5" size="15" class="t_clr" value="#form.title5#">
            </th>
            <td align="right">#numberformat(local.ms)#</td>
            <td>
                <input type="text" name="memo5" size="30" value="#form.memo5#">
            </td>
        </tr>
        <tr>
            <th>
                <input type="text" name="title6" size="15" class="t_clr" value="#form.title6#">
            </th>
            <td align="right">#numberformat(local.m)#</td>
            <td>
                <input type="text" name="memo6" size="30" value="#form.memo6#">
            </td>
        </tr>
    </table>
    <input type="submit" value="CALC">
    </form>

    </body>
    </html>
    </cfoutput>
</cffunction>
<!---=================================================================
cst_setValue
    変数セット(form,cookie)
==================================================================--->
<cffunction name="cst_setValue" returnType="void" output="no">
    <cfargument name="v_nm" type="string" required ="yes">
    <cfargument name="def"  type="string" required ="yes">

    <!--- formがあった場合 --->
    <cfif StructKeyExists(form, arguments.v_nm)>
        <cfcookie name="#request.cookie_st#.#arguments.v_nm#" expires="never" value="#form[arguments.v_nm]#">
    <cfelse>
        <cfset form[arguments.v_nm] = arguments.def>
        <!--- cookieがあった場合 --->
<!--- NG cookieの配下には構造体はないらしい。ドットがはいったキー名
        <cfif StructKeyExists(cookie, request.cookie_st)>
            <cfif StructKeyExists(cookie[request.cookie_st], arguments.v_nm)>
                <cfset form[arguments.v_nm] = cookie[request.cookie_st][arguments.v_nm]>
            </cfif>
        </cfif>
--->
<!--- OK
        <cfif isDefined("cookie.#request.cookie_st#.#arguments.v_nm#")>
            <cfset form[arguments.v_nm] = evaluate("cookie.#request.cookie_st#.#arguments.v_nm#")>
        </cfif>
--->
        <!--- OK --->
        <cfif StructKeyExists(cookie, "#request.cookie_st#.#arguments.v_nm#")>
            <cfset form[arguments.v_nm] = cookie["#request.cookie_st#.#arguments.v_nm#"]>
        </cfif>

    </cfif>
</cffunction>