2011-11-16
■[ColdFusion]XMLデータの書き込みをColdFusionで大文字小文字の区別をつけるには?(大文字小文字の区別なし)
元記事はこちらです。
■Application.cfm
<cfapplication name="#hash(GetDirectoryFromPath(GetCurrentTemplatePath()))#">
■index.cfm
<!---///////////////////////////////////////////////////////////////// xmlデータのattributes部分の追加 ※大文字小文字を区別する方法 url.kbn="":大文字 url.kbn<>"":大文字小文字 //////////////////////////////////////////////////////////////////---> <cfparam name="url.kbn" default=""> <!--- 処理 ---> <cfset cst_exec()> <!---================================================================= cst_exec ==================================================================---> <cffunction name="cst_exec" returnType="void" output="no"> <cfset var local = structNew()> <!--- 絶対パス取得 ---> <cfset local.path = GetDirectoryFromPath(GetCurrentTemplatePath())> <cfset local.inF = local.path & "in.xml"> <cfset local.outF = local.path & "out.xml"> <!--- xml読み込み ---> <cffile action="read" file = "#local.inF#" variable = "local.data" charset = "utf-8"> <cfset local.xml = XmlParse(local.data)> <cfset arrayPrepend(local.xml.App.XmlChildren, XmlElemNew(local.xml,"Command"))> <!--- 大文字 ---> <cfif url.kbn eq ""> <cfset local.xml.App.Command.XmlAttributes.Action = "APPEND"> <!--- 大文字小文字 ---> <cfelse> <cfset local.xml.App.Command.XmlAttributes["Action"] = "APPEND"> </cfif> <cfset arrayAppend(local.xml.App.Command.XmlChildren, XmlElemNew(local.xml,"ID"))> <cfset local.xml.App.Command.ID.XmlText = "bbb"> <cfset arrayAppend(local.xml.App.Command.XmlChildren, XmlElemNew(local.xml,"Name"))> <cfset local.xml.App.Command.Name.XmlText = "bbb name"> <!--- xml書き込み ---> <cffile action="write" file = "#local.outF#" output="#toString(local.xml)#" charset = "utf-8"> </cffunction>
■in.xml
<App>
<Command Action="Delete">
<ID>aaa</ID>
</Command>
</App>
■[ColdFusion]XMLデータの書き込みをColdFusionで大文字小文字の区別をつけるには?(大文字小文字の区別あり)
元記事はこちらです。
■index1.cfm
<!---///////////////////////////////////////////////////////////////// xmlデータのattributes部分の追加 ※大文字小文字を厳密にする //////////////////////////////////////////////////////////////////---> <!--- 処理 ---> <cfset cst_exec()> <!---================================================================= cst_exec ==================================================================---> <cffunction name="cst_exec" returnType="void" output="no"> <cfset var local = structNew()> <!--- 絶対パス取得 ---> <cfset local.path = GetDirectoryFromPath(GetCurrentTemplatePath())> <cfset local.inF = local.path & "in.xml"> <cfset local.outF = local.path & "out1.xml"> <!--- xml読み込み ---> <cffile action="read" file = "#local.inF#" variable = "local.data" charset = "utf-8"> <cfset local.xml = XmlParse(local.data, true)> <cfset arrayPrepend(local.xml["App"].XmlChildren, XmlElemNew(local.xml,"Command"))> <cfset local.xml["App"]["Command"].XmlAttributes["Action"] = "APPEND"> <cfset arrayAppend(local.xml["App"]["Command"].XmlChildren, XmlElemNew(local.xml,"ID"))> <cfset local.xml["App"]["Command"].ID.XmlText = "bbb"> <cfset arrayAppend(local.xml["App"]["Command"].XmlChildren, XmlElemNew(local.xml,"Name"))> <cfset local.xml["App"]["Command"]["Name"].XmlText = "bbb name"> <!--- xml書き込み ---> <cffile action="write" file = "#local.outF#" output="#toString(local.xml)#" charset = "utf-8"> </cffunction>
avex trax
購入: 1人 クリック: 20回
購入: 1人 クリック: 20回
エイベックス・エンタテインメント
購入: 6人 クリック: 61回
購入: 6人 クリック: 61回
2011-11-09
■[ColdFusion]ColdFusionで簡単バックアップ
元記事はこちらです。
■Application.cfm
<cfapplication name="#hash(GetDirectoryFromPath(GetCurrentTemplatePath()))#"> <cfset request.mail_from = "xxx@yyy.com"> <cfset request.mail_to = "xxx@yyy.com"> <cfset request.subj = "cf backup test">
■index.cfm
<!---///////////////////////////////////////////////////////////////// backup 1.xcopy.xml内のtoに$date$がある場合は、当日に日付でバックアップ 2.xcopy-excludelist.txtに除外する拡張子など設定 //////////////////////////////////////////////////////////////////---> <!--- 処理 ---> <cfset cst_exec()> <!---================================================================= cst_exec ==================================================================---> <cffunction name="cst_exec" returnType="void" output="no"> <cfset var local = structNew()> <!--- 絶対パス取得 ---> <cfset local.path = GetDirectoryFromPath(GetCurrentTemplatePath())> <cfset local.bat = local.path & "xcopy.bat"> <cfset local.xlist = "/EXCLUDE:" & local.path & "xcopy-excludelist.txt"> <!--- xmlデータ抽出 ---> <cfset local.qry = cst_getData()> <cfset local.data = ""> <cfloop query="local.qry"> <!--- toに$date$がある場合はyyyymmddに変換する ---> <cfset local.to = replace(local.qry.to, "$date$", "#dateformat(now(),'yyyymmdd')#")> <!--- xcopyを呼び出す ---> <cfexecute name = "#local.bat#" arguments = "#local.qry.from# #local.to# #local.xlist#" timeout = "5" variable = "local.tmp"/> <cfset local.data = local.data & local.tmp> </cfloop> <!--- logをメール送信する ---> <cfmail from="#request.mail_from#" to="#request.mail_to#" subject="#request.subj#"> #local.data# </cfmail> </cffunction> <!---================================================================= cst_getData ==================================================================---> <cffunction name="cst_getData" returnType="query" output="no"> <cfset var local = structNew()> <cfset local.qry = QueryNew("from,to","varchar,varchar")> <!--- 絶対パス取得 ---> <cfset local.zPath = GetDirectoryFromPath(GetCurrentTemplatePath()) & "xcopy.xml"> <!--- xml読み込み ---> <cffile action="read" file = "#local.zPath#" variable = "local.data" charset = "utf-8"> <cfset local.xml = XmlParse(local.data)> <cfset local.data2 = xmlSearch(local.xml, "/xcopy/data")> <cfloop index="local.idx" array="#local.data2#"> <cfset local.from = local.idx.from.XmlText> <cfset local.to = local.idx.to.XmlText> <cfset QueryAddRow(local.qry)> <cfset QuerySetCell(local.qry, "from", local.from)> <cfset QuerySetCell(local.qry, "to", local.to)> </cfloop> <cfreturn local.qry> </cffunction>
<xcopy>
<data>
<from>d:\pgm\test001</from>
<to>d:\bak\test001</to>
</data>
<data>
<from>d:\pgm\test002</from>
<to>d:\bak\test002\$date$</to>
</data>
</xcopy>
■xcopy.bat
xcopy %1 %2\ %3 /D /S /E /H /C /Y /R
■xcopy-excludelist.txt
$~ ~$ ~WRL .tmp .temp IMG00001.DAT .bkf .qic .iso .img .mp3 .wmv .wma outlook.pst Thumbs.db pspbrwse.jbf pagefile.sys win386.swp catalog.wci .ci .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .000 .001 .002 .003 .004 .005 .006 .007 .008 .009 .log @done @work @backup
2011-01-10
■[ColdFusion]ClearDBを使ってみた
元記事はこちらです。
■Application.cfm
<cfprocessingdirective pageEncoding = "UTF-8"> <cfsetting enableCFoutputOnly="yes"> <cfapplication name="#hash( getCurrentTemplatePath() )#" sessionmanagement="yes" sessiontimeout=#CreateTimeSpan(1, 0, 0, 0)# > <cfset request.proxyServer = ""> <cfset request.proxyPort = "80"> <cfset request.username = "xxx"> <cfset request.password = "yyy"> <cfset request.CLR_URL = "http://www.cleardb.com/v1/api.php?action="> <cfparam name="application.s_id" default=""> <cfif (application.s_id eq "")> <cflock scope="application" timeout="60"> <cfset application.s_id = cmn_login()> </cflock> </cfif> <!---=============================== cmn_login sessionIDを返す ================================---> <cffunction name="cmn_login" access="public" returnType="string" output="no"> <cfset var ret = ""> <cfhttp timeout="60" url="#request.CLR_URL#login" proxyServer="#request.proxyServer#" proxyPort="#request.proxyPort#" method = "post"> <cfhttpparam type="formField" name="username" value="#request.username#"> <cfhttpparam type="formField" name="password" value="#request.password#"> </cfhttp> <cfif (cfhttp.filecontent eq "")> <cfreturn ""> </cfif> <cfset ret = DeserializeJSON(cfhttp.filecontent)> <cfreturn ret.response> </cffunction> <!---=============================== cmn_sqlQuery ================================---> <cffunction name="cmn_sqlQuery" access="public" returnType="struct" output="no"> <cfargument name="s_id" type="string" required="yes"> <cfargument name="qry" type="string" required="yes"> <cfhttp timeout="60" url="#request.CLR_URL#sqlQuery" proxyServer="#request.proxyServer#" proxyPort="#request.proxyPort#" method = "post"> <cfhttpparam type="formField" name="session_id" value="#arguments.s_id#"> <cfhttpparam type="formField" name="query" value="#arguments.qry#"> </cfhttp> <cfreturn DeserializeJSON(cfhttp.filecontent)> </cffunction>
■insert.cfm
<cfset local = structNew()> <cfloop index="local.line" file="#expandpath("data.txt")#"> <cfif listLen(local.line, chr(9)) eq 3> <cfset local.asin = ListGetAt(local.line, 1, chr(9))> <cfset local.title = ListGetAt(local.line, 2, chr(9))> <cfset local.kin = ListGetAt(local.line, 3, chr(9))> <cfsavecontent VARIABLE ="local.tmp"> <cfoutput> insert into TEST_001 ( ASIN,TITLE,KIN )values( '#local.asin#', '#local.title#', #local.kin# ) </cfoutput> </cfsavecontent> <cfset local.data = cmn_sqlQuery(application.s_id, local.tmp)> </cfif> </cfloop>
■view.cfm
<cfprocessingdirective pageEncoding = "UTF-8"> <cfparam name="url.order" default="asin"> <cfset local = structNew()> <cfsavecontent VARIABLE ="local.tmp"> <cfoutput> select * from TEST_001 order by #url.order# </cfoutput> </cfsavecontent> <cfset local.data = cmn_sqlQuery(application.s_id, local.tmp)> <cfoutput> <table border="1" cellspacing=0 cellpadding=0> <cfloop index="local.idx" array="#local.data.response#"> <tr> <td><a href="http://www.amazon.co.jp/exec/obidos/ASIN/#local.idx.asin#/utalab-22/ref=nosim" target="_blank">#local.idx.title#</a></td> <td align="right">#numberformat(local.idx.kin)#円</td> </tr> </cfloop> </table> </cfoutput>
■data.txt(タブくぎりでUTF-8のデータ)
4478015147 Facebookをビジネスに使う本 1500 4797361123 日本でいちばん社員満足度が高い会社の非常識な働き方 1470 4844329685 できるポケット au IS03をスマートに使いこなす基本&活用ワザ150 1344 4820717901 エバーノートとグーグルを使えばすべてのノート・メモ・書類が一元化できる! クラウド情報整理術 1575 4881668625 Twitter×アメブロでビジネスを加速する方法 1554
2010-12-20
■[ColdFusion]Google Baseを使ったサンプル(2)
元記事はこちらです。
■Application.cfm
<cfprocessingdirective pageEncoding = "UTF-8"> <cfsetting enableCFoutputOnly="no"> <cfapplication name="#hash( getCurrentTemplatePath() )#" sessionmanagement="yes" sessiontimeout=#CreateTimeSpan(1, 0, 0, 0)# > <cfset request.url = thisURL()> <cfparam name="session.GToken" default=""> <cfparam name="session.item_type" default=""> <cfset request.proxyServer = ""> <cfset request.proxyPort = "80"> <cfset request.g_key = "xxx"> <cfset request.item=structNew()> <cfset request.item.recipe = "レシピ"> <cfset request.item.book = "書籍"> <cfset request.item.meishi = "名刺"> <!---========================================== thisURL 実行されたURL。ただしファイル名は削除。 例)http://hoge.com/ ===========================================---> <cffunction name="thisURL" access="public" returnType="string" output="no"> <cfset var local = structNew()> <cfset local.server_name = cgi.server_name> <cfif cgi.server_port neq 80> <cfset local.server_name = local.server_name & ":" & cgi.server_port> </cfif> <cfset local.url = "#lcase(ListFirst(cgi.server_protocol,"/"))#://#local.server_name##cgi.script_name#"> <cfset local.url = ListDeleteAt(local.url, ListLen(local.url, "/"), "/") & "/"> <cfreturn local.url> </cffunction>
■index.cfm
<cfprocessingdirective pageEncoding = "UTF-8"> <cfparam name="url.p" default=""> <cfparam name="url.token" default=""> <cfparam name="url.page" default="1"> <cfparam name="form.item_type" default="#session.item_type#"> <cfset iObj = ""> <cfif (form.item_type neq "")> <cfset iObj = createObject("component", "i_#item_type#").init()> <cfset session.item_type = form.item_type> </cfif> <!--- session.GToken ---> <cfif (session.GToken eq "")> <cfif (url.token neq "")> <cfset session.GToken = cst_authSubSessionToken(url.token)> </cfif> </cfif> <!--- 処理 ---> <cfset content = cst_dspMain()> <cfswitch expression = "#url.p#"> <!--- logout ---> <cfcase value="logout"> <cfset session.GToken = ""> </cfcase> <!--- 一覧 ---> <cfcase value="list"> <cfset data = iObj.getData(url.page,3)> <cfset content = content & iObj.dspList(data)> </cfcase> <!--- add ---> <cfcase value="add"> <cfset content = content & iObj.dspAddFm()> </cfcase> <!--- addEnd ---> <cfcase value="addEnd"> <cfset form.id = "http://www.google.com/base/feeds/items/"> <cfset data = iObj.setXmlForm()> <cfset content = content & cst_actionData(form.id, data, "post")> </cfcase> <!--- upd ---> <cfcase value="upd"> <cfset data = iObj.setXmlForm()> <cfset content = content & cst_actionData(form.id, data, "put")> </cfcase> <!--- del ---> <cfcase value="del"> <cfset content = content & cst_actionData(form.id, "", "delete")> </cfcase> <!--- 指定処理以外 ---> <cfdefaultcase> </cfdefaultcase> </cfswitch> <cfif (session.GToken eq "")> <!--- 初期画面表示 ---> <cfset content = "Please <a href='https://www.google.com/accounts/AuthSubRequest?next=#request.url#index.cfm&scope=http%3A%2F%2Fwww.google.com%2Fbase%2Ffeeds%2F&session=1&secure=0'>click here</A> to authorize."> </cfif> <cfset cst_dspLayout(content)> <!---=============================== cst_authSubSessionToken ================================---> <cffunction name="cst_authSubSessionToken" access="public" returnType="string" output="no"> <cfargument name="token" type="string" required="yes"> <cfhttp method="get" url="http://www.google.com/accounts/AuthSubSessionToken" proxyServer ="#request.proxyServer#" proxyPort ="#request.proxyPort#" > <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> <cfhttpparam type="header" name="Authorization" value="AuthSub token=#arguments.token#"> <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#"> </cfhttp> <cfreturn ListLast(cfhttp.filecontent, "=")> </cffunction> <!---=============================== cst_dspMain ================================---> <cffunction name="cst_dspMain" access="public" returnType="string" output="no"> <cfset var local = structNew()> <cfsavecontent variable = "local.ret"> <cfoutput> <form name="srch" method="post"> <select name="item_type"> <option value=""></option> <cfloop item="local.itm" collection="#request.item#"> <option value="#local.itm#" <cfif (form.item_type eq local.itm)>selected</cfif>>#request.item[local.itm]#</option> </cfloop> </select> <input type="button" value="一覧" onClick="js_list()"> <input type="button" value="登録" onClick="js_add()"> <input type="button" value="LOGOUT" onClick="js_logout()"> </form> <script language="JavaScript"> <!-- function js_chkSrch(){ with(document.srch){ if(item_type.value ==""){ alert("select item_type"); return false; } return true; } } function js_list(){ if(!js_chkSrch()) return; with(document.srch){ action = "index.cfm?p=list"; submit(); } } function js_add(){ if(!js_chkSrch()) return; with(document.srch){ action = "index.cfm?p=add"; submit(); } } function js_logout(){ with(document.srch){ action = "index.cfm?p=logout"; submit(); } } //--> </script> </cfoutput> </cfsavecontent> <cfreturn local.ret> </cffunction> <!---=============================== cst_actionData ================================---> <cffunction name="cst_actionData" access="public" returnType="string" output="no"> <cfargument name="id" type="string" required="yes"> <cfargument name="data" type="string" required="yes"> <cfargument name="action" type="string" required="yes"> <cfhttp url="#arguments.id#" method="#arguments.action#" redirect="no" proxyServer ="#request.proxyServer#" proxyPort ="#request.proxyPort#" > <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.GToken#"> <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#"> <cfhttpparam type="Body" value="#arguments.data#"> </cfhttp> <cfif (left(cfhttp.Responseheader.status_code,2) neq "20")> <cfreturn HTMLEditFormat(cfhttp.filecontent)> </cfif> <cfreturn ""> </cffunction> <!---=============================== cst_dspLayout ================================---> <cffunction name="cst_dspLayout" access="public" returnType="void" output="yes"> <cfargument name="content" type="string" required="yes"> <cfcontent type="text/html; charset=utf-8"> <cfoutput> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="content-style-type" content="text/css; charset=utf-8" /> <title>test</title> </head> <body> #arguments.content# </body> </html> </cfoutput> </cffunction>
■item.cfc
<cfcomponent> <cfset variables.listFld = ""><!--- id,title,item_type以外(継承したcfcでセット) ---> <!---/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/ public /=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=---> <!---=============================== init ================================---> <cffunction name="init" access="public" returnType="item" output="no"> <cfreturn this> </cffunction> <!---=============================== getData ================================---> <cffunction name="getData" access="public" returnType="struct" output="no"> <cfargument name="page" type="string" required="yes"> <cfargument name="maxRow" type="string" default="15"> <cfset var local = structNew()> <cfset var ret = structNew()> <cfset local.start = 1 + (arguments.page - 1) * arguments.maxRow> <!--- Initial query string setup ---> <cfset local.queryString="http://www.google.com/base/feeds/items?start-index=#local.start#&max-results=#arguments.maxRow#&bq=[itemtype:#urlencodedformat('#request.item[form.item_type]#')#]"> <cfhttp method="Get" url="#local.queryString#" proxyServer ="#request.proxyServer#" proxyPort ="#request.proxyPort#" > <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.GToken#"> <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#"> </cfhttp> <cfset local.data = xmlparse(cfhttp.filecontent)> <cfset ret.totalResults = local.data.feed["openSearch:totalResults"].XmlText> <cfset ret.maxPage = Ceiling(ret.totalResults / arguments.maxRow)> <cfif (ret.totalResults neq 0)> <cfset local.listFld = "id,title,#variables.listFld#"> <!--- id,titleを追加 ---> <cfset ret.qry = QueryNew(local.listFld)> <cfloop index="local.idx" from="1" to="#arrayLen(local.data.feed.entry)#"> <cfset local.currentData = local.data.feed.entry[local.idx]> <cfset QueryAddRow(ret.qry)> <cfloop index="local.idx" list="#local.listFld#"> <cfif isDefined("local.currentData.#local.idx#")> <cfset local.tmp = ""> <!--- 同じ項目が複数ある場合は、カンマ区切り ---> <cfloop index="local.idx2" from="1" to="#arrayLen(local.currentData[local.idx])#"> <cfset local.cdata = local.currentData[local.idx][local.idx2]> <cfset local.tmp = ListAppend(local.tmp,local.cdata.XmlText)> </cfloop> <cfset QuerySetCell(ret.qry, "#local.idx#", local.tmp)> </cfif> </cfloop> </cfloop> </cfif> <cfreturn ret> </cffunction> <!---=============================== setXmlForm id,title,item_typeと その他text項目だけの分 ================================---> <cffunction name="setXmlForm" access="public" returnType="string" output="no"> <cfset var local = structNew()> <cfset var ret = ""> <!---xml ---> <cfxml variable="ret"> <cfoutput> <?xml version='1.0'?> <entry xmlns='http://www.w3.org/2005/Atom' xmlns:g='http://base.google.com/ns/1.0'> <title type="text">#form.title#</title> <g:item_type type="text">#request.item[form.item_type]#</g:item_type> <cfloop index="local.idx" list="#variables.listFld#"> <g:#local.idx# type="text">#form[local.idx]#</g:#local.idx#> </cfloop> </entry> </cfoutput> </cfxml> <cfreturn toString(ret)> </cffunction> <!---=============================== dspList ================================---> <cffunction name="dspList" access="public" returnType="string" output="no"> <cfargument name="data" type="struct" required="yes"> <cfset var local = structNew()> <cfset var qry = ""> <cfset var ret = ""> <cfset local.listFld = "title,#variables.listFld#"> <!--- titleを追加 ---> <cfsavecontent variable = "ret"> <cfoutput> <cfif (arguments.data.totalResults eq 0)> no data <cfelse> <cfset qry = arguments.data.qry> <table> <tr> <cfloop index="local.idx" list="#local.listFld#"> <td>#local.idx#</td> </cfloop> </tr> <cfloop query="qry"> <form name="frm_#qry.currentRow#" method="post"> <input type="hidden" name="id" value="#qry.id#"> <input type="hidden" name="item_type" value="#form.item_type#"> <tr> <cfloop index="local.idx" list="#local.listFld#"> <cfset local.tmp = ""> <cfif isDefined("qry.#local.idx#")> <cfset local.tmp = qry[local.idx]> </cfif> <td><input type="text" name="#local.idx#" value="#local.tmp#"></td> </cfloop> <td><input type="button" value="upd" onClick="js_upd(#qry.currentRow#)"></td> <td><input type="button" value="del" onClick="js_del(#qry.currentRow#)"></td> </tr> </form> </cfloop> </table> <cfif (url.page gt 1)> <cfset local.page = url.page - 1> <a href="index.cfm?p=list&page=#local.page#">prev</a> </cfif> <cfif (url.page lt arguments.data.maxPage)> <cfset local.page = url.page + 1> <a href="index.cfm?p=list&page=#local.page#">next</a> </cfif> </cfif> <script language="JavaScript"> <!-- function js_upd(pID){ with(eval("document.frm_"+pID)){ action = "index.cfm?p=upd"; submit(); } } function js_del(pID){ with(eval("document.frm_"+pID)){ action = "index.cfm?p=del"; submit(); } } //--> </script> </cfoutput> </cfsavecontent> <cfreturn ret> </cffunction> <!---=============================== dspAddFm ================================---> <cffunction name="dspAddFm" access="public" returnType="string" output="no"> <cfset var local = structNew()> <cfset var ret = ""> <cfset local.listFld = "title,#variables.listFld#"> <!--- titleを追加 ---> <cfsavecontent variable = "ret"> <cfoutput> <form name="frm" action="index.cfm?p=addEnd" method="post"> <input type="hidden" name="item_type" value="#form.item_type#"> <table> <cfloop index="local.idx" list="#local.listFld#"> <tr> <td>#local.idx#</td> <td><input type="text" name="#local.idx#"></td> </tr> </cfloop> </table> <input type="button" value="add" onClick="js_addEnd()"> </form> <script language="JavaScript"> <!-- function js_addEnd(){ with(document.frm){ <cfloop index="local.idx" list="#local.listFld#"> if(#local.idx#.value==""){ alert("please input #local.idx#"); return; } </cfloop> submit(); } } //--> </script> </cfoutput> </cfsavecontent> <cfreturn ret> </cffunction> <!---/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/ private /=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=---> </cfcomponent>
■i_book.cfc
<cfcomponent extends="item"> <cfset variables.listFld = "asin,author,price"><!--- id,title,item_type以外 ---> </cfcomponent>
■i_meishi.cfc
<cfcomponent extends="item"> <cfset variables.listFld = "sei,sei_yomi,mei,mei_yomi,company,tel,fax"><!--- id,title,item_type以外 ---> </cfcomponent>
■i_recipe.cfc
<cfcomponent extends="item"> <cfprocessingdirective pageEncoding = "UTF-8"> <!--- ソース内に画面など書く場合、component内ではここで指定(cfcomponentの上ではエラーとなる) ---> <cfset variables.listFld = "content,cuisine,cooking_time,main_ingredient"><!--- id,title,item_type以外 ---> <!---/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/ public /=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=---> <!---=============================== setXmlForm ================================---> <cffunction name="setXmlForm" access="public" returnType="string" output="no"> <cfset var local = structNew()> <cfset var ret = ""> <!---xml ---> <cfxml variable="ret"> <cfoutput> <?xml version='1.0'?> <entry xmlns='http://www.w3.org/2005/Atom' xmlns:g='http://base.google.com/ns/1.0'> <title type="text">#form.title#</title> <g:item_type type="text">#request.item[form.item_type]#</g:item_type> <content type="xhtml">#form.content#</content> <g:cuisine type="text">#form.cuisine#</g:cuisine> <g:cooking_time type="intUnit">#form.cooking_time#</g:cooking_time> <!--- 複数あり ---> <cfloop index="local.idx" list="#form.main_ingredient#"> <g:main_ingredient type="text">#local.idx#</g:main_ingredient> </cfloop> </entry> </cfoutput> </cfxml> <cfreturn toString(ret)> </cffunction> <!---=============================== dspAddFm ================================---> <cffunction name="dspAddFm" access="public" returnType="string" output="no"> <cfset var local = structNew()> <cfset var ret = ""> <cfset local.listFld = "title,#variables.listFld#"> <!--- titleを追加 ---> <cfsavecontent variable = "ret"> <cfoutput> <form name="frm" action="index.cfm?p=addEnd" method="post"> <input type="hidden" name="item_type" value="#form.item_type#"> <table> <tr> <td>title</td> <td><input type="text" name="title"></td> <td>タイトル</td> </tr> <tr> <td>content</td> <td valign="top"><textarea cols="30" rows="5" name="content"></textarea></td> <td>コンテンツ(htmlタグを使う)</td> </tr> <tr> <td>cuisine</td> <td><input type="text" name="cuisine"></td> </tr> <tr> <td>cooking_time</td> <td><input type="text" name="cooking_time"></td> <td>料理時間(半角数字)</td> </tr> <tr> <td>main_ingredient</td> <td><input type="text" name="main_ingredient"></td> <td>メインとなる材料(複数の場合半角カンマ区切り)</td> </tr> </table> <input type="button" value="add" onClick="js_addEnd()"> </form> <script language="JavaScript"> <!-- function js_addEnd(){ with(document.frm){ <cfloop index="local.idx" list="#local.listFld#"> if(#local.idx#.value==""){ alert("please input #local.idx#"); return; } </cfloop> submit(); } } //--> </script> </cfoutput> </cfsavecontent> <cfreturn ret> </cffunction> </cfcomponent>
2010-12-19
■[ColdFusion]Google Baseを使ったサンプル(1)
元記事はこちらです。
■Application.cfm
<cfprocessingdirective pageEncoding = "UTF-8"> <cfsetting enableCFoutputOnly="no"> <cfapplication name="#hash( getCurrentTemplatePath() )#" sessionmanagement="yes" sessiontimeout=#CreateTimeSpan(1, 0, 0, 0)# > <cfset request.url = thisURL()> <cfparam name="session.GToken" default=""> <cfset request.proxyServer = ""> <cfset request.proxyPort = "80"> <cfset request.g_key = "xxx"> <!---========================================== thisURL 実行されたURL。ただしファイル名は削除。 例)http://hoge.com/ ===========================================---> <cffunction name="thisURL" access="public" returnType="string" output="no"> <cfset var local = structNew()> <cfset local.server_name = cgi.server_name> <cfif cgi.server_port neq 80> <cfset local.server_name = local.server_name & ":" & cgi.server_port> </cfif> <cfset local.url = "#lcase(ListFirst(cgi.server_protocol,"/"))#://#local.server_name##cgi.script_name#"> <cfset local.url = ListDeleteAt(local.url, ListLen(local.url, "/"), "/") & "/"> <cfreturn local.url> </cffunction>
■index.cfm
<cfprocessingdirective pageEncoding = "UTF-8"> <cfparam name="url.p" default=""> <cfparam name="url.token" default=""> <cfparam name="url.page" default="0"> <!--- session.GToken ---> <cfif (session.GToken eq "")> <cfif (url.token neq "")> <cfset session.GToken = cst_authSubSessionToken(url.token)> </cfif> <cfelse> <cfif (url.p eq "init")> <cfset session.GToken = ""> </cfif> </cfif> <!--- 処理 ---> <cfset content = "<a href='index.cfm?p=list'>一覧</a> <a href='index.cfm?p=add'>登録</a><br><br>"> <cfswitch expression = "#url.p#"> <!--- 一覧 ---> <cfcase value="list"> <cfset data = cst_getData(url.page)> <cfset content = content & cst_dspList(data)> </cfcase> <!--- add ---> <cfcase value="add"> <cfset content = content & cst_dspAddFm()> </cfcase> <!--- addEnd ---> <cfcase value="addEnd"> <cfset form.id = "http://www.google.com/base/feeds/items/"> <cfset data = cst_setXmlForm()> <cfset content = content & cst_actionData(form.id, data, "post")> </cfcase> <!--- upd ---> <cfcase value="upd"> <cfset data = cst_setXmlForm()> <cfset content = content & cst_actionData(form.id, data, "put")> </cfcase> <!--- del ---> <cfcase value="del"> <cfset content = content & cst_actionData(form.id, "", "delete")> </cfcase> <!--- 指定処理以外 ---> <cfdefaultcase> <cfif (session.GToken eq "")> <!--- 初期画面表示 ---> <cfset content = "Please <a href='https://www.google.com/accounts/AuthSubRequest?next=#request.url#index.cfm&scope=http%3A%2F%2Fwww.google.com%2Fbase%2Ffeeds%2F&session=1&secure=0'>click here</A> to authorize."> </cfif> </cfdefaultcase> </cfswitch> <cfoutput>#content#</cfoutput> <!---=============================== cst_authSubSessionToken ================================---> <cffunction name="cst_authSubSessionToken" access="public" returnType="string" output="no"> <cfargument name="token" type="string" required="yes"> <cfhttp method="get" url="http://www.google.com/accounts/AuthSubSessionToken" proxyServer ="#request.proxyServer#" proxyPort ="#request.proxyPort#" > <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> <cfhttpparam type="header" name="Authorization" value="AuthSub token=#arguments.token#"> <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#"> </cfhttp> <cfreturn ListLast(cfhttp.filecontent, "=")> </cffunction> <!---=============================== cst_getData ================================---> <cffunction name="cst_getData" access="public" returnType="struct" output="no"> <cfargument name="page" type="string" required="yes"> <cfargument name="maxRow" type="string" default="15"> <cfset var local = structNew()> <cfset var ret = structNew()> <cfset local.start = 1 + arguments.page * arguments.maxRow> <!--- Initial query string setup ---> <cfset local.queryString="http://www.google.com/base/feeds/items?start-index=#local.start#&max-results=#arguments.maxRow#"> <cfhttp method="Get" url="#local.queryString#" proxyServer ="#request.proxyServer#" proxyPort ="#request.proxyPort#" > <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.GToken#"> <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#"> </cfhttp> <cfset local.data = xmlparse(cfhttp.filecontent)> <cfset ret.totalResults = local.data.feed["openSearch:totalResults"].XmlText> <cfif (ret.totalResults neq 0)> <cfset ret.qry = QueryNew("id,title,item_type","varchar,varchar,varchar")> <cfloop index="local.idx" from="1" to="#arrayLen(local.data.feed.entry)#"> <cfset local.currentData = local.data.feed.entry[local.idx]> <cfset QueryAddRow(ret.qry)> <cfset QuerySetCell(ret.qry, "id", local.currentData.id.XmlText)> <cfset QuerySetCell(ret.qry, "title", local.currentData.title.XmlText)> <cfset QuerySetCell(ret.qry, "item_type", local.currentData.item_type.XmlText)> </cfloop> </cfif> <cfreturn ret> </cffunction> <!---=============================== cst_dspList ================================---> <cffunction name="cst_dspList" access="public" returnType="string" output="no"> <cfargument name="data" type="struct" required="yes"> <cfset var local = structNew()> <cfset var qry = ""> <cfset var ret = ""> <cfsavecontent variable = "ret"> <cfoutput> <cfif (arguments.data.totalResults eq 0)> no data <cfelse> <cfset qry = arguments.data.qry> <table> <tr> <td>title</td> <td>item_type</td> </tr> <cfloop query="qry"> <form name="frm_#qry.currentRow#" method="post"> <input type="hidden" name="id" value="#qry.id#"> <tr> <td><input type="text" name="title" value="#qry.title#"></td> <td>#qry.item_type#</td> <input type="hidden" name="item_type" value="#qry.item_type#"> <td><input type="button" value="upd" onClick="js_upd(#qry.currentRow#)"></td> <td><input type="button" value="del" onClick="js_del(#qry.currentRow#)"></td> </tr> </form> </cfloop> </table> </cfif> <script language="JavaScript"> <!-- function js_upd(pID){ with(eval("document.frm_"+pID)){ action = "index.cfm?p=upd"; submit(); } } function js_del(pID){ with(eval("document.frm_"+pID)){ action = "index.cfm?p=del"; submit(); } } //--> </script> </cfoutput> </cfsavecontent> <cfreturn ret> </cffunction> <!---=============================== cst_dspAddFm ================================---> <cffunction name="cst_dspAddFm" access="public" returnType="string" output="no"> <cfset var ret = ""> <cfsavecontent variable = "ret"> <cfoutput> <form name="frm" action="index.cfm?p=addEnd" method="post"> <table> <tr> <td>title</td> <td>item_type</td> </tr> <tr> <td><input type="text" name="title"></td> <td><input type="text" name="item_type"></td> </tr> </table> <input type="button" value="add" onClick="js_add()"> </form> <script language="JavaScript"> <!-- function js_add(){ with(document.frm){ if((title.value=="")||(item_type=="")){ alert("please input all data"); return; } submit(); } } //--> </script> </cfoutput> </cfsavecontent> <cfreturn ret> </cffunction> <!---=============================== cst_setXmlForm ================================---> <cffunction name="cst_setXmlForm" access="public" returnType="string" output="no"> <cfset var ret = ""> <!---xml ---> <cfxml variable="ret"> <cfoutput> <?xml version='1.0'?> <entry xmlns='http://www.w3.org/2005/Atom' xmlns:g='http://base.google.com/ns/1.0'> <title type="text">#form.title#</title> <g:item_type type="text">#form.item_type#</g:item_type> </entry> </cfoutput> </cfxml> <cfreturn toString(ret)> </cffunction> <!---=============================== cst_actionData ================================---> <cffunction name="cst_actionData" access="public" returnType="string" output="no"> <cfargument name="id" type="string" required="yes"> <cfargument name="data" type="string" required="yes"> <cfargument name="action" type="string" required="yes"> <cfhttp url="#arguments.id#" method="#arguments.action#" redirect="no" proxyServer ="#request.proxyServer#" proxyPort ="#request.proxyPort#" > <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.GToken#"> <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#"> <cfhttpparam type="Body" value="#arguments.data#"> </cfhttp> <cfif (left(cfhttp.Responseheader.status_code,2) neq "20")> <cfreturn HTMLEditFormat(cfhttp.filecontent)> </cfif> <cfreturn ""> </cffunction>

