月別アーカイブ: 2011年1月

CakePHP から wordpress のデータを扱う

再び CakePHP 本体に戻って、その実力なぞ…というか自分的に調査。 そういえば、v1.3.x からは Model::findAll メソッドが動かず Model::find(‘all’) に切り替えられたんだそうだ。 find :: データを取得する :: モデル :: CakePHPによる開発 :: マニュアル :: 1.3コレクション :: The Cookbook http://book.cakephp.org/ja/view/1018/find この変更は、ちと大きいのかなぁ。古いマニュアルを読んでいると findAll を使っているところが多いので、悩んだりします。因みに、findAllByカラム名 は動くんですよね(何故か、findAll だけが動かないという現象で悩んだ) wordpress のデータベースの構造は比較的簡単で、11 … 続きを読む

カテゴリー: CakePHP, Wordpress | 1件のコメント

写真にマスクをかけて切り抜きをする

久し振りに、美女Linux http://bijo-linux.com のブログパーツ作成です。 今回は、ブログパーツ自体をハートマークにしてしまおうという企画で、出来上がりはこんな感じ。 ここのブログだと、背景が白なので変わり映えしませんが、色がついていたり画像が貼ってあったりすると、透過されているのがよくわかります。 さて、これをどう実現するのかと言うと、って非常に簡単で。 ハートマークのフレームを用意します。 ハートマークに切り抜いた写真を用意します。 そして重ね合わせ しているだけです。普通、写真のほうは四角形だったりするので、ブログパーツ自身も四角形になってしまうことが多いのですが、元の写真から切り抜いてしまえば、重ね合わせのときに両方とも背景が投下されます。 ▼切り抜いた写真 ▼フレーム画像 の重ね合わせです。 さて、この切り抜いた画像をどう作るかというと、マスク画像との重ね合 … 続きを読む

カテゴリー: 開発, ブログパーツ | コメントする

クローリングされにくいユニークなIDを発行する方法

ちょっと思いつきメモ。 CakePHP を使っていて思うのだけど、id が大抵 auto inrement になっているのが問題になる場合がある。内部的な id ならば int でガンガン連携すればいいのだけど、 レガシーデータベースの場合は、id が文字列だったり レガシーデータベースの場合は、プライマリーキーが複数だったり、 連続する id だと、クローリングされやすい。 という問題がある。 先の2つは、後で CakePHP で確認するとして、連続する id で問題なのは、 商品IDのように、サイトでクローリングされるとちょっと困る 場合なのだ。 例えば http://servername/books/100 という id を振ってあったら、次は容易に http://servername/books/101 と想像できる。で、そうなると、books/10000 なんてあったら、すぐにで … 続きを読む

カテゴリー: 開発, 雑談 | コメントする

オレオレ MVC を作ってみる(1)

CakePHP の構造が分かったので、簡易 MVC を作ってみます。 理由としては、 CakePHP を導入するまでもないかなぁ、という時? 導入前に、そもそも MVC が、どういうものなのかを把握する時? PHP で MVC の繋がりってどう作るんでしょうね? といったところです。 いずれ、CakePHP に移行するという前提にして、命名規約などは CakePHP に準じます。 いわゆる まずは view です。 CakePHP と同じように、$Magazines でモデルを参照できるようにします。 お次は、コントローラー モデルクラスを include して、index メソッド内では最後にビューを include して表示、って感じです。 で、肝心のモデルはどうなっているかというと、 データベースからクエリで読み込んで、コントローラーから findAll メソッドの呼び出しでデータを … 続きを読む

カテゴリー: 開発, CakePHP | コメントする

CakePHP を開発する環境を探る

PHP 専用エディタってのを使っていないので、アレなのですが、手元には、 newQX エディタ Visual Studio 2010 Microsoft Visual Web Developer 2010 Express WebMatrix Microsoft Express Web 4 がインストールされています。なので、どれがいいかというと…は自分で判断するとして、参考までにキャプチャを貼りつけておきます。 ■newQX エディタ キーワードに色を付けるだけですが、まぁ、これでも十分なんですが。 ■Visual Studio 2010 Visual Studio 2010 だと、PHP は全然ダメですね。xml として認識されてしまう模様。 ■Microsoft Visual Web Developer 2010 Express ちょっと期待したりするのですが、無料で配布さ … 続きを読む

カテゴリー: 開発, ツール | 3件のコメント

