RSS

カテゴリー別アーカイブ: Uncategorized

cakePHP2.1でcakeEmailを使う。

そろそろcakePHP2.1であんなことやこんなことやっていろいろ恥ずかしいことも蓄積してきたので皆様とシェア致します。

こちらのサイトを参考にしました。
1.2,1.3ではqdmailを使っていたのですが、開発自体がすでに止まっているようなので
標準で用意されているものも最近は利用されている人が多いようなのでこちらでやってみました。

app/Config/email.phpにはこんなかんじで設定。gmail経由で送ってみたよ。
インストールしたばっかりんときはemail.php.defaultみたいなファイル名なので名前をちゃんと変えよう。
すでにdefaultの項目があるのでこんなかんじに変えてみました。お好みで変えてみてください。

	public $default = array(
		'transport' => 'Smtp',
		'from' => array('yash@xxx.com' => 'メールでの表示名'),
		'host' => 'ssl://smtp.gmail.com',
		'port' => 465,
		'timeout' => 30,
		'username' => 'hogehoge@hogehoge.com',
		'password' => 'hogehoge',
		'log' => true//ここをtrueにするとtmp/debug.logにメールのログが書かれる。
	);

を冒頭にセット。
使う側のコントローラーには

App::uses('CakeEmail', 'Network/Email');

そんでもって実際に送る場所こんなかんじで。
テンプレートやらのセットはマニュアルにあるので読むべし。cakePHP2.1から?ではないと思うけどテンプレートの構成が若干1.2と変わっているんでつね・・

$email = new CakeEmail('default');//ここ、ちゃんとdefaultを設定しないと送れませんでした・・。
$email->from(array('yashiro@XXX.com' => 'My Site'));
$email->to('yashiro@XXX.com');
$email->subject('テストです');
$email->send('日本語でおくれるかなー?');

こんなかんじで無事におくれました!(∩´∀`)∩ワーイ
Pluginも結構cakePHP2.1で動くもの多いですね。SearchPluginもACLPluginも。SoftDeleteビヘイビアとかArraySourceとかもぼつぼつ。

 
2件のコメント

投稿者: : 3月 21, 2012 投稿先 Uncategorized

 

タグ:

bootstrap.cssの対応(for Play framework)

メモ。
ちょっと家庭内制作で「phpじゃないやつで!」ということになってjavaでrailsライクなplayframeworkいぢってんですが、
来月の某締切りにむけて画面周りで、Bootstrap を使ってます。
で、playはそもそもrailsライクってことで、cakephpと非常に似ているので、ファイルの構成とかは分かりやすい。
まあおいおいいろいろかけたらと思うんですけど、ひとまず、今Bootstrapが流行っているので、playframeworkで使ってみたい!ってことで使ってたんですが、一点、pagenateについてがどうにも、見た目を変更する必要がありました。

なので、paginateの導入も含めてメモしときます。

※試行錯誤なんで、自己責任でよろしくおねがいします><

1.2.2使っているので、コンソールでとりあえず

play install paginate

する。そうすると、コンソールで「いれちゃうぜ?」てきいてくるので、はいyて答える。

そうすると・・・playインストール場所/modulre/paginate-0.11

という構成になり、そこにモジュールが展開される。

そのあと、

conf/dependencies.ymlに

~ require:

~ play -> paginate 0.11
これを追記して、さらに
conf/application.confに
# Import the pagenate module
module.paginate=${play.path}/modules/paginate-0.11
こんな感じで、play再起動。起動時に、
Module paginate is available (/home/yashiro/play-1.2.2/modules/paginate-0.11)
とかいうログが見えると、無事paginateモジュールが読み込まれています。
さて、そのモジュールの中に、htmlが入っていて、(playの雛形みたいな)paginateに対してどういう記述をするか
が書かれているControls.htmlをいうソースを探し出します( paginate-0.11/app/views/にありました)。
それをコピーして、app/views/paginate/Controls.htmlという構成にします。
(やってることはcakephpで、helperを自分のappの配下にもってきて変更していることにそっくり。)

それでそのファイルをこんな感じで修正してみました。そしたらデモで見えるようなpaginateが表示されたよ!

(実際はpaginateを表示させるところまで、これ以外にもいろいろ道のりがあったんですが・・それは割愛)

app/views/paginate/Controls.html

%{
int __firstPage = 1;
int __currentPage = _items.pageNumber;
int __pagesDisplayed = _items.pagesDisplayed;
int __pagesBeforeMiddle = __pagesDisplayed / 2;
int __maxPage = _items.pageCount;
if (__currentPage > (__pagesDisplayed / 2)) {
	__firstPage = __currentPage - __pagesBeforeMiddle;
}
int __lastPage = __currentPage + (__pagesDisplayed - __pagesBeforeMiddle - 1);
if (__currentPage < (__pagesDisplayed - __pagesBeforeMiddle)) {
	__lastPage = __pagesDisplayed;
}
if (__lastPage > __maxPage) {
	__lastPage = __maxPage;
}
boolean __hasPrev = _items.hasPreviousPage;
boolean __hasNext = _items.hasNextPage;
String __firstURL = __hasPrev ? _items.getCallbackURL(1) : "#";
String __prevURL = __hasPrev ? _items.getCallbackURL(__currentPage-1) : "#";
String __nextURL = __hasNext ? _items.getCallbackURL(__currentPage+1) : "#";
String __lastURL = __hasNext ? _items.getCallbackURL(__maxPage) : "#";
%}
<div class="pagination">
	<ul>
%{ if (_items.boundaryControlsEnabled) { %}
		<li class="${__currentPage == 1 ? 'disabled' : 'first'}"><a href="${__firstURL}">&{'play-paginate.first'}</a></li>
%{ } %}
		<li class="${__hasPrev ? 'previous' : 'disabled'}"><a href="${__prevURL}">&{'play-paginate.prev'}</a></li>
%{
for (__idx = __firstPage; __idx <= __lastPage; __idx++) {
boolean __active = __currentPage == __idx;
%}
		<li class="${__active ? 'active' : 'inactive'}"><a href="${_items.getCallbackURL(__idx)}">${__idx}</a></li>
%{
}
%}
		<li class="${__hasNext ? '' : 'disabled'}"><a href="${__nextURL}">&{'play-paginate.next'}</a></li>
%{ if (_items.boundaryControlsEnabled) { %}
		<li class="${__currentPage == __maxPage ? 'disabled' : ''} next"><a href="${__lastURL}">&{'play-paginate.last'}</a></li>
%{ } %}
	</ul>
</div>
<br style="clear:both;"/>

まあここまではよかったんだけど、lastページになると、PreviousとNextのあいだのページ数が一個減るという謎の

現象に・・まあこれは次回でもどうにか修正することにしましょう。

 

※10年ぶりにJavaとか見たら、「アノテーション」とかいう謎の識別子がついていて時代を感じた。

 
コメントする

投稿者: : 10月 9, 2011 投稿先 Uncategorized

 

ktai library勉強会第2回が行われました。

第2回は主に管理画面の作成&携帯画面の作成の導入部分でした。ただ5章は実際の開発を行う関係上、開発環境やスキーマ作成に手間取った方も多かったです。(予習してきた割に、USBメモリとか持っていかなかったとか、抜けてたな私…)私自身はxampp環境での開発だったので(VMでやるつもりだったんだ・・・)それも色々障害がありました。

開発側と公開側をサブドメインで制御する…これは私の場合、家人が実は解決策を導いてくれて、「Hostで解決しろや!」といわれて これを導入して制御しました。これにローカルホストで開発のドメインと公開用のページのドメインを登録すれば、書籍と同じ設定をしても動作します。

テーブルスキーマ…これは巻末にあったのをすっかり見落としていて始め手間取りましたが無事解決。ちゃんとみると章ごとに必要なテーブルスキーマが用意されています。

など色々だったので、会場にきてさあ5章!と思った人は結構大変だったのではないでしょうか?私は「とりあえず全部読む」事をしたのでとりあえずダウンロードが必要なものはダウンロードしておき、(ソースコード、プラグイン等)、「だいたい当日はここまでかなあ…」というのを想定していったので今回はあまり躓きがなかった!(前回は文字化けで騒いで色々お手数かけました><)

買出しにいこうと思ったのですがあまりの寒さにピザでくじけ(美味しかった◎)、もういつでもピザでいいんじゃないの…とか思ったり思わなかったり。食事してるときはやっぱり歓談のほうが楽しいですね。最後の30分は皆さんと歓談して終わりました。今回はgitの話、他フレームワークの話、パフォーマンスについて、次回のcakephp勉強会の話(!)など色々面白い話が多かったです。また@ecworks_masapさんのktai libraryについてのお話もあり、やっぱり著者の方が参加してくださる勉強会は色々スムーズだなあとつくづく感じました。青年団の皆さんには毎回助けていただいております。本当にどうもありがとうございます。

しかし結構驚いたのは、関東は昨日、4月の半ばだというのに激しい雨と気温の低下で雪が降るんじゃないのか、という寒さでした。こういう日って結構来ない人がいるんじゃないの…と半ばびくびくしていましたが、出席率100%でうれしかったです。事前にメールを送っていたので、出席率は大体把握してはいたのですがやっぱり当日になってみないとわからない、というのがあるので。

@ecworks_masapさんの提案もあり、次回は5章の後半に焦点を当てた、より「 ktai libraryに特化」した内容で取り組みたいと思います。自分のペースでできるのがこの勉強会のよいところではありますが、次回参加される場合は5章の「管理画面」をある程度進めていただき、より公開ページの開発をスムーズにできるように進めてから参加していただくと楽になると思います。その方がきっと質問もできますし、当日の満足度が違うのではないでしょうか。

私は勉強会の後、新宿駅で山手線の遅延に遭遇し、その後東上線でも人身事故で電車がこず…自宅についたのは1時すぎていました><

 
3件のコメント

投稿者: : 4月 17, 2010 投稿先 Uncategorized

 

Ktai Library for cakephp 勉強会@関東 2回

http://atnd.org/events/3990

第2回の開催の告知です。来週の金曜開催になっています。

開始時間は19:30より。前回もボツボツ集まって皆さん各自準備されていました。Ktai Library を持っていて自分で作ってみたい!と思われる方はぜひどうぞ。より実装に偏った勉強会ですので、LTや発表はありません。自分で手を動かしてプログラミングを行えるかたの参加をお待ちしております。

前回は絵文字だったりに困りましたが、今回はそのようなことがないように…!前回はxampp環境だったのですが、最近色々ありまして結局MVないと困る。というわけで2回目の参加はVMにアップして動かすようにしようと思います。2回目はより実装よりになり、ボリュームも多いので、不安な方はあらかじめ予習して、わからないことを尋ねたりできると良いのではないでしょうか。携帯に関連した画面の実装もあるので、私もいまから楽しみです。

ここんところ、仕事でかえりが遅くてブログかけなかったりしてますが、おかげさまでcakeで作ったバッチも無事毎朝動いているみたいです。忙しい時ほど、情報は蓄積しないといけないな!と改めて思ったしだいです。

最近は
・Ktai Library5章を読み出した
・Linuxことはじめ みたいな本買った!(今日届いた)
・自宅にあった旦那がもってたBIND本は3ページ読むと眠くなる魔法の本ですぐ寝れる
・qdmail文字化けでつっかかった。結局死ぬほど恥ずかしいミスだった。
・APCを社内鯖に導入した。パッケージに色々てこずった。yum update してないとか死にたい><
・去年年末から開発していたサイトがサービスインしていて、すでにソースを書き換えたいw

こんな感じでした。次回は簡単に、cakephpで作成するメール一斉送信なんかを記事にしたいと思います(どこのブログにもありそうだけどさ!)それではおやすみなさい。

 
コメントする

投稿者: : 4月 8, 2010 投稿先 Uncategorized

 

Ktai Library for cakephp 勉強会@関東が行われました。

皆さん集まりが良かった!えっちらおっちら会場についたら7時。すでに半分くらいの方がいらして、PCのセットアップをされていました。7時半から自己紹介ということでしたが7時半にはすでに9割の方が着席されていて、Ktai Library本を片手にPCをいじったり。

19:30から自己紹介に始まり、あっさりと自己紹介を終えて21:00まで本当にコーディングでした。私はさすがに設定で躓いたりするのはアウトなのでちょっと動くように書いてきたつもりが…?よく見たらドコモとAUの絵文字がでてないよ!と慌てふためいて結局シュミレータの問題じゃない?ということで・・。私は運良くとなりに座っていただいた滝下さんに色々伺いまくり。4章ということでとりあえず画面を出そう!ということだったので、わりと敷居は低かったと思います。もうちょっと回数を重ねると「わからん」「そこはね」みたいなやりとりが活発に行われるかもしれません。私の絵文字問題は解決してないけれども 凹○ 21時過ぎからはビールを飲んで皆さん歓談。cakephpの話にかかわらず技術的だったり、今熱い話題だったりを思い思いにお話していました。

ビールが進んだところで@ecworks_masapさんのお話。今後のKtai Libraryの今後や、色々素敵なお話がありました(スライドが面白かった)。そのあとは@kaz_29さんのLTだったのですが、結構衝撃的でした。ふえー。extjsのお話。全てがブラウザ内で簡潔するのは衝撃的でした。名前だけは知っていましたが、実際にまともに見たのは初めてでした。これウェブで開発は有料なのかな…?歓談して23時過ぎに終了。月曜だったので翌日が心配でしたが、無事起きて会社にいけましたw

さて、こちらでもかまわないのでアンケートの内容や、要望を受け付けています。私としてもこれで終わりしたら意味がないので5章、6章と続けていくつもりです。参加してくださる方がいる限り。自分がやり切れる限り。お一人、アンケートを手渡しで下さった方がいて(これはこれでうれしい)帰りの電車で「とりあえず一回は終わった!」という気持ちで帰路につきました。さて顔あわせも出来たし、2回はより開発に即した内容でコーディングしていきたいと考えています。土曜の午前から午後にかけて…みたいなのでも面白いですね。よりコーディング、中身に即した事柄を追って行きたいというのが希望です。1回が都合でいけなかった方も、2回目はすんなりこれると思います(1回目は導入部なので)。ただ、やはり出席というか会場の人数や調整があるので出欠管理は課題が残りそう。平日の開催で皆さん色々都合はあると思いますが、キャンセルが出るのはやはり寂しいものです。

さて、Ktai Library の4章ですが。私はxampp環境firefox3.6、firemobilesimulator1.1.10だったのですが、ドコモとAUの出力で絵文字に文字化けが起こる事態に。同じ環境でもちゃんと表示される人がいるので開発環境に依存する可能性もありそう。ちなみにi-mode simulatorⅡでは問題なく表示されました。私と同じ状況になっていた方もいらしたので今日はいろいろやってみました。

  • FireMobileSimulatorをバージョンアップ!→残念。結果変わらず。
  • php.iniを変更してみたりした。が、変わらず。
  • …うわああああん!なにがいけないんだ!なにがいけないんだよお!と家で爆発していたらノソノソと鼻の黒い人がでてきて、下記のようにしたら表示された…でもこれ結果的には環境に依存するといえそう。エミュレータを何台も使いたくないので複数の端末の挙動を知るためにはfiremobilesimulatorを使いたいんだよなあ…。output_encodingの設定をUTF-8にすると絵文字が表示されず。SJISと設定しても良い。EUC-JPでもいける。でもUTF-8はだめ。xamppの設定も色々変えてはみたけれども。ソースや画像の問題ではないので、とりあえずこれで乗り切るかな…。もし同じような現象で解決されたかたがいらっしゃったら教えてください。
    下記はドコモでも絵文字がきちんと見えた設定。これでよい、ということではないのであしからず。

    	var $ktai =array(
    		'enable_ktai_session' =>true,
    		'use_redirect_session_id'=>false,
    		'imode_session_name'=>'csid',//imode時のセッション名
    		'use_img_emoji' =>true,
    		'input_encoding'=>'UTF-8',
    		//'output_encoding'=>'UTF-8',
    		'output_encoding'=>'pass',
    	);
    

    さてあまり期間をあけても意味がないので4月の頭ごろを再度目標にかかげる予定、とだけ告知してみたいと思います。サーバの設定などを勉強会でどのように扱っていくかについても皆さんの意見をお待ちしています。

    さて個人的に。いやあ、、皆さんに助けていただいて、というか私何もしなかったような…。。技術的な話題も自分からはあまり提供できずただ写真のどまんなかに映っているという体たらくw 大丈夫なのか私!いや大丈夫じゃないだろ。やったほうがいいよtipsはあるけれどわたしのブログは「やっちゃだめtips」じゃないかと思う今日この頃。恥をさらして今日もがんばりまっす。

    2010.3.11修正記事。
    上記のように修正ではなく、方向性としては
    php.iniに以下のように設定することで表示されます。
    default_charset = “UTF-8”

    ただし、これはxampp環境で、実際のところCentOSでは、デフォルトの設定でhttpd.confに
    AddDefaultCharset UTF-8
    と設定されているのが有効らしいので、いわゆるCentOSのVM環境のようなところでは再現しなかった模様。

     
    4件のコメント

    投稿者: : 3月 10, 2010 投稿先 Uncategorized

     

    データベースのバックアップとか。

    リリースが終わった(?)わけですが色々あって公開しているのものの、手直しが合ったりなかったり。
    まーβバージョンみたいな感じ?と思うことにします。

    さて、今日は先日実際にやってみたのでメモ的に。超簡単。マジ簡単。

  • バッチをつくってデータベースのバックアップをとりたい!
  • です。現在VPSサーバ上で稼動しているので、別ストレージへのバックアップはとってるけれど、やっぱりまずステップとしてはデータベースのバックアップ(日々)のをとりたい。レンタルサーバでとってるストレージバックアップっていうのは、OSが爆発したとき(!)用みたいなもんで、たとえば「ああああデータ消失した!」みたいなあってはいけないトラブルには即さないと思うので、まずは稼動サーバ上に日時ごとにバックアップを取るようにしてみる。で、色々探してみたけど、cakeってシェルスクリプト書くの驚くほど簡単だな…。ソースコードはエクスギアさんのこのページがビンゴです。能がなくてごめんなさい、99%そのままです。設置も同じく、\app\vendors\shells におくだけ。プログラムが起動するためのパス/cake/console/cake への実行権限・ダンプデータのおき場所の書き込み権限は設定しておきましょう。ここも忘れやすいね。

    <?php
     class MysqldumpShell extends Shell
    {
    	// データベース設定ファイルの定義名
    	var $database_config = 'default';
    	function dump(){
    		Configure::write('debug', 0);
    		App::import('Core', 'ConnectionManager');
    		$db =& ConnectionManager::getDataSource($this->database_config);
    		// 曜日単位でダンプデータを作成する。7世代まで。
    		$path = TMP. sprintf('logs/mysqldump/dump_%s.gz', date("w"));
    		$cmd = sprintf("mysqldump -u %s --password='%s' %s --opt | gzip> %s"
    				,$db->config['login']
    				,$db->config['password']
    				,$db->config['database']
    				,$path);
    		system($cmd);
    	}
    }
    

    ためしに、コマンドライン上から
    /var/www/html/myapp/cake/console/cake mysqldump dump -app /var/www/html/myapp/app
    を実行してみましょう。ふおお!指定したフォルダにダンプデータができている…!エクスギアさんのページは日付けごとですが、これを設置して知らんふりしてますと知らないうちにじゃんじゃんデータがたまって大変なことになりますから、私は一日一回、曜日で取得するようにしました。曜日を取得する関数で名前をつけているので、最大7世代のバックアップが存在していることに。まあゆくゆくはもっと壮大なバックアップ計画を立てていますが地道にまずローカルに世代バックアップをとることにします。これをcronに設定しよう!
    上記コマンドを所定の時間に動くようにcrontabに設定して動作確認してちゃんちゃん!

    で、だ。上記はバックアップですが、これバッチも同じだよね…。とふと思って探してみると、あるある、やってる方々が。つまりデータベースそのもののデータを書き換えるバッチも、上記と全く同じようにすることで可能なんですな。

    var $uses = array('Model');//モデル名を設定
    function hogehoge(){
    //バッチ処理
    }
    

    と書くことであらまあ不思議。でこれをまたcronに設定すればバッチ処理のできあがり。まさにクッキングのようだ!

    ところで最近は「こういうことしたいときってみんなどうしてんだろ」という疑問がいろいろ。

    Read the rest of this entry »

     
    コメントする

    投稿者: : 3月 4, 2010 投稿先 Uncategorized

     

    Ktai Library for cakephp 勉強会@関東やります

    、というわけでしょっぱなから皆さんにお膳立てしてもらった感がありますが、「誰かKtai Library for cakephp 」やってくれんがかの~(土佐弁)とつぶやいたことで始まりました、勉強会です。Ktai Library for cakephp 勉強会@関東、こちらの参加条件をよくお読みいただき、参加登録をしていただければと思います。勉強会なのですが、今回は

  • LTとかない。ごそごそコーディングする。
  • cakePHPで携帯サイトを作りたい、という明確な目的がある。
  • 表題の「PHPで作る携帯サイト」本を持参しある程度自分で作業が進められること
  • が前提の勉強会になります。なので目的がはっきりしていますので、なんかわかんないけどおもしろそ~、な勉強会ではないです。わりとストイック。もちろんわからないところや躓いたところは共有できればと考えています。

    明日リリースを控えていて今週デスマですが週末にむけて開発環境をセットアップして、4章を読み進めて予習して参ります。ここんところ開発もあるし土日も仕事してどっぷりcakePHPです。最近やっとフレームワークの中身(ソースコード)をみて「…へえ」と思うことを覚えた私。購入したポケットリファレンスもいい具合にくたびれてきました。今度は「PHPで作る携帯サイト」と仲良しになりたいと思います。

     
    1件のコメント

    投稿者: : 3月 2, 2010 投稿先 Uncategorized