WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート 2009年03月

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

GmZendAutoLoaderPlugin


Zend Frameworkのようやクラス名とファイルの場所が一致しているタイプのクラスをオートロードするプラグインを作ってみました。
TheBookの他のフレームワークのコンポーネントと統合するだと、アプリケーション毎に設定を書かなきゃならないので、プラグインにしてみました。

symfony plugin-install http://plugin.gomo.jp/plugins/GmZendAutoLoaderPlugin/GmZendAutoLoaderPlugin-1.0.1.tgz

設定はSF_ROOT/config/settings.ymlに書きます。

all:
.settings:
gm_additional_path: /home/sites/library

複数の場合
all:
.settings:
gm_additional_path:
- /home/sites/library
- /home/sites/PEAR

インクルードパスを通し、なおかつZend_Loader::autoloadのようなautoloderメソッドをspl_autoload_registerします。汎用性のためあえてZend_Loader::autoloadは使わず、プラグイン内に実装してます。
ちょっと試したところ、PAERもうまく読み込めました。(strictエラーがいっぱい出ますが)
インクルードパスを通すのとspl_autoload_registerを登録してるのは別メソッドなのでインクルードパスを通すのに使ってもいいかもしれません。

1.0.1symfonyパッケージの依存バージョンを調整

[symfony 1.1.6]

    このエントリーをはてなブックマークに追加

Java言語で学ぶリファクタリング入門Java言語で学ぶリファクタリング入門
(2007/01/27)
結城 浩

商品詳細を見る
結城さんの書籍は本当に読みやすいです。
デザインパターン入門と合わせて絶対読むべし
リファクタリングとはプログラムの結果を変えずに内部の実装や設計を見直すことです。忙しくて作りっぱなしにしてしまうことが多いと思いますが、これをやると後の拡張が楽になるだけ無く自分のスキルに自身が持てるようになる・・・筈です!

    このエントリーをはてなブックマークに追加

メソッド名をStringで変数に入れてそのメソッドを呼び出す方法です。


public class Test
{
public function hoge():void
{
trace('hoge');
}
}


var test:Test= new Test();
var func:String = 'hoge';
test[func]();

    このエントリーをはてなブックマークに追加

いびつな形のフラッシュをページに埋め込まなきゃならなくてpositionとz-indexを使いHTMLとフラッシュを重ねました。この時、フラッシュよりz-indexが奥にHTMLが入ってしまうとリンクなど何もクリックできなくなってしまいます。なので、フラッシュをz-index:1にしてHTMLを手前にもって行きました。

しかも、フラッシュ自体の長さが変わるので、ExternalInterfaceでフラッシュからjavascriptを呼び出し、フラッシュより下にあるコンテンツのpaddingをグッと持ち上げました。

そうしたら、持ち上げたHTMLコンテンツがz-index:1のフラッシュより奥に行ってしまいました。javascriptで場所を移動した後にjavascriptとpositionを指定してやれば元に戻ります。検証していませんが恐らく場所を変えるとその辺りのデータがリセットされるのでしょうか・・・
時間があったら検証してみます。

ちなみにブラウザはFirefox3です。

    このエントリーをはてなブックマークに追加

最初にsymfony init-appしたアプリをフロントエンド、2番目以降をバックエンドと呼んでいるようですが、バックエンドのアプリでlink_toなどが生成するURLに


http://www.example.com/app_name.php/module/action
のようにフロントコントローラーのphpがついてしまいますが、これはデフォルトの設定で変えることが可能です。SF_ROOT/apps/app_name/config/settings.ymlにno_script_nameという設定があります。

prod:
.settings:
no_script_name: on
onにしてしまえば消えます。

[symfony 1.1.6]

    このエントリーをはてなブックマークに追加

次にコードを実行してみてください


trace(-124.4 - 62.2);


-186.60000000000002
このような結果になります。一定間隔で動き続けるものを作ってたのですが、長時間動かし続けると微妙にづれることに気づきました。で、色々traceしていて発見しました。62.2を62.5になるよう調整したところずれなくなりました。
ちなみにFlashCS3で開発をしてます。

    このエントリーをはてなブックマークに追加

最近フラッシュを作る機会があって久しぶりにいじりました。
importしているのにどうしてもnewできないクラスがあり困ったのですが、なんてことは無いクラスをpublicにしてないだけだったという落ちです。


package gomo
{
public class ClassName
{
public function ClassName():void
{

FlashCS3で開発してるのですが、この件だけではなく、エラーメッセージはひどいですね。もうちょっと情報くれないと・・・まあ、文句言ってもしょうがないのでがんばります。

    このエントリーをはてなブックマークに追加

app/config/settings.yml内で


all:
.settings:
escaping_strategy: on
escaping_method: ESC_SPECIALCHARS
全ての変数のエスケーピングをオンにしている時、特定のクラスだけ強制的にエスケーピングをオフに出来ます。

sfOutputEscaper::markClassAsSafe('ClassName');
を呼び出せばそのクラスの返す値はエスケーピングされなくなります。本当にそのクラスをSafe Listに加えてよいのかは難しいところですが。
どこでやるかは迷いますが、クラス内で完結できるので対象クラスのコンストラクタでやりました。

public function __construct(sfPager $pager)
{
sfOutputEscaper::markClassAsSafe(get_class($this));
$this->pager = $pager;
}
複数回実行されるの可能性があるのは微妙ですが、sfOutputEscaperでarray_uniqueが実行されてるので重複されて登録はされないようです。

    このエントリーをはてなブックマークに追加

Textareaにデフォルト値など何かテキストを放り込むと、カーソルが一番下に行ってしまいます。ほとんどの場合あまり問題ないのですが、メールの用に引用テキストを下に入れておきたいケースで一番上にカーソルを移動したかったのでやってみました。IEとFirefoxで挙動が違うのでちょっとてこずりました。
prototype,jsを使っているので適宜読み替えてください。


function setCaretToStart(e)
{
var elem = Event.element(e);
if(document.selection) //for IE
{
var range = elem.createTextRange();

range.collapse(true);

range.moveEnd('character', 0);
range.moveStart('character', 0);
range.select();
}
else //for firfox
{
elem.selectionStart = 0;
elem.selectionEnd = 0;
}
}
Event.observe($('reply_content'), 'focus',setCaretToStart);
IEはfirebugが無いので厳しいですね。firebugliteInternet Explorer Developer Toolbarを使ってみましたがいまいちです。オブジェクトのメソッドとプロパティの一覧が簡単に確認できるとうれしいのですが。
とりあえずこの辺で調べました。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。