投稿日:

WordPress でフックを登録するタイミングなど 〜 parse_request


WordPress の管理画面の次の部分の表示内容を変更したいという要件がありました。

screen-custom

調べると、このデータには「views_{screen_id}」のフィルターフックでアクセスできます。ただここで問題なのは、{screen_id} の部分です。この部分は画面毎に動的に変化しますので、どこからか値を取得してきて、add_filter しないといけません。

続きを読む WordPress でフックを登録するタイミングなど 〜 parse_request

投稿日:

HTML5とJavaScriptによるiPhone/Android両対応アプリ開発ガイド を発売しました


機会を頂戴いたしまして、弊社代表の野島も執筆に参加した書籍が、2013 年 3 月 11 日に、翔泳社様より出版されました。

614MUTKGzJL._SS500_

Amazon 販売ページ:
http://www.amazon.co.jp/HTML5とJavaScriptによるiPhone/Android両対応アプリ開発ガイド (DESIGN & WEB TECHNOLOGY)/dp/4798129682/

(紹介文)
本格的なスマホアプリを「HTML5とJavaScript」で作ろう! HTML5とJavaScriptを利用したスマートフォンアプリ開発が、2011年から注目されてきています。背景には、PCやタブレット、スマートフォンなど、異なるデバイスでも一定レベルで動作できるWeb技術(HTML5とJavaScript)が整ってきたことがあげられます。本書は、そうしたHTML5とJavaScriptを組み合わせてスマートフォンアプリを開発したい方に向けた書籍です。HTML5とJavaScriptを組み合わせたプログラミングの基本から始まり、スマートフォン向けデバイスAPIと組み合わせた開発、そして実際に開発者の方が作ってみたくなる本格的なスマートフォンアプリの開発手法までを解説しています。これ1冊で、HTML5とJavaScriptを利用したスマートフォンアプリ開発手法をひと通り学べます。

弊社で担当させていただいた部分は2章で、Web技術の基礎について解説しています。
また機会がございましたら是非書店などで手に取っていただけましたら幸いです。

このページのビュー数が多いので、2章について少し補足します。

  • 2章では、HTML、CSS、JavaScript の3つのパートで基礎的な事を解説しています。
  • HTML、CSS のパートでは、本書の読者層を考慮し、HTML5 や CSS3 で今後実用的に利用できるであろう新しい要素や表現方法を紹介しています。特にスマートフォンの開発では現実的でしょう。これらの新しい技術を利用することで、ユーザビリティを高めることが出来たり、またスマートフォンにおける回線速度問題への対応や、いわゆる Retina ディスプレイへの対応など、多くの課題についてよりベターな解決方法を選択出来るようになります。
  • JavaScript のパートでは、JavaScript の特徴的な言語パラダイムを改めて丁寧に解説しています。JavaScript の特性や機能をより正しく理解することで、JavaScript でより高度で大規模なプログラムを書くための基礎知識を整理しています。JavaScript のビギナーにとっては内容は少し高度かも知れませんが、これらの理解が不足している場合、スマートフォンなどのクライアントサイドで動作する本格的なアプリケーションを開発することは難しいかも知れません。

 

投稿日:

CakePHP 2.x で Entity オブジェクトを使えるプラグイン — FkRecordModel


昨年ぐらいから CakePHP 2 を本格的に触ることになりまして、これまでの Paper ドライバーを卒業と喜んでいたんですが、いきなりつまづいた…というか不満に思ったのが Model の構造でした。CakePHP も 2 となり、もうてっきり Rails の ActiveRecord のようなものになっているかと思いきや、find メソッドが返すものは相変わらず array だったんですね。これはもう思想なのかも?…とはいえ、Paper ドライバーレベルではなかなか思想まで理解できません。同じような不満が出ていないかと検索してみたところ、次の記事が見つかりました。

同じことを思う方はいるもので♪ 早速、上のプラグインを利用させていただいたのですが、どうも CakePHP 2 系では上手く動かないようでしたので、修正を試みたものの、挫折。せっかくだからということで、自分で作ることにしました。これでも自称フレームワークマニアですしねw

その成果物がここで紹介する FkRecordModel です。GitHub に公開中です。

次のような簡単な構成になっています。

  • FkRecord        エンティティオブジェクト。find メソッドなどの戻り値などになります。
  • FkRecordCollection  findAll などの戻り値となります。
  • FkRecordModel  拡張された Model クラスです。FkRecord 生成の為に find などをオーバーライドしています。

次のような機能があります(特に高機能ではありません)。

  • FkRecord::save() で保存
  • FkRecord::validates() でバリデーション
  • FkRecordModel::build() 新しい FkRecord のビルド
  • エンティティフィールドのシンプルなアクセス。Ex. $post->title
  • Validation error は FkRecord が保持し、View で参照可能
  • HTML のラベルの表示などに利用できるフィールド別名のサポート(VerboseName)
  • リレーションを FkRecordCollection で取得。Ex. $post->tags //hasMany のデータの取得

上述の CakeEntity プラグインとの相違点は多々とあると思いますが、とりあえず大きなところで、本プラグインは「CakePHP の通常通り配列を返す」という選択肢を設けていません。find 系メソッドは常に FkRecord または FkRecordCollection を返します。(自分はたぶん使わないからです。ごめんなさい)。また、FkRecordCollection は不要だったり邪魔だと思われる方も我慢してください(イテレータにしておくと色々と便利という信条です)。ちなみに、FkRecordCollection::sort() メソッドには不満があります(削除または改良したいです。どなたか良い案ください)。

以下、簡単な利用例です。

AppModel の定義

まずは以下のように AppModel の super クラスとして本プラグインのクラスを利用します。AppModel の他に、AppRecord も作成してください。FkRecordCollection は全てのモデルで共通に利用されます。

具象モデルクラスの定義

モデルクラスでは、それぞれのモデル毎に、Model と Record を定義します。Model の定義は通常通りですが、verboseName などの指定ができます。Record にはエンティティオブジェクトで提供したい機能を実装してください。自らのフィールドへのアクセスは、$this->fieldName または $this[$alias][$fieldName] です。

Controller での利用例

Controller での利用は次のような雰囲気になります。$post->save() のようにして保存します。FkRecord::save() メソッドは、バリデーションエラーがある時には、false を返します。バリデーションエラーの内容はエンティティオブジェクトが保持し、これは View の中で利用できます。

View での利用例(一覧表示)

FkRecordModel に定義された関連は、$post->tags のようにして FkRecordCollection/FkRecord として取得できます。なお、FkRecordCollection は empty($posts) のように空判定できません。FkRecordCollection::isEmpty() メソッドを利用してください。

View での利用例(編集画面)

フォームを扱うには、FkRecord::bindFormHelper() メソッドで FormHelper をエンティティにバインドし、以後、$post->Form->text($fieldName) といった感じでフォームエレメントを出力できます。FkRecord::getVerboseName($fieldName) でフィールドの別名を取得できます。FkRecord::getError($fieldName) で、そのフィールドにエラーがあれば、その内容を取得します。

 

以上、簡単にですがご紹介まで。

もし奇特な方がいらっしゃいましたら、一度ご利用いただき、是非フィードバックなどを頂けたら嬉しいです! 是非! 是非!