pg-info
Coldfusionでrss出力
- 2012-05-15 (火)
- Coldfusion
今更やけどColdfusionでrssの出力。
今まで要件はなかったなぁ・・・。
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
- 2012-04-23 (月)
- CodeIgniter
CodeIgniter 2.0.1ja以上2.0.3jaなら全部OK。
2.0.1jaでインストールして今2.0.3jaで使ってるから
- TCPDFのダウンロード
http://sourceforge.net/projects/tcpdf/files/
ここから最新のzip アーカイブをダウンロードする。 - Codeigniterへのインストール
執筆時点のバージョンは5.9.158なんで
tcpdf_5_9_158.zipをダウンロード。
ダウンロードしたファイルを展開。
展開すると「tcpdf」フォルダがあります。この「tcpdf」フォルダを「/application/third_party」フォルダにコピーします。
今回は「third_party」へのコピーという方法をとっていますが、「/application/libraries」にコピーする方法もあるかと - ユーザーライブラリの作成
「/application/libraries」にユーザーライブラリファイルを作成。
「pdf.php」というファイルを追加しました。
ファイルの内容は次のとおり1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950<?php (defined('BASEPATH')) OR exit('No direct script access allowed');# include TCPDFrequire_once(APPPATH.'third_party/tcpdf/config/lang/jpn.php');require_once(APPPATH.'third_party/tcpdf/tcpdf.php');/*** TCPDF - CodeIgniter Integration*/class pdf extends TCPDF {/*** Initialize**/function __construct($params = array()){$orientation = 'P';$unit = 'mm';$format = 'A4';$unicode = true;$encoding = 'UTF-8';$diskcache = false;if (isset($params['orientation'])) {$orientation = $params['orientation'];}if (isset($params['unit'])) {$unit = $params['unit'];}if (isset($params['format'])) {$format = $params['format'];}if (isset($params['encoding'])) {$encoding = $params['encoding'];}if (isset($params['diskcache'])) {$diskcache = $params['diskcache'];}# initialize TCPDFparent::__construct($orientation, $unit, $format, $unicode, $encoding, $diskcache);}}// END pdf Class/* End of file pdf.php *//* Location: ./application/libraries/pdf.php */これで、使用する準備は完了。
あとはコントローラーで、呼び出して使うだけ。
呼び出しサンプル
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
class samplepdf extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->printPdf();
}
private function printPdf()
{
// PDFライブラリ呼出
$this->load->library('pdf');
// ページ向き(横)
$pageOrientation = 'L';
// ページフォーマット
$pageFormat = 'A4';
$pdf = new TCPDF($pageOrientation, 'pt', $pageFormat, true, 'UTF-8', false);
ここにTCPDFのロジック
$pdf->Close();
$pdf->Output("ファイル名".'.pdf','I');
exit;
}
} |
Codeigniter で PHPExcel
- 2011-12-13 (火)
- CodeIgniter
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
とあるサイトには、
|
1 2 3 4 5 6 7 |
$this->load->library("PHPExcel");
$this->load->library("PHPExcel/IOFactory");
・
・
$objWriter = IOFactory::createWriter($objPHPExcel, "Excel5");
・
・ |
とこのように書かれていましたが、動きません。エラーとなります。
PHPExcelのバージョンも1.7.6と書かれていますが・・・
まず、「PHPExcel/IOFactory」ですが
ファイルの中を見るとクラス名は、「PHPExcel_IOFactory」となっています。
また、「__construct」は「private」です。
ロードできるわけがない。
たぶん、動かしてないんだろう。
実際ダウンロードしたファイルにサンプルが入っているんだが
「IOFactory」をロードする必要なんかないし・・・
実際Codeigniterで動作させたサンプルコードは以下。
ダウンロードするのが目的なんで
test\01simple-download-xls.php を Codeigniter に組み込みました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
class Sampleexcel extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->downloadExcel();
}
private function downloadExcel()
{
$this->load->library("phpexcel");
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', mb_convert_encoding('日本語','UTF-8', mb_internal_encoding()))
->setCellValue('B2', mb_convert_encoding('テストです。','UTF-8', mb_internal_encoding()))
->setCellValue('C1', mb_convert_encoding('文字エンコード','UTF-8', mb_internal_encoding()))
->setCellValue('D2', mb_convert_encoding('EUCなんですけど','UTF-8', mb_internal_encoding()));
// Miscellaneous glyphs, UTF-8
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A4', 'Miscellaneous glyphs')
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
} |
これをVIEWからリンクなどで呼び出すと「01simple.xls」ファイルとしてダウンロードできます。
日本語テストも兼ねてます。
Codeigniter 2.0.1 でxajaxを使用する
- 2011-06-26 (日)
- CodeIgniter
以前、xajax をCodeigniter 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」フォルダはドキュメントルートへフォルダごとコピー。
これで準備は完了。
あとは、コントローラーファイルでライブラリをロードするだけ。
|
1 |
$this->load->library( 'xajax' ); |
Codeigniterの「クロスサイトリクエストフォージェリ (CSRF)」をconfigで有効にしている
xajaxは動作しません。
configでは「FALSE」に設定し、各コントローラーで個別に実装する必要があります。
jqueryでは、対応サンプルが公開されているようですが。
AJAX with CSRF Protection in Codeigniter 2.0
今回は、「クロスサイトリクエストフォージェリ (CSRF)」に関しては自動化ではなく、個別実装の方法をとっています。
CodeIgniterで複数ファイルを同時アップロード
- 2009-06-13 (土)
- CodeIgniter
イメージファイルや文書ファイルを複数同時にアップロードする機能が必要なので
調べたら、あっさりと見つかった。
やっぱ、いるよなぁ、複数ファイルのアップロードって
日本CodeIgniterユーザ会のメーリングリストにログがあって
KuniTsujiのPHP開発日記 サイトにソースがあった。
対象記事はCodeIgniterで複数のファイルをアップする
MY_Upload.phpファイルをsystem/application/libraries/に作成し、こちらのソースをコピーしてクラス名を「MY_Upload」に変更。
で、サンプルフォームを作成して動かしてOKだった。
サンプルソースは、めんどいので$_FILESなんかを使って確認しただけなんで、載せれんな。
それにサムネイル機能もサンプルでやってるんで長いしなぁ。
イメージファイルのサムネイル化なんやけど、KuniTsujiのPHP開発日記にもイメージファイルのリサイズに関する記事が載ってた。
もう既に phpThumbnailer を組み込んだあとに知った・・・・。
CSVファイルの読込
- 2009-06-09 (火)
- Coldfusion
ちょっとColdFusionで追加の作業があったんでメモ。
ColdFusionでCSVファイルを読み込みデータを復元する際に、データの中に”,”(カンマ)、”"”(ダブルクォート)がある場合の対応。
対応方法としては、いくつかあるとは思うけど、探したらちょうどいいUDFが公開されてた。
めんどいし、自分では作りたくなかったけん、よかったわ。
ほんま、ありがたい。
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にはあったわ。
やっぱマイナー言語なんやろな。
必要な機能
- 2009-05-28 (木)
- CodeIgniter
今度の案件では、必要な機能は次の通り
- ファイルアップロード
- PDF出力
- AJAX(あればちょっと便利)
- Excel(ついでに)
これらの機能をCodeIgniterで実装する。
1.のファイルアップロード機能はCodeIgniterに標準である。
けど、どうも1ファイルのアップロードっぽい。
必要なのは複数ファイルの同時アップロード。
2のPDF出力は、「tcPDF」の予定
3のAJAXは探して試したところ、簡単だった「xajax」
4は・・・まあ、今のところたち消えたけど、とりあえずライブラリを組み込んでおくことにしよう。
Excel_Reviser or PHPExcel
- 検索
- フィード
- メタ情報


