CodeIgniterにはバッチモードなるものが存在するらしい。
マニュアルには詳しく載っていなかったので、実際にEmailクラスを探索してみた。
該当箇所はここ
- <?php
- function bcc($bcc, $limit = '')
- {
- if ($limit != '' && is_numeric($limit))
- {
- $this->bcc_batch_mode = TRUE;
- $this->bcc_batch_size = $limit;
- }
-
- $bcc = $this->_str_to_array($bcc);
- $bcc = $this->clean_email($bcc);
-
- if ($this->validate)
- {
- $this->validate_email($bcc);
- }
-
- if (($this->_get_protocol() == "smtp") OR ($this->bcc_batch_mode && count($bcc) > $this->bcc_batch_size))
- {
- $this->_bcc_array = $bcc;
- }
- else
- {
- $this->_set_header('Bcc', implode(", ", $bcc));
- }
- }
- ?>
引数を見てもわかるように
$bcc:カンマ区切りのメールアドレス
$limit:一度に送信するメールアドレス
を引数として渡せば、何か以下繰り返して送ってくれるっぽい。
ちょっとテストしてみた。
- <?php
- $this->load->library('email');
-
- $this->email->from('your@example.com', 'Your Name');
- $this->email->to('someone@example.com');
- $this->email->bcc('test@hoge.com,uhouho@hoge.com,megaitai@hoge.com', 1);
-
- $this->email->subject('Email Test');
- $this->email->message('Testing the email class.');
-
- $this->email->send();
- ?>
bccに指定した3つのアドレスには問題なく送信されたが、
分割して送られたのかが判断不可能だった。
(やってみて気づいたが当たり前といえば当たり前だった)
まぁ多分いけそうですね。
前回さくらのビジネスプロにCodeIgniterをインストールし、順調に開発を進めてた矢先、問題にぶつかった。
バリデーションが動かない・・・・
バリデーションにはじかれて入力画面にもどっても画面が真っ白な状態。
何故だ!とりあえず思い当たることころを再確認。
・セットしたルールに間違いはないか?
・form,urlヘルパーをロードしているか?
・phpにミスはないか?
etc・・・・
何もねー。ただ気になったのは$this->form_valiadtion->set_rulesに何もセットしないと動くことは動くということ。
いやーこうなったら根本を確認するしかないと思い、system/library/Form_Validation.phpを直接見て調査。
原因を発見・・・ここでした。
・
・
$this->CI->lang->load('form_validation');
・
・
この瞬間ピンときてsystem/language/japanese/form_valiadtion_lang.phpを確認。
記述はあっていたので、とりあえず文字コードをUTF8に変更。
動きました。文字コードの問題だったらしいです。
はずかしー。2hの稼働返せ。
最近CodeIgniterでとある団体のホームページを作ることになりました。
サーバはどうしようかな~と考えましたが、今後も大きくなりそうなのでさくらのビジネスプロに決定!
ってなわけでまずはさくらのレンタルサーバにCodeIgniterをぶち込むことから始めます。
1.CodeIgniterダウンロード
まずは下記のリンクからCodeIgniterをダウンロード(2010/11/26現在のversionは1.7.2)して解凍します。
http://codeigniter.com/downloads/
2.FTPでアップロード
さくらのレンタルサーバへ解凍したフォルダごと/home/xxxxx/www直下にアップロード。
3.Teratermでログイン
cshが使いにくすぎるのでとりあえずbashにしました。
参考:http://www.hazama.nu/t2o2/archives/002697.shtml
落ち着いたらzsh入れます。
4.Config直下のファイルを編集
さくらの環境に合わせてデータベース等の設定ファイルを編集します。
5.vimインストール
なんと(いや普通か)vimが入ってなかったので、インストールしました。
参考:http://dameninngenn.sblo.jp/article/35264757.html
※上記のサイトだとパスを通していないため、.bashrcに下記を追記。
PATH="$PATH"":$HOME/local/bin
6..htaccess設定
さくらのレンタルサーバだとURLルーティングに癖があるらしいので下記のサイトを参考に.htaccessを設定
参考:http://d.hatena.ne.jp/mcatm/20090415/1239807899
ちなみにこんな感じです。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(index\.php|css|robots\.txt|js|images)
RewriteRule ^(.*)$ /index.php?/$1 [L]
7.動作確認
適当なcontrollerとviewを用意して動作確認。
おお!普通にいけた。
Symfonyのときはさくらに随分泣かされたのでちょっと感動。
これで開発できる環境が整ったので、一気に仕上げるぞ~
CodeIgniterにおいてURLにデフォルトで含まれるindex.phpを消すには、以下の内容を.htaccessに記述し、ドキュメントルート直下に配置すればOKです。
- RewriteEngine on
- RewriteCond $1 !^(index\.php|css|js|images)
- RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCondの値は必要に応じて適時追加してください。
auto_incrementをリセットするには以下のコマンドで出来ることがわかった。
ALTER TABLE `テーブル名` PACK_KEYS =0 CHECKSUM =0 DELAY_KEY_WRITE =0 AUTO_INCREMENT =1
もっと早く知りたかった・・・・・
今回はjavascriptのベクターグラフィックライブラリであるRaphaelを紹介。
前回紹介したdojoライブラリでは細かいところまでいじれなかったため、Raphaelを使ってみることにした。
・使用方法
・Raphaelをダウンロードする
ここのページの右上からダウンロードできる。
・htmlファイルを作成する
上記でダウンロードしたjsファイルをインクルードする
- <script src="../js/raphael/raphael.js" type="text/javascript"></script>
- <script src="../js/raphael/sample.js" type="text/javascript"></script>
-
-
・jsファイルを作成する
実際に描画する処理を書く
- window.onload = function () {
-
- var paper = Raphael("holder", 400, 400);
-
- var circle = paper.circle(200, 200, 100);
-
- circle.attr({"fill": "skyblue", "stroke": "#000", "stroke-width": 4});
-
- var rect = paper.rect(220, 240, 30, 30);
-
- rect.attr({"fill": "red"});
-
- var ellipse = paper.ellipse(200, 100, 30, 40);
- };
ちなみにサンプルはこちら
【参考】
http://www.skuare.net/test/raphael_1.html
http://raphaeljs.com/reference.html
今回はdojo1.3を使ってグラフを作ってみたのでメモ。
javascriptでグラフを作成できるライブラリは他にもあったが、
・javascriptで記述している(画像を吐き出すわけではない)
・フリー(タダ)
・円グラフでonclickイベントが拾える(実装も簡単)
の理由からdojoを採用した。
時間が無かったので、ドキュメントのサンプルを参考に作成し、
データ項目をクリックした際にonclickイベントを取得できるようにした。
サンプル:http://y2-space.com/program/dojotest.html
【参考】
dojo:http://www.dojotoolkit.org/
リファレンス:http://api.dojotoolkit.org/jsdoc/1.3.2/dojox.charting
dojo.chartingリファレンス:http://docs.dojocampus.org/dojox/charting
sfPropelPagerはsymfonyのデフォルトORMであるpropelを用いたページャー機能だが、ちょっとおかしなところがあったのでメモ。
getNbResults()は取得した全レコード数を返す関数だが、group byを指定するとおかしくなることが判明。
group byすると何故かgroup byしていない全レコード数がセットされてしまう。
色々調べたところ、原因はsfPropelPager の中でdoCount した時にgroup by の項目をクリアしてからdoCountしているらしい。
参考:http://u2k772.blog95.fc2.com/blog-entry-15.html
ってなわけでここに書いてある通り
- <?php
- $criteria = new Criteria();
- $criteria->setDistinct();
- ・・・
- ・・・
- $criteria->addGroupByColumn(...);
- ?>
としたらきちんと取得できた。
あざっす!!
前回でsymfony(prototype)のヘルパーを用いて、ドラッグ&ドロップする機能を実装した。
あれこれ試しているうちにはまったことがあったので以下にメモ。
1.draggable_element、drop_reciving_elementは指定したい要素よりも後ろに記述しなければならない。
2.IEの場合、書き換える要素に
・drop_reciving_elementで指定している要素
・drop_reciving_element自体
を指定することは出来ない。これらを指定すると2回目以降ドラッグできなくなる。
中でも2はfirefoxとchromeでは動くのにIEだけ動かなかったのでかなりイライラしたw
要はdrop_reciving_elementで指定している要素は変更するなということらしい。
フリッカーのグルーピングのようなドラッグ&ドロップで画像を操作する機能を実装したいと思い、色々と調べてみた。
symfonyのJavascriptヘルパーの中身を調べていたら
draggable_element()
drop_receiving_element()
の2つのヘルパーで実装できることが判明。
まずはドラッグするための機能を説明する。
- <div id="product_list" class="product">
- <?php foreach($products as $id => $title): ?>
- <?php echo image_tag('product'.$id, array(
- 'id' => 'product_'.$id,
- 'alt' => $title,
- 'class' => 'products'
- )) ?>
- <?php echo draggable_element('product_'.$id, array('revert' => true)) ?>
- <?php endforeach ?>
- </div>
draggable_element(ドラッグさせたい要素のid, [オプション])
で指定した要素をドラッグ出来るようになる。
draggable_elementは次のパラメーターを受け取る。
| パラメーター |
説明 |
| revert |
trueに設定した場合、要素が放たれたときに元の位置に戻るようになる。
また任意の関数を呼び出すことも可能。 |
| ghosting |
要素をクローンして、要素が放たれても元の位置に戻らないようになる。 |
| snap |
falseに設定した場合、スナッピングされない。 |
次にドロップの機能を説明する。
- <?php forearch ($labels as $label) : ?>
- <div id="label_<?php echo $label->getId() ?>">
- <span id="count_<?php echo $label->getId() ?>">0</span>
- <span id="indicator_<?php echo $label->getId() ?>">loading now....</span>
- <?= drop_receiving_element('label_'.$label->getId(), array(
- 'url' => 'blg/add?label_id='.$label->getId(),
- 'accept' => 'product',
- 'update' => array(
- 'success' => 'count_'.$label->getId(),
- 'failure' => 'error_'.$label->getId()
- ),
- 'method' => 'GET',
- 'hoverclass' => 'label-active',
- 'script' => 'true',
- 'confirm' => '"'.$label->getLabelName().'に追加しますが、よろしいですか?"',
- 'loading' => 'Element.show("indicator_'.$label->getId().'")',
- 'complete' => 'Element.hide("indicator_'.$label->getId().'")',
- )) ?>
- </div>
drop_receiving_element(ドロップさせたい要素のid, [オプション])
で指定した要素をドロップ出来るようになる。
drop_receiving_elementは次のパラメーターを受け取る。
| パラメーター |
説明 |
| url |
ドロップされたときに実行するurl |
| accept |
ドロップさせる要素を文字列またはcssクラスで指定する。 |
| update |
更新する要素を指定する。配列を指定することで成功時と失敗時の要素を指定できる。 |
| method |
POST、GETなどを指定する。 |
| script |
trueの場合、指定したアクションでjavascriptを実行できる |
| hoverclass |
要素をドラッグしている最中(ドラッグしているがドロップはしていないとき)のcssクラスを指定する |
| confirm |
確認ダイアログに表示する文字列を指定する |
またdrop_receiving_elementに限ったことではないが、
symfonyのajaxヘルパーには以下のようなコールバックのトリガーが設定されている。
| コールバック |
説明 |
| before |
クエストが初期化される前 |
| after |
リクエストが初期化された直後で読み込まれる前 |
| loading |
ブラウザからのデータでリモートの文章が読み込まれているとき |
| loaded |
ブラウザがリモートの文章を読み込み終えたとき |
| interactive |
ユーザーが読み込みを終えずにリモートの文章とやりとりしているとき |
| success |
XMLHttpRequest が完了し、HTTP ステータスコードが 2XX のとき |
| failure |
XMLHttpRequest が完了し、HTTP ステータスコードが 2XX でないとき |
| 404 |
url が 404 ステータスを返すとき |
| complete |
XMLHttpRequest が完了したとき ( 失敗であろうと成功であろうと ) |
参考:第11章-Ajaxの統合
symfony book 日本語ドキュメント Javascriptヘルパー