[PHP] アスペクト指向っぽいライブラリ
以前、[雑記] PHPでアスペクト指向してみたという独り言みたいな記事を書いたところ、割と興味を持っていただけているようだったので、拙作ながらソースを公開することにしました。PHP5.3以上のみ対応しています。
Rf_Aspect beta [Download]
以前、[雑記] PHPでアスペクト指向してみたという独り言みたいな記事を書いたところ、割と興味を持っていただけているようだったので、拙作ながらソースを公開することにしました。PHP5.3以上のみ対応しています。
Rf_Aspect beta [Download]
InternetExplorer, Firefox, Opera, Safari, Chromeで動作する、 画像をフェードイン/アウトさせるためのJavascriptのサンプル関数を2つ用意しました。 単一の要素に対して適用するfadeElementと、複数の要素に対して適用するためのfadeTargetClassです。
サイトがすでに稼動しているサーバ上で、新しくDrupalを本番稼動させる必要がありました。 このDrupalはルートパスからのアクセスをハンドリングする必要がありましたが、 ドキュメントルートにDrupalのファイルを移す場合、ファイルが競合してしまう可能性がありました。
したがって、すでにサブディレクトリにインストールされているDrupalに対し、 ルートパスからのアクセスを受け流すことにしました。 同じような問題を抱えた人が現れるかもしれませんので、 .htaccessに設定したmod_rewriteの部分をメモしておくことにしました。
ちなみに、今回使用したDrupalのバージョンは6.16です
毎度毎度tarボール拾って野良ビルドするのが面倒なので、 EPELとRemiを使って管理することにしようかなと思い立ったのでやってみました。 ひとまずはPHP, MySQL, nginx, spawn-fcgiをインストールしてみました。
PHPでアスペクト指向したかったので、DIコンテナ作ってみた。 ビジネスロジックとは関係ない部分をどうしても分離したかったんだ・・・
これは、要素のgetBoundingClientRectメソッドを利用するだけで取得できます。 しかし、IEの標準モードにおいては画面左上部の座標が2px分余計に加算されます。 document.documentElement(HTML要素)のclientLeft/clientTopで差分が取得できますので、 これらの値を差し引くことによって、IEでも正常な絶対座標を取得することが出来ます。
function getElementScreenPosition(elem)
{
var html = document.documentElement;
var rect = elem.getBoundingClientRect();
var left = rect.left - html.clientLeft;
var top = rect.top - html.clientTop;
return {left:left, top:top};
}
getBoundingClientRectで取得する値はスクロール量に反比例する形で変化します。 ページ内の絶対座標は、値にスクロール量を加算することで求めることが出来ます。 スクロール量はdocument.documentElementかdocument.bodyのscrollLeft/scrollTopで取得することが出来ます。
function getElementPosition(elem)
{
// スクロール幅を取得
var html = document.documentElement;
var body = document.body;
var scrollLeft = (body.scrollLeft || html.scrollLeft);
var scrollTop = (body.scrollTop || html.scrollTop);
// 画面内座標を取得
var pos = getElementScreenPosition(elem);
// スクロール幅を加算
var left = pos.left + scrollLeft;
var top = pos.top + scrollTop;
return {left:left, top:top};
}
後方互換モードの場合はdocument.body、標準モードの場合はdocument.documentElementから取得することができます。ただし、ChromeとSafariでは標準モードでdocument.documentElementから取得することができず、document.bodyから取得する必要があります。したがって、document.compatModeを利用し分岐させることはナンセンスです。上記コードでは || で繋げています。
オブジェクト指向という言葉を初めて聞き、調べまわった頃がありました。オブジェクト指向プログラミングについて説明している記事を色々見ましたが、わけのわからない例え話で濁している記事が多く存在しており、実際にどう使えばいいのか分からず、非常に困惑した記憶があります。
ここでは、「プログラミングを少しかじっているけど、オブジェクト指向プログラミングというものがよくわからない」人を対象にザックリと説明していきたいと思います。今回は概念的なところを説明したいと思います。