Posted on

CSVファイルをモデルのfindメソッドで読み込む方法

CakePHPの勉強会で、英語に負けずコードをばんばん読んでいこう!という話があったので、Bakeryの中を覗いて見つけたソースを動かすというのをやってみました。
今回はCSVファイルをfind一発で読んでしまおうというヤツです。
元はSiegfriedHirschさんが作成されました。

CSVファイルをデータベースっぽくする為に、いくつか準備をします。

続きを読む CSVファイルをモデルのfindメソッドで読み込む方法

Posted on

第2回CakePHP関西勉強会でLTしてきました

6月5日に第2回CakePHP関西勉強会に参加してきました。
今回の発表はかなりのグズグズになってしまいました。
まず体調が悪く血圧がかなり下がってしまっていて、発表中は景色が白く見えるぐらいもうろうとして何を話しているのかという感じになってしまいました・・・
次に発表のリハーサルの時は目の前のノートパソコンで動かしていたのですが、本番ではプロジェクタを見て操作をすることになり画面が見にくく操作が思うように出来ず、操作にだいぶ時間を取られてしまいました。
とりあえず発表内容のパワーポイントです。

とりあえず座標合わせライブラリの評判が良かったので、頑張ってソースを整理して公開できたらいいなと考えています。
発表してみて色々指摘を受けれたので、それを受けて今後作っていけたらと思います。

Posted on

Model,View,Controllerのディレクトリ整理方法

CakePHPでmodels,views,controllersの中がファイルで一杯になったので整理の方法をメモ。

/**
* The settings below can be used to set additional paths to models, views and controllers.
* This is related to Ticket #470 (https://trac.cakephp.org/ticket/470)
*
* $modelPaths = array('full path to models', 'second full path to models', 'etc...');
* $viewPaths = array('this path to views', 'second full path to views', 'etc...');
* $controllerPaths = array('this path to controllers', 'second full path to controllers', 'etc...');
*
*/

app/config/bootstrap.phpのコメントにも書いてますが、

$contlloerPaths = array(
    CONTROLLERS.'folder_name'. DS,
);
$modelPaths = array(
    MODELS.'folder_name'. DS,
);
$viewPaths = array(
    VIEWS.'folder_name'. DS,
);

とbootstrap.phpに定義しておくと上で定義したフォルダの先までファイルを探しにいってくれます。
(内部でApp::importが探しにいってるみたい。)

注意するのは、
フォルダ階層が違うので同じ名前のファイル名が作れるけど、
先に見つけたファイルが読み込まれ、もう一方の同じ名前のファイルは読み込まれませんでした。(エラーにはならず・・・)
後、
設定したらcacheは前のパスが残ってるので消しときましょう。

Posted on

第2回CakePHP関西勉強会に参加してきました。

先日6月5日に第2回CakePHP関西勉強会に参加してきました。
今回で、東京のカンファレンスを含めて3回目の勉強会です。

だいぶ、CakePHP使用暦も長くなってきたので、
回を重ねるにつれて発表する内容が解るようになってきました。
(やっぱり、話がわかるとどんどん楽しくなってきますね!!)

以下、発表内容の感想です。

1. フックメソッドを極める
・shin1×1さん
・フックメソッド便利ですね!こんなに一杯あるとは思いませんでした。
・onErrorなんてあるんですね!便利そうなんで、今度どっかに使おう。
・フックメソッドを見える化してくれていたのですごく解りやすかったです。
・見事な前節でした!(笑)

2. 究極のコントローラを目指す
・slywalkerさん
・見事な整理っぷりでした。(整理しすぎな気も・・・)
・頑張ってリファクタリングします。

3. RubyOnRailsからCakePHPへ
・yabumaruさん
・あんなにRailsの道が険しいとは・・・
・Cakeで大規模案件をこなしたのがすごいです。

LT1. CakePHPでこんなの作ってみました
・msngさん
・割り勘電卓この前使わせていただきました。
・発表の仕方がすごくうまくて面白かったです。
・cakeは楽チンですね。

LT2. CakePHPでPDFを出力してみる
・keisonさん
・弊社のPDFライブラリの紹介です。
・helper化して公開したいです。

LT3. plugin の名前と URL がキモいのを何とかする
・pm11opさん
・piza!piza!piza!ヒザ!?
・Plugin楽しそうですね。使ってみたいと思います。(でもとりあえず、componentをもう少し使いこなそう・・・)
・楽しい発表でした。

懇親会
例の韓国料理屋でした。勉強会に参加できなかった方が30分も待って懇親会に参加されていて、
すごいパワーだなと思いました。
会社が近所と言う事もあり仲良くなれたし楽しい懇親会でした。
終電に間に合わないので鍋を食べ損ねたのが残念です。

主催してくださった皆様、発表していただきました皆様、来ていただいた皆様のおかげで
今回も楽しい勉強会になりました。
ありがとうございます。

また、発表会したいですね!!

Posted on

ラジオボタンを分けて表示する方法

普通にラジオボタンを下記のように作る時は問題ないのですが

$form->input("User.sex", array("type" => "radio","options" => array('1'=>'男性', '2'=>'女性')));

デザイン的にラジオボタンを分けて表示したい時があります。
とりあえず次のようにしてデザインの埋め込みたいところに記述します。

$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性')));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性')));

そうすると両方にhiddenのタグが付いてしまってラジオボタンの値を上手いこと取得してくれません。
そこで調べてみると初期値を指定してあげるとhiddenは出力しないということで

$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性', 'value'=>'none')));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性', 'value'=>'none')));

という感じに指定してあげました。
これで上手く行ったと思ったのですが確認画面に行ってから戻ってくるとラジオボタンのチェックが消えてしまっていました。

そこでさらに調べてみるとフォーラムでこんな解決策が載っていました。

$value = isset($form->data['User']['sex']) ? $form->data['User']['sex'] : -1;
$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性', 'value'=>$value)));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性', 'value'=>$value)));

これでラジオボタンのチェックが戻ってきた時に消える問題もなくなり、きちんと動くようになりました。

Posted on

shellでcakephpのプログラムを動かす方法

shellでcakephpのプログラムを動かす方法を覚書を記述しておきたいと思います。

まず/app/vendors/shellsの中にshellを動かすプログラムを書いたファイルを作ります。
今回はcron.phpとしました。
そのファイル内で次のようなコードを書きます。

class CronShell extends Shell{
var $name = 'Cron';
function sendEmail() {
//命令を記述(メールを送信する)
}
function deleteFlag() {
//命令を記述(デルフラグの立っているのを物理削除)
}
}

ここでのクラス名は先ほどつけたファイル名と同じにしておきます。
クラスの中では複数の命令が記述できます。

続きを読む shellでcakephpのプログラムを動かす方法

Posted on

CAKEPHPでqdmailを使ってメールをSMTP送信する覚書

今回メールを飛ばす時にSMTP送信しか出来ないサーバーでシステムを組んだので
CAKEPHPでqdmailを使ってメールをSMTP送信するようにしてみました。

まず下記のURLから
http://hal456.net/qdsmtp/
qdsmtp.phpの最新版をダウンロードしてきます。
ダウンロードしたのをcakePHPの/app/controllers/components
に置きます。(qdmail.phpと同じところに置く)

後はソースで次のように記述してあげるだけで大丈夫。
    $mail = new QdmailComponent();
    $mail -> smtp(true);
    $param = array(
        ‘host’=>’メールサーバー’,
        ‘port’=> 25 , //これはSMTPAuthの例。認証が必要ないなら 25 でOK。
        ‘from’=>’xxxxx@xxxxx.co.jp’,// Return-path: になります。
        ‘protocol’=>’SMTP_AUTH’,// 認証が必要ないなら、’SMTP’
        ‘user’=>’ユーザーID’, //SMTPサーバーのユーザーID
        ‘pass’ => ‘パスワード’, //SMTPサーバーの認証パスワード
    );
    $mail -> smtpServer($param);
    
    //メールを送信するユーザーリストの取得
    $mail->subject($this->data[‘Mail’][‘subject’]);
    $mail->from(‘送信元’);
    $mail->replyTo(‘返信先’);
    $mail->mtaOption(“-f”.’エラー時送信先’);
    $mail->kana(true);
    $mail->text(‘本文’);
    $mail->to(‘あて先’);  
    $mail->send(); // メール送信処理

qdsmtp.phpはqdmail内で自動で呼び込まれているのでプログラムであえて呼び込む必要は無し。
 

Posted on

tcpdfでIPAフォントを入れる手順の覚書

PDFを吐き出すシステムを作った時に、tcpdfがデフォルトで用意してくれている
フォントでは今回の案件に対応できなかったので、IPAフォントを使う事にしました。

以下のURLを参考に作業を進めていきました。
http://hrgs.xrea.jp/2006/08/24/how_to_use_japanese_with_tcpdf

IPAフォントは
http://ossipedia.ipa.go.jp/ipafont/
でIPAfont00203.zipをダウンロードしてくる。
展開していくつかttfファイルが出来るので、以後ipag.ttf
を使って作業をしてみる。

tcpdfをダウンロードしてきてFPDIを動かすところに配置する。
tcpdf/fonts/utils/の下にいるmakefont.phpとttf2ufm.exeを使って
ipag.ttfファイルからPDFで使えるファイルを生成する。

phpの動くところにtcpdfを設置してtcpdf/fonts/utils/以下に
ipag.ttfを置いておく。

コマンドプロンプトでtcpdf/fonts/utils/の下に移動して
「ttf2ufm.exe -a -F ipag.ttf」をコマンドで打つ。
すると処理が走って「ipag.afm、ipag.t1a、ipag.ufm」の
3つのファイルを生成する。

続いて同じ場所で
「[php.exeまでの相対パス] makeform.php ipag.ttf ipag.ufm」
をコマンドで打つ。
そうすると「ipag.ctg.z、ipag.php、ipag.z」の3つのファイルを生成する。

上記の3つのファイルをtcpdf/fonts/の下においてFPDI
から呼んであげます。
そうすると入れたフォントがPDFで表示されるようになりました。

Posted on

CakePHP ナイスなクリスマスプレゼント!!

みなさん、今年ももうすぐ終わりですね・・・
今のプロジェクトが忙しいので全然年の終わりって気がしませんが、
巷ではサンタさんがナイスなプレゼントをくれました。

その名も、

CakePHP 1.2 Final (1.2.0.7962)!!

ついに出ました安定版。

プロジェクトにかかわっていただいているみなさんありがとうございます。
このブログでちょっとでも恩返しできたら幸いです。

では、皆さん良いお年を・・・