Home

pg-info

Coldfusionでrss出力

今更やけどColdfusionrssの出力。
今まで要件はなかったなぁ・・・。

Coldfusionのバージョンは「9.0.1」です。

Coldfusionにはfeed出力に便利なタグがあるんでこれを利用。
Coldfusionタグ:cffeed

お知らせなんかをrssで出力するcfcを作りました。

<cfcomponent output="false" displayname="outputFeed" hint="FEED出力コンポーネント">
    <cffunction name="createNewsRss" access="public">
        <cfargument name="argDsn" required="true" type="string" hint="データソース名">
        <cfargument name="argNewsUrl" required="true" type="string" default="" hint="ニュース参照URL">
        <cfargument name="argFilePath" required="true" type="string" default="" hint="FeedXML出力パス">

        <!--- FEED項目マップ(このあとで取得するクエリーの列名を設定します) --->
        <cfset columnMapStruct = StructNew()>
        <cfset columnMapStruct.publisheddate = "OPEN_DATE">         <!--- 公開日 --->
        <cfset columnMapStruct.title = "TITLE">                     <!--- 見出し --->
        <cfset columnMapStruct.content = "CONTENTS">                <!--- 内容 --->
        <cfset columnMapStruct.rsslink = "LINK_URL">                <!--- お知らせページのリンク先URL --->
        <cfset columnMapStruct.categorylabel = "CATEGORY_NAME">     <!--- カテゴリーラベル --->

        <!--- お知らせをDBから公開日が新しいもの順で取得します --->
        <cfquery name="qryNews" datasource="#argDsn#">
            select
                NEWS_ID
                ,TITLE
                ,CONTENTS
                ,CATEGORY_NAME
                ,('#argNewsUrl#' + NEWS_ID) as LINK_URL
                ,OPEN_DATE
            from
                NEWS_TABLE
            where
                OPEN_DATE <= <cfqueryparam value="#now()#" cfsqltype="CF_SQL_TIMESTAMP">
            order by
                OPEN_DATE desc
                ,NEWS_ID desc
        </cfquery>

        <cfif qryNews.recordcount gt 0>
            <!--- Set the feed metadata. --->
            <cfset meta.title = "pg-info">                      <!--- サイト名など --->
            <cfset meta.link = "http://pg.4696.info/">          <!--- サイトのURLなど --->
            <cfset meta.description = "in 4696.info">           <!--- サイトの説明など --->
            <cfset meta.version = "rss_2.0">

            <!--- Feedを出力 --->
            <cffeed action="create"
                query="#qryNewsList#"
                properties="#meta#"
                columnMap="#columnMapStruct#"
                xmlvar="rssXML"
                outputFile = "#argFilePath#rss.xml"
                overwrite = "Yes"
                >
<!--- 確認用の画面出力
            <cfdump var="#XMLParse(rssXML)#">
--->
        </cfif>

    </cffunction>
</cfcomponent>

これでお知らせをrss.xmlとして任意のディレクトリに出力することができます。
詳しくは、Coldfusionのcffeedのドキュメントを参照してください。
サンプルのまんま必要な箇所を作っただけなんで

CodeIgniter 2.0.3 で TCPDF

CodeIgniter 2.0.1ja以上2.0.3jaなら全部OK。
2.0.1jaでインストールして今2.0.3jaで使ってるから

  1. TCPDFのダウンロード
    http://sourceforge.net/projects/tcpdf/files/
    ここから最新のzip アーカイブをダウンロードする。
  2. Codeigniterへのインストール
    執筆時点のバージョンは5.9.158なんで
    tcpdf_5_9_158.zipをダウンロード。
    ダウンロードしたファイルを展開。
    展開すると「tcpdf」フォルダがあります。

    この「tcpdf」フォルダを「/application/third_party」フォルダにコピーします。
    今回は「third_party」へのコピーという方法をとっていますが、「/application/libraries」にコピーする方法もあるかと

  3. ユーザーライブラリの作成
    「/application/libraries」にユーザーライブラリファイルを作成。
    「pdf.php」というファイルを追加しました。
    ファイルの内容は次のとおり

    これで、使用する準備は完了。
    あとはコントローラーで、呼び出して使うだけ。

  4. 呼び出しサンプル

Codeigniter で PHPExcel

Codeigniterの使用バージョン 2.0.3 ja

PHPExcelをサイトからダウンロード
PHPExcel
PEAR版もあるが、使っていないので通常版 PHPExcel 1.7.6 (ダウンロード時のバージョン)

ダウンロードファイルを解凍し、以下のファイルをCodeigniterの application/libraries にコピー
PHPExcel1.7.6\Classes\PHPExcel
PHPExcel1.7.6\Classes\PHPExcel.php

とあるサイトには、

とこのように書かれていましたが、動きません。エラーとなります。
PHPExcelのバージョンも1.7.6と書かれていますが・・・

まず、「PHPExcel/IOFactory」ですが
ファイルの中を見るとクラス名は、「PHPExcel_IOFactory」となっています。
また、「__construct」は「private」です。
ロードできるわけがない。
たぶん、動かしてないんだろう。

実際ダウンロードしたファイルにサンプルが入っているんだが
「IOFactory」をロードする必要なんかないし・・・

実際Codeigniterで動作させたサンプルコードは以下。
ダウンロードするのが目的なんで
test\01simple-download-xls.php を Codeigniter に組み込みました。

これをVIEWからリンクなどで呼び出すと「01simple.xls」ファイルとしてダウンロードできます。
日本語テストも兼ねてます。

Codeigniter 2.0.1 でxajaxを使用する

以前、xajaxCodeigniter 1.7.1に組み込んだのだが
その時はpluginとして組み込んでみたのだが
2.0でpluginは無くなっているのでlibraryとして組み込む。

xajaxのバージョンは「0.5 Final」
0.6では、PHP 5.3に対応しているようだが
今回のPHPは、5.2系なので「xajax 0.5 Final」を使用する。

xajax-projectのダウンロードページから「xajax 0.5 minimal」をダウンロード。(これはおこのみやね)

ダウンロードして圧縮ファイルを展開
展開された「xajax_core」フォルダごと「/application/libraries」へコピー。
「xajax_core」フォルダを「xajax」へリネーム
「xajax」フォルダの中にある「xajax.inc.php」を「xajax.php」にリネーム。
「xajax_js」フォルダはドキュメントルートへフォルダごとコピー。

これで準備は完了。

あとは、コントローラーファイルでライブラリをロードするだけ。

Codeigniterの「クロスサイトリクエストフォージェリ (CSRF)」をconfigで有効にしている
xajaxは動作しません。
configでは「FALSE」に設定し、各コントローラーで個別に実装する必要があります。

jqueryでは、対応サンプルが公開されているようですが。
AJAX with CSRF Protection in Codeigniter 2.0

今回は、「クロスサイトリクエストフォージェリ (CSRF)」に関しては自動化ではなく、個別実装の方法をとっています。

PHPでExcel

Excel出力の案件があったんでCodeIgniterに組み込んでおく。
今は、暗礁にのりあげてるけどなぁ。

全文を読む

CodeIgniterで複数ファイルを同時アップロード

イメージファイルや文書ファイルを複数同時にアップロードする機能が必要なので
調べたら、あっさりと見つかった。
やっぱ、いるよなぁ、複数ファイルのアップロードって

日本CodeIgniterユーザ会のメーリングリストにログがあって
KuniTsujiのPHP開発日記 サイトにソースがあった。
対象記事はCodeIgniterで複数のファイルをアップする

MY_Upload.phpファイルをsystem/application/libraries/に作成し、こちらのソースをコピーしてクラス名を「MY_Upload」に変更。

で、サンプルフォームを作成して動かしてOKだった。
サンプルソースは、めんどいので$_FILESなんかを使って確認しただけなんで、載せれんな。
それにサムネイル機能もサンプルでやってるんで長いしなぁ。

イメージファイルのサムネイル化なんやけど、KuniTsujiのPHP開発日記にもイメージファイルのリサイズに関する記事が載ってた。
もう既に phpThumbnailer を組み込んだあとに知った・・・・。

CSVファイルの読込

ちょっとColdFusionで追加の作業があったんでメモ。

ColdFusionでCSVファイルを読み込みデータを復元する際に、データの中に”,”(カンマ)、”"”(ダブルクォート)がある場合の対応。

対応方法としては、いくつかあるとは思うけど、探したらちょうどいいUDFが公開されてた。
めんどいし、自分では作りたくなかったけん、よかったわ。
ほんま、ありがたい。

CSVtoArray

CSVtoArrayでは、読み込むCSVのデータ部に”"”(ダブルクォート)がある場合には、出力する際にエスケープをしておく必要がある。

<cfset csvitem = Replace("#csvitem#","""","""""","All")>

CSVtoArrayを使うには、ダウンロードしたファイルをIncludeするか、使う場所にコピーするか。

<cfinclude template="CSVtoArray.cfm">
<cffile action = "read" file = "#Form.File_Path#" variable = "Variables.CsvData">
<cfset Variables.CSVArray = CSVtoArray(Variables.CsvData)>
<cfloop index="i" from="1" to="#ArrayLen(Variables.CSVArray)#">
  ここで処理
</cfloop>

こんな感じかな。
あと、改行コードがデータ部にある場合はだめやったんで、CSV出力するときにエスケープ処理と同時になんかの文字に置き換えてる。

PS.
Syntax Highlighter for WordPress プラグインには、ColdFusionのHighlightは、ない。
wp-synhighlightにはあったわ。
やっぱマイナー言語なんやろな。

TCPDFのインストール

TCPDFxajaxと同じようにpluginで組み込む
その他の方法は、wikiか検索すればでてくる

全文を読む

xajaxのインストール

とりあえず、xajaxCodeIgniterに組み込む。

全文を読む

必要な機能

今度の案件では、必要な機能は次の通り

  1. ファイルアップロード
  2. PDF出力
  3. AJAX(あればちょっと便利)
  4. Excel(ついでに)

これらの機能をCodeIgniterで実装する。

1.のファイルアップロード機能はCodeIgniterに標準である。
けど、どうも1ファイルのアップロードっぽい。
必要なのは複数ファイルの同時アップロード。

2のPDF出力は、「tcPDF」の予定

3のAJAXは探して試したところ、簡単だった「xajax

4は・・・まあ、今のところたち消えたけど、とりあえずライブラリを組み込んでおくことにしよう。
Excel_Reviser or PHPExcel

Home

検索
フィード
メタ情報

Return to page top