Posts tagged 本
WordPress 携帯閲覧用プラグイン
0本ブログに携帯閲覧用プラグインをインストールしてみました。
下記のサイトに詳しくインストール方法は書かれています。
非常に簡単でした。
ファイルを2つアップロードして管理画面からプラグインをアクティブ化するだけで携帯から閲覧するのに適したページにしてくれます。
クロックス購入
2クロックスを家族3人で購入。
今まではサンダルといえばビーサンばかりの私でしたが、はやりものに負けました。
私のお気に入りのビーサンといえば葉山のげんげいです。
先日、本も出版されました。
ビーサン屋げんべい物語―葉山の片隅から世界を狙うオンリーワン商店
もちろん発売日にそく購入しました。
CakePHP コントローラのメソッドをURLから実行させない
0コントローラにアクション以外のメソッドを書かないのが一番いいのかもしれません。
ただ、どうしても書きたいという場合にはメソッド名にアンダーバー “_” を付けるとURLからアクセスできなくなります。
試しに posts_controller.php に _foo というメソッド名を作り /posts/_foo/ にアクセスしてみると
Private Method in PostsController
You are seeing this error because the private class method _foo should not be accessed directly.
とプライベートメソッドなのでアクセスできませんよというエラーメッセージが出力されました。
しかしこのメッセージってあまりよくないのではと思い、試しに DEBUG=0 とデバッグモードを本番環境用にしたところ、
Not found
The requested address posts/_foo/ was not found on this server.
となりました。やはり考えてますよねそれくらい。
ちなみにエラーメッセージは
/cake/libs/view/templates/errors/
にエラーの種類によって15のテンプレートが用意されています。
自分で Not found などのエラーを修正したい場合は
/cake/libs/view/templates/errors/error404.thtml
を
/app/views/errors/error404.thtml
にコピーして修正すればそちらのテンプレートが使用されます。
CakePHP の日本語マニュアルに書かれている
メンバ関数を protected にして見えるようにするには、コントローラアクション名を ‘-’ ではじめてください。(訳注:将来の仕様???)
メンバ関数を private にするためには、コントローラアクション名を ‘–’ ではじめてください。(訳注:将来の仕様???)
というのはこれのことなのかな?
ただ、”_” ではなく “-” になっている。(英語のマニュアルも同様に “-” でした。)
CakePHP 日本語マニュアル
C.4. コントローラ(Controllers)
CakePHP マニュアル(英語)
CakePHP Manual
CakePHP ヘルパーの出力を echo を使わずに出力する方法
2※この投稿の方法はバージョン1.1 までしか使用できないようです。1.2 のソースを確認したところ、$html->input の$return パラメータはなくなっていました。/app/config/core.php に AUTO_OUTPUT という定数もなくなっていました。ご注意ください。
Cakephp のヘルパーを使用していて
<?php echo $html->input('Model/filed', array()); ?>
と書くところを
<?php $html->input('Model/field', array()); ?>
と echo を使用せずに出力するには
/app/config/core.php
AUTO_OUTPUT = true;
にすれば、自動的に出力するようになります。
私はつい echo を書き忘れてしまうので助かります。
ヘルパーのメソッドの $return パラメータを true にするとこの AUTO_OUTPUT を無効にすることもできます。
ただ、各メソッドによって、$return パラメータの位置がバラバラなので、書くときにはヘルパーのソースを確認する必要があるかと思います。
ちなにみに input の場合は
<?php $html->input('Model/field', array(), true); ?>
とすると自動出力を抑止できますので、上記は何も表示されなくなります。
CakePHP 日本語マニュアル
10章 ヘルパー
CakePHP アソシエーションのまとめ(4)
0まとめ(1) では1対1のアソシエーション hasOne でしたが、
今回は1対多のアソシエーション hasMany です。
例えば、一人のユーザに複数のコメント投稿があるような場合です。
データベースは
CREATE TABLE users( id int unsigned auto_increment primary key, nickname varchar(30) NOT NULL, created datetime default NULL, modified datetime default NULL ); CREATE TABLE posts( id int unsigned auto_increment primary key, user_id int unsigned unique, comment text, created datetime default NULL, modified datetime default NULL );
のような場合、アソシエーションの定義は下記のようになります。
< ?php class User extends AppModel { var $name = 'User'; var $hasMany = array('Post' => array('className' => 'Post', 'conditions' => '', 'order' => '', 'foreignKey' => 'user_id', 'dependent' => true, 'exclusive' => false, 'finderQuery' => '' ) ); } ?>
これで、
$this->User->findById($id);
とすると下記のようにデータを取得できます。
Array ( [User] => Array ( [id] => 1 [nickname] => boze ) [Post] => Array ( [0] => Array ( [id] => 1 [user_id] => 1 [comment] => コメント1です ) [1] => Array ( [id] => 1 [user_id] => 1 [comment] => コメント2です ) .... ) );
また、hasOne などと同様に CakePHP の命名規約に従っていれば、foreignKey は指定しなくても大丈夫ですので、最低限
var $hasMany = array('Post');
でもアソシエーションを定義できます。
また、hasMany で指定する配列の意味は下記の通りです。
className
関連付けたいモデルのクラス名
conditions
hasMany で取得したいデータの条件を指定する。 SQL の条件文。
order
関連するモデルのデータの並び順。SQL の ORDER 句の指定方法。
Post.created DESC
テーブル名をカラム名の前に付けないと、User.created と区別できません。
limit
Cake が取り出す関連モデルのデータの最大数。
‘limit’ => 5 のように数字で指定。
foreignKey
関連しているモデルを指している外部キーの名前。
Cake の命名規約に従っている場合は省略可能。従っていない場合はここで指定する。
dependent
true に設定すると、モデルのデータの削除時に関連しているモデル側のデータも削除される。
exclusive
true に設定すると、関連しているすべてのオブジェクトが一つの SQL ステートメントで削除される。
finderQuery
アソシエーションを取り出すために、完全な SQL ステートメントを指定する。
CakePHP 日本語マニュアル
6.4. アソシエーション
WordPress でタグを使えるようにしてみた
2使用したプラグインは Simple Tagging です。
WordPress用、タグ付けプラグイン:Simple Tagging | 創造マラソン
こちらのサイトでかなり詳しく解説されています。
Single.php のエントリー本文の後に
<?php STP_PostTags(); ?>
を入れて、タグを表示させ、さらに
< ?php STP_RelatedPosts(); ?>
でタグにより、関連するエントリーを表示させるようにしました。
また、サイドバーに
< ?php STP_Tagcloud(); ?>
を入れてタグクラウドを表示させました。
ただ、このままではリスト構造で縦に並んでしまうので、
Tag Cloud – Simple Tagging for WordPress – Trac
こちらを参考に下記を追加しました。
style.css
ul#tagcloud { padding:0; margin:0; text-align:center; list-style:none; } ul#tagcloud li { display:inline; font-size:70%; color:#ccc; background: none; padding: 0;} ul#tagcloud li a, ul#tagcloud li a:link { text-decoration:none; } ul#tagcloud li a:hover { text-decoration:underline; } ul#tagcloud li.t1 a { color:#797979; font-size: 120%; } ul#tagcloud li.t2 a { color:#6d6d6d; font-size: 160%; } ul#tagcloud li.t3 a { color:#616161; font-size: 190%; } ul#tagcloud li.t4 a { color:#555555; font-size: 210%; } ul#tagcloud li.t5 a { color:#484848; font-size: 230%; } ul#tagcloud li.t6 a { color:#3c3c3c; font-size: 250%; } ul#tagcloud li.t7 a { color:#303030; font-size: 270%; } ul#tagcloud li.t8 a { color:#242424; font-size: 290%; } ul#tagcloud li.t9 a { color:#181818; font-size: 310%; } ul#tagcloud li.t10 a { color:#0c0c0c; font-size: 330%; }
顔チェキを試してみた
1最近話題の顔チェキを試してみました。
知らない方のために簡単に説明すると携帯から自分の顔写真を送ると有名人で誰に似ているか判定してくれるというケータイサイトです。
で、結果は
- 濱口優 63%
- 平泉成 61%
- 山口智充 60%
どれも言われたことないなぁ。平泉成さんって知りませんでした。
ちなみにウチの相方は
- 沢尻エリカ 51%
- 観月ありさ 48%
- 紺野まひる 48%
でした。こちらもどれも言われたことないそうです。
で、これって本人だったらどうなんだろう?と思い、濱口の写真で試してみました。
使った写真はこちらです。
結果は
- 濱口優 71%
- 森山未來 46%
- 小林隆 43%
でした。やっぱり本人は本人でした。確かに濱口優と森山未來は似ていると思う。
CakePHP アソシエーションのまとめ(1)
1CakePHP のアソシエーションのまとめです。
タイトルに (1) とつけたので多分何回か続けます。
アソシエーションとはモデル間のつながりのことです。
例えば、下記のような2つのテーブルがあると
CREATE TABLE users( id int unsigned auto_increment primary key, nickname varchar(30) NOT NULL, created datetime default NULL, modified datetime default NULL ); CREATE TABLE profiles( id int unsigned auto_increment primary key, user_id int unsigned unique, blog_url varchar(256), hobby varchar(256), created datetime default NULL, modified datetime default NULL );
CakePHP では2つのモデルになります。
User モデルと Profile モデルです。
この2つのモデルは1対1の関係になります。
「一人のユーザは1つのプロファイルを持つ」とういことです。
この2つのモデルの関係を CakePHP に指示するには次のようになります。
< ?php class User extends AppModel { var $name = 'User'; var $hasOne = array('Profile' => array('className' => 'Profile', 'conditions' => '', 'order' => '', 'dependent' => true, 'foreignKey' => 'user_id' ) ); } ?>
これで、
$this->User->findById($id);
とすることにより、
Array ( [User] => Array ( [id] => 1 [nickname] => boze ) [Profile] => Array ( [id] => 1 [blog_url] => http://www.syuhari.jp/blog [hobby] => 読書 ) );
のようにUser モデルだけでなく、Profileモデルの情報も同時に取得することができます。
CakePHP の命名規則を守っていれば、
var $hasOne = array('Profile');
だけでもいけるようです。
※外部キーはモデル名+_id
CakePHP 日本語マニュアル
6.4. アソシエーション
CakePHP デバッグモード
1デバッグモードのメモ
/app/config/core.php の52行目に
define('DEBUG', 0);
と定義されているのがデバッグモード
この値を変更することにより、本番環境、開発環境と切り替えることができる。
DEBUG の値は
0: プロダクションモード。エラーは出力されず、デバッグメッセージも表示されません。
1: 開発モード。 Warnings とエラー、デバッグメッセージを表示します。
2: 開発モード。実行されたSQL 文が表示されます。
3: 開発モード。2に加えて、現在のオブジェクト(通常はコントローラ)のフルダンプも表示されます。
DEBUG=1 で開発を行い、データ取得などの挙動が考えているのと違うときに、
DEBUG=2 にするという感じでやっています。
あまり、 DEBUG=3 を使用していないなあ。コントローラのダンプなので量が多すぎてかえって見づらいので、
debug($hoge);
などで必要なときに個別にダンプを出してしまいます。
もちろん本番環境では DEBUG=0 です。