阪神岡田監督の黄色い時計が気になる
0今年のタイガースの不甲斐なさも気になるが、テレビ中継を見ていて岡田監督がアップになったときの黄色い時計も気になる。。。
なんか子供がつけるような黄色いベルトで文字盤に緑色まで見える。かなり派手だ。
うちの相方なんか「阪神グッズじゃないの?」とか言っているし。それは絶対ないだろうな。
で、調べてみたところスイス製の時計でした。
ゾディアックのシードラゴンという商品のようです。
価格も25,000円前後と岡田監督がしている時計としては割りとお手ごろですね。
CakePHP でビューでメール本文を作成する方法
0前回の記事でメール用のビューを管理する方法を書きましたが、
今回はビューを使用してメール本文を作成する方法です。
前提として
- メール用のレイアウト名は /app/views/layouts/email.thtml で管理
- メール本文に使用するビューは /app/views/email/hoge.thtml
だとすると
ob_start();
という感じで、$body に本文が入ります。
$this->render(null, 'email', '/path/to/app/views/email/hoge.thtml');
$body = ob_get_clean();
ちなみにレイアウトを指定しないと default.thtml が使用されHTMLタグが入ってしまいます。
emial.thtml で
ここにメールの共通ヘッダなどなど <?php echo $content_for_layout; ?> ----------------------------------- ここに署名などなど -----------------------------------
としておけば、HTMLタグも入らずに署名やヘッダなども読み込めてよいかと思います。
CakePHP でコントローラ名以外の view を指定する方法
3CakePHP では HogeController::foo() に対するビューは
/app/views/hoge/foo.thtml
になります。
このときに、/app/views/hoge/foo2.thtml というビューを使用したいときは
HogeController::foo() で
$this->render('foo2');
と指定すればOKです。
今回違うコントローラ名で管理しているビューを使用できないものかと
/cake/libs/view/view.php
を調べてみたところ
$this->render(null, 'layout', '/path/to/app/views/email/register.thtml');
という方法で
/app/views/email/register.thtml
のビューを HogeController::foo() から使用できました。
render の第3引数に絶対パスで使用したいビューを指定すればOKです。
第1引数でビュー名を指定しますが、第3引数が指定されていると無視されます。
また、レイアウトは第2引数でそのまま指定できます。
あまり他のコントローラのビューを使用することはないと思いますが、
例えば、メール送信時に使用するビューを
/app/views/email/
などのディレクトリ名で管理するなどが用途として考えられます。
PEAR の DB から MDB2 への移行メモ
0やっとMDB2 へ移行したので、その時のメモ。
DBからMDB2への移行は結構いろいろなサイトで書かれていますね。
PHPのテクメモ | pearのDBとMDB2の違い
DB-2-MDB2
これらを参考にさせていただいたのですが、
私はよくプレイスホルダをよく使用しています。
$db->getOne('SELECT * FROM users WHERE id=?", array($id));
MDB2では queryOneメソッドではプレイスホルダが使用できないので(queryRow,queryAllなども同様)移行に手間がかかってしまいます。
少し調べてみると下記のようにすることにより、MDB2 でもプレイスホルダが使用でき、しかも getOne や getAll などのメソッド名もそのまま使用できます。
$db->getOne('SELECT * FROM users WHERE id=?", array($id));
$mdb2->getOne('SELECT * FROM users WHERE id=?", null, array($id));
ただ、
require_once 'MDB2.php';
require_once 'MDB2/Extended.php';
と Extended をロードする必要があります。
瞬間接着剤が指についたときの取り方
1昨日、瞬間接着剤のフタから液が漏れているのを気がつかずにつかんでしまい、左手の指が3本くっついてしまうというトラブルが発生しました。。。
あ、私ではなく、相方です。
最初はお湯につけて指をもんでみたのですがまったく取れそうにないので、
車を飛ばしてホームセンターで瞬間接着剤のリムーバを購入。
早速指に垂らして様子を見たのですが、まったく取れない。。。
自分自身が情けないって相方はもう泣きそうですよ。
実は車でリムーバを購入に行く前にネットで調べたのですが、
リムーバの他に除光液が書かれていたのを思い出しました。
マニキュアの除光液を指に垂らしてみると、今度は少し指が離れた感じがあると!
それからビンの半分くらいの量を少しづつ垂らしながら30分かけて無事引き離すことができました。
専用リムーバより除光液が効くって。。。がんばってくれリムーバ。
まあ、指はリムーバが留まらずに落ちていってしまうから不利かもしれない。
物とかなら専用リムーバが効くのでしょう。きっと。。。
CakePHP SQL を書いて実行する方法
1CakePHP ではSQL を書かなくてもだいたいなんでもできるのですが、
ちょこっとSQLを書いて実行したいことがあり調べたメモです。
/cake/libs/model/model_php5.php
を眺めていると findBySqlメソッドがありました。
引数はSQLを文字列で受け取ります。
これだ!っと思ったらただ単に
function findBySql($sql) {
return $this->query($sql);
}
となっている。。。
queryメソッドにSQLを投げればいいんですね。
$sql = "SELECT NOW()";
$foo = $this->HogeModel->query($sql);
CakePHP 実行したSQL を表示する方法
1開発中に実行されたSQLを表示したいことは多いと思います。
/app/config/core.php
の52行目あたりにある
define('DEBUG', 1);
を
define('DEBUG', 2);
と、デバッグレベルを2以上にするとブラウザの一番下にSQLが表示されます。
デバッグレベル3にすると「Controller dump」と表示され
そのときのコントローラの print_r と実行されたSQLが表示されます。
デバッグレベル2だと実行されたSQLのみ表示されます。
開発時には重宝しそうです。
CakePHP 入力フォームで確認画面を表示する方法
3フォームを入力後、すぐに保存ではなく一度確認画面を表示させたい場合のやり方。
こちらに詳しいやり方が書いてあります。
http://www12.atwiki.jp/nezox/pages/6.html
ポイントは
- 入力フォームで
<input type="hidden" name="mode" value="confirm">
とする。
- コントローラの add アクションでバリデーションチェック後に
if (@$_POST["mode"]=="confirm") { // 確認画面を表示する $this->render('confirm'); } else { // 保存処理 if ($this->User->save($this->data)) { $this->flash('Your post has been saved.', '/users'); } }
- 確認画面の view を confirm.thtml を作成
<h1>確認画面</h1> <form action="<?php echo $html->url('/users/add'); ?>" method="post"> ログインID: <?php echo $html->tagValue('Users/login_id'); ? <?php echo $html->hidden('Users/login_id', array('value'=>$html->tagValue('Users/login_id'))); ?> <input type="button" value="戻る" onclick="history.back();"> <input type="submit" value="新規登録"> </form>
CakePHP で Smarty を使用するメモ
3Smarty を CakePHP で使用する方法を調べたメモ
Smarty の用意
Smarty ディレクトリを/vendors ディレクトリへコピー
/vendors/smarty/Smarty.class.php
のようになる。
Smarty が使用するディレクトリを作成
/app/tmp/smarty/cache/ /app/tmp/smarty/compile/
Smarty 用の View クラスの準備
レンダリングを任せる Smarty View Class を設定します。
Smarty View Class をダウンロードして smarty.php とリネームして
/app/views/
に配置する。
smarty という名前のサブディレクトリを使用しないなら
$this->subDir = 'smarty'.DS;
をコメントアウトする。
また、
$this->Smarty->assign_by_ref('view', $this);
を
$this->Smarty->assign_by_ref('this', $this);
に変更する。
この変更はテンプレートの中で $this を .thtml と同じように使用したい場合に必要。
AppController の設定
/app/app_controller.php
を作成
class Appcontroller extends Controller{ var $view = "Smarty"; }
実際の使用
view に .tpl があれば Smarty テンプレートとして処理を行い、なければデフォルトの .thtml を表示するようになる。
.tpl の中では .thtml で使用できるヘルパーも使用できる。
.thtml の「<?php echo」を「{」、「;?>」を「}」にすればほぼそのまま利用できる。
ただ、.thtml で HTMLヘルパーを使用している場合
{$html->input('Post/name', array('size'=>'30'))}
のままでは、array(…) でエラーになる。
これを修正するには、Smarty のプラグインを使用して解決する。
プラグインをダウンロードして function.assign_assoc.php にリネームして
/vendors/samrty/libs/plugins/
に配置する。
テンプレートの先頭で
{assign_assoc var='ArrayName' value='size=>30'}
などとして
{$html->input('Post/name', $ArrayName)}
とすればOK.
ただ結構最後のやつが面倒かも。。。
CakePHP テンプレートファイルの拡張子を変更する方法
1CakePHP のテンプレートファイルはデフォルトでは拡張子が .thtml です。
これを変更するには、コントローラのメンバ変数 $ext に変更したい拡張子を設定する。例えば .html にする場合は
var $ext = '.html';