CakePHPの最近のブログ記事

CakePHPで配列で指定したinputに$this->dataが連動してくれる
helperのありがたい機能を使っていたのですが、
<?php echo $form->input("Part.1.element.1.radio", array('type'=>'text')); ?>
という感じの5層構造になるとデータの引継ぎをしてくれません。
helperの対応しているのは4層までみたいです。

困ったということで調べてみるのですが、これという記事が見つからないので
自分でカスタマイズして5層でもデータがやり取りできるようにしました。

グラフを必要とするお仕事があり、JPgraphとpChartを候補にあげました。しかし、JPgraphは、有償なので対象からはずれ、pChartで作成することになりました。
○インストール方法
cakephpで実現しています。
通常はviewsを作成して表示するのですが、
このサンプルでは、controllerで表示するように記述しています。
cakephp\app\vendors\pChartにダウンロードしてきたpChart.1.27d.rarの展開したものをコピーします。
あとは、フォントを利用するので、ipaexg.ttfをcakephp\app\vendors/pChart/Fonts/ipaexg.ttfへ配置します。準備は以上です。
○利用して苦労した点
デフォルトのグラフの色が変えれなかったのですが、
// デフォルトの色を変更する。
$Test->setColorPalette(0,79,129,189);
の記述で変更することができました。

TMP."graph/"のフォルダを作成して書き込み権限をあたえてください。

radare_1_23_20111003112429.png
前回はapp/core.phpの
Configure::write('Routing.admin', 'admin');
をコメントアウトすることでページネートのリンクを押した時にリンクエラーになるのを防ぎました。

じゃあ、「公開」「公開(携帯)」「管理」のように3つサイトを分ける時にはどうするの?ということで調べてみました。

formヘルパーでselectに属性を付けるときは

echo $form->input( 'Model.field', array( 'type' => 'select', 'options' => $arr, 'style' => 'color: #ff0000' ) );

option部分だけ属性を付ける時にどうすれば?・・・と思ったのでメモ

新しいシステムをレンタルサーバーにアップする際に、データベースが1つしか存在せず、新たにデータベースを作ることもできず、すでに他のシステムのテーブルが存在し、データベースが利用されている状態にありました。既存システムと新システムのテーブルを簡単に区別する必要があると思い調べました。単純にテーブル名を変更すると、MVCモデルのファイル名やフォルダ名も変更する必要が出てきます。調べていくうちに、cakephpのdatabase.phpでプレフィックスを指定できることが判明し、'prefix' => 'okushin_',ように定義しました。当然MySQL側でも
mysql> ALTER TABLE 古いテーブル名 RENAME 新しいテーブル名;
のコマンドにてテーブル名をusersからokushin_usersのように新システムに関係するテーブルすべてにokushin_をつけてテーブル名を変更しました。するとMVCモデルでのMのuser.php、Vのフォルダ名users、Cのusers_controller.phpのファイル名フォルダー名はそのままでシステムが正常に動作しました。とても簡単で利用しやすい機能だと思い紹介してみました。
CakePHP開発にて、selectボックスの変更イベントで他の項目を自動的に変更するAjaxのサンプルのソースです。modelsとcontrollersの一部のコードにつきましては、割愛させて頂きます。本機能を追加するにあたっては、edit.php,samples_controller.php,ajaxskind.php,ajaxsitem.php,ajaxsmemo.phpのコードを参照して頂き、参考になれば幸いです。
以前紹介した記事「wdCalendarを日本語で使ってみる」で日本語化したwdCalendarをCakePHPに組み込んでみたので紹介します。

それから少し改造ということで、登録できるフィールドを追加してみるのと、ログインした人のidを基に誰が登録した予定なのかを持たせるようにしました。

実際の見た目はコチラ
 弊社で帳票をPDFで出力する際には、大抵書式となるテンプレートファイルを先に読み込んで、必要な箇所にデータを出力して最終的に出来上がりのPDFファイルを生成という手順を踏みます。
 ですので、Excelファイルを作る際にもテンプレートの読み込みが必要だろうということで、これもサンプルを作りましたのでここに載せておきます。

 データを出力する部分とファイルに書き出す部分は同じですので、テンプレートファイルを読み込む部分を解説します。
 Excel2007形式とExcel95形式、両方まとめて載せておきます。

 まず、Excel95形式のテンプレート読み込みです。

	$filename = "fruits.xls";
	$uploadDir = realpath( TMP );
	$uploadDir .= DS . 'excels' . DS;
	$load_path = $uploadDir . $filename;

	$objReader = new PHPExcel_Reader_Excel5();
	$objPHPExcel = $objReader->load( $load_path );

 次は、Excel2007形式のテンプレート読み込みです。

	$filename = "fruits.xlsx";
	$uploadDir = realpath( TMP );
	$uploadDir .= DS . 'excels' . DS;
	$load_path = $uploadDir . $filename;

	$objPHPExcel = PHPExcel_IOFactory::load( $load_path );

 $load_path にはテンプレートファイルのフルパスを与えてください。

 ここで帰ってきた $objPHPExcel で、データ書き込みやファイル生成を行ってください。

 PHPExcelをCakePHPで使ってみるの記事ではExcel95形式(拡張子が.xls)のExcelファイルの出力について書きましたが、Excel2007形式(拡張子が.xlsx)の場合はどうなるのかが今回のお話です。
 Excel2007形式のファイルを出力する為のポイントはふたつです。
 ひとつ目は、出力ファイル名の拡張子を必ず「.xlsx」にしておくことです。
 ふたつ目は、出力する部分のコードを少し変えることです。
 具体的には、次のコードになります。

$objWriter = PHPExcel_IOFactory::createWriter( $objPHPExcel, 'Excel2007' );

 システムを作っていると、お客様からよく「このデータをExcelで使いたい」ということをお聞きします。
 大抵の場合CSV形式のファイルを出力して、それをExcelで読み込んで好きに加工して戴くのですが、やはりExcelの形式ではないので使い辛いと言われることがあります。
 そこで、Excelファイルを出力するようにしようということになり、PHPExcelというライブラリをCakePHPに組み込んで使うことにしました。