独自のモデルを作ってマッピングする(queryを使う)

CakePHPの場合、モデルとテーブルが1対1と想定しているので、これ以外のマッピングをする場合は、独自の Model を作ったほうがいいと思います。 例えば、先の記事のように、出版社(Publisher)から必ず都道府県(State)の名前を参照するのであれば、あらかじめそういう Model を作ってしまったほうが利便性が高いかな、と。 このような関係があるとき、雑誌の一覧を次のように取得したいと思う訳です。 雑誌ID 雑誌名 出版社名 出版社の所在地/都道府県 これを通常ならば、データベースのビューを作って、 id magazine_name publisher_name publisher_state のような形で取得しても良いのですが、環境によってはデータベースを変更できなかったり、データ管理は別の会社が構築したものだったりして、データベースとプログラムの間には大きな溝があるのが常 … 続きを読む

カテゴリー: CakePHP | 1件のコメント

CakePHPで3つのテーブルを連結させる。

さて、雑誌(magazines)と出版社(publishers)を Model::$belongsTo で連結させることができましたが、今度は都道府県(states)と出版社を連結させて、3つのテーブルを使います。 実用的な問題として、ひとつのテーブルで収まることはまず無い訳で、ログやら単純なマスターテーブル程度ならばいいのですが、【真面目に】テーブルを正規化していれば、3 つ以上のテーブルが連結するのは当たり前ですッ!!! … だといいなぁ、という希望的観測も含めて(苦笑)。 # 説明が面倒なので、T100 を magazines に、T200 を publishers に変更しましたw ER 図はこんな感じで、1対多の関係です。 これを出版社を中心にして(cakephp は left join で連結させるので)、 のように、都道府県名(State)を表示させようとすると、 … 続きを読む

カテゴリー: CakePHP | 3件のコメント

CakePHPで2つのテーブルを連結させる(2)

雑誌(magazines)が出版社(publishers)に属する、という形で magazines のほうから Model::$belongsTo を使って連結できたので、今度は出版社が持っている雑誌の一覧を出してみます。 こんな風に、$Publishers のループの中で、$item[‘Magazine’][‘name’] で参照できれば良いなと。 モデルの Magazine で Model::$belongsTo を設定してあるので、逆向きもできているんじゃないかなぁ、と期待してそのまま動かすと。 なエラーが出ます。逆向きは自動で設定してくれないのですね。。。 なので、Publisher モデルに加筆します。 Mode::$hasMany の詳しい使い方は、マニュアルを見るとして、これを実行するとやっぱりエラーがでます。 「Undefin … 続きを読む

カテゴリー: CakePHP | コメントする

CakePHPで2つのテーブルを連結させる

さて、極悪テーブル命名規則 T100,T200,T300 を magazines, publishers, users に変えることができたので、今度はテーブルの連結をしてみます。 のように、publisher_id を表示させたって意味がないわけで、出版社名(Publisher.name)を表示させたい訳です。 みたいに使えればいいですよね。使えるのかな? という訳で、ひとつの雑誌(magazine)は、出版社(publisher)に属するということで、Magazine モデルを書き換えます。 この外部キーの書き方はいくつかあるのですが、$belongsTo と $hasMeny は双方向なのでどちらか決めで使えばいいんでしょう。 こうすると、先の index.ctp が動きます。生成される SQL を見ると、 となっているので、left join が使われていますね。なるほど。 残念な … 続きを読む

カテゴリー: 雑談, CakePHP | 2件のコメント

CakePHP のモデルでデータベースをリファクタリング

リファクタリングとは言え、いきなりデータベースを変えてしまうのではなくて、database-Model の関係を利用して、「管理のしやすいテーブル名」を、「意味のわかりやすいテーブル名」に変えましょう、という方法です。 # ASP.NET MVC で使う LINQ to Entities や LINQ to SQL なんかは、テーブル名=クラス名が固定(だと思う)なので、この技が使えないのです。 例えば、既存のテーブルが次の 3 つで校正されています。 T100 雑誌テーブル T200 出版社テーブル T300 読者テーブル ああ、なんて【管理しやすい】テーブルなんでしょうかッ!!! おそらく、将来的に雑誌に関係するテーブル名は、「T101」とか「T102」になる、ってことが容易に想像できます。 …が、決して分かり易いテーブル≒プログラミングしやすいテーブルではないですよね。 … 続きを読む

カテゴリー: CakePHP | コメントする