2009年2月アーカイブ

register_modifier()

register_modifier() -- 変数の修飾子プラグインを動的に登録します。

http://www.smarty.net/manual/ja/api.register.modifier.php

register_modifier()を使って、「number_format2」を作成します拡張します。

 

こんな感じ。

// number_formatを拡張したnumber_format2を作成する。
// 3桁ごとの区切りで、マイナスの場合は、色を赤色とする。
$smarty->register_modifier('number_format2', 'number_format2');
function number_format2($value,$value2){
 if($value >= 0){
  // プラス
  $ret = number_format($value,$value2);
 }else{
  // マイナス
  $ret = sprintf("<font  color=\"#FF0000\">%s</font>",number_format($value,$value2));
 }
 return $ret;
}</p>

 

これでテンプレート中で、

{$hogehoge|number_format2:2}

のような感じで使える。

BOM

| コメント(0)

Byte Order Marker。

unicodeのファイルには、2種類ある。ファイルの先頭数バイトにBOMというコードが登録される。

BOMはテキストエディタでは見えないが、保存するときに指定可能なものがある。

また、指定不可能なものは、新規作成時点でBOM付きかBOM無しかを把握しておく必要がある。

 

プログラム作成において、最近は、UTF-8を内部エンコードとしているOSや言語があるので、作成時点で言語がどちらに対応、非対応の確認が必要となる。

phpでは、BOM無しでなければならない。BOMありの場合は、<?phpの前に存在することとなるため、文字列出力が行われていることになるので注意が必要だ。header関数や、session関数を使うときに問題となる。

Microsoft系のテキストエディタは、丁寧にも保存するときにBOM付きUTF-8を作成してくれる。秀丸は、BOM付きで保存するか、選択可能ではあるが、一度BOM付きで保存されたものからBOMを削除する機能は付いていない。

見分け方は、バイナリエディタしかない。いまのところ。BOM判定のなにかあればいいんだけど、いまのところ存在しないようだ。

判定方法としては、BOMはunicodeなので、別の文字コードに変換してみればいい。

先頭に変な文字がでてくるので、そいつを削除してあげればいい。それから元の文字コードに戻すとよい。

ただし、文字コードがうまく戻らないかもしれないのでそのばあいは、注意が必要。

 

というか、そろそろ適すとエディタでそういうの削除機能とか一般的になりそうですけどね。

 

 

まとめ、

PHPは、BOM無しでなければならない(BOMつきでも動くが動作不良)

Flashは、BOMありでなければ読み込めない。

eclipseは、新規作成でファイルを作るとBOM無しを作る。BOMありを開いてもBOMなしにはできない。

Notepadは保存時にBOMをつける。Wordpadも同じ。

 

ちょっと今度時間があるときにでもファイルのBOM消しツールを作ってみようかな。

テンプレートエンジンのデフォルト設定

テンプレートエンジンの共通変数などを設定する場合は、アプリケーションのビューの基底クラス Appid_ViewClass にある _setDefault() メソッドを実装してください。

function _setDefault(&$renderer)
{
    //Rendererからテンプレートエンジンを取得
    $smarty =& $renderer->getEngine();

    // セッション情報をセット
    $smarty->assign_by_ref('session_name', session_name());
    $smarty->assign_by_ref('session_id', session_id());

    // smartyテンプレートのデリミタを変更
    $smarty->left_delimiter = '<!--{';
    $smarty->right_delimiter = '}-->';
}

$renderer は Ethna_Renderer の継承クラスのインスタンスで、デフォルトでは Ethna_Renderer_Smarty です。 getEngine() メソッドで smarty のインスタンスを取得することができます。

Ethna


複数のDB接続設定を追加する手順(sybaseの接続設定を追加)


[approot]/etc/[appid]-ini.php

dsnを追加

'dsn_hoge' => 'sybase://[userid]:[password]@HOGEHOGE:2025/'

@の次のHOGEHOGEは、sybaseのインタフェースファイルにて定義している名前です。
php.iniでsybaseのインタフェースファイルの場所の指定も忘れずに。

[approot]/app/[appid]_Controller.php

$dbへ追加です。dsn_hogeと上記で定義したなら、'hoge'だけ追加です。

    var $db = array(
        ''              => DB_TYPE_RW,
        'hoge'   => DB_TYPE_RO
    );


さらに使うとき
 $db = $this->backend->getDB('hoge');
とこんなかんじでアクセスします。


 

このアーカイブについて

このページには、2009年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年1月です。

次のアーカイブは2009年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 5.04

にほんブログ村

にほんブログ村 IT技術ブログへ
にほんブログ村