2010年7月29日木曜日

"はなまるメールフォーム"の拡張

メールフォームが必要な場合に使っているライブラリ。PHP4で動く(5でも動くかは知らない)

チェックボックスのような複数選択項目を処理する場合は、下記のようなコードを追加すればOK。


hnmailform.php:

function initData($posts){//入力データを初期化する
...
  $keys = array_keys($posts);
  foreach ($keys as $k){
    if(is_array($posts[$k])){
      $posts[$k] = implode(", ", $posts[$k]);
    }
  }
...

html:

htmlのコード:

<input type="checkbox" id="item1" name="チェック項目[]" value="あ" checked="checked" /><label for="inqtype1">あ</label>
<input type="checkbox" id="item2" name="チェック項目[]" value="い" checked="checked" /><label for="inqtype2">い</label>
<input type="checkbox" id="item3" name="チェック項目[]" value="う" /><label for="inqtype3">う</label>

perl: warning: Setting locale failed.

Perlコマンド実行で警告が出る場合、以下のように環境変数を設定する。

$ export PERL_BADLANG=0

SSLとIEの組み合わせでファイルダウンロードができない問題

よくある問題。

XOOPSの掲示板モジュールでも発生したから、キャッシュを有効にするコードをいれた。

xoops_trust_path/modules/attachfile/include/attach_functions.php:
        header( "Cache-Control: public" );
        header( "Pragma: cache" );

2010年7月25日日曜日

EmacsキーボードマクロのTips

以下の関数を活用して、キーボードマクロの再利用を促進しよう。

  • (name-last-kbd-macro symbol): 名前をつけてM-xで呼び出せるようにする。
  • (insert-kbd-macro macroname &optional keys): この関数の出力を.emacsに貼っておけば、Emacsを終了しても大丈夫。

2010年7月20日火曜日

CakePHPでCSVをデータソースにする

参考


なお、例示されてるコードにはPHP4で動かない箇所がある。
  • "private"修飾子
  • foreach文での参照記法("&$l")

DBに接続できないというWarningが出たので"app/config/datagbase.php"を一部コメントアウトした。今回のシステムではDBを使わないので問題ないはず。
/*
 var $default = array(
  'driver' =>'mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'user',
  'password' => 'password',
  'database' => 'database_name',
  'prefix' => '',
 );

 var $test = array(
  'driver' => 'mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'user',
  'password' => 'password',
  'database' => 'test_database_name',
  'prefix' => '',
 );
    */

2010年7月16日金曜日

JavaScript文字列検索のバリエーション

indexOfメソッドか正規表現(RegExpオブジェクト)を使う。

RegExpオブジェクトはnewせずにリテラルをスラッシュで囲む方法もある(静的な正規表現)。

for (var i = 0; i < 3000; i++) {
    //var m = str.indexOf('item:9999');           // (1) indexOf
    //var m = /item:9999/.exec(str);             // (2) 静的な正規表現
    //var m = new RegExp('item:9999').exec(str); // (3) 動的生成の正規表現
    //var m = /item:9999$/.exec(str);             // (4) 正規表現 (3/31 追加)
}

4番目は、わざと正規表現のメタキャラクタを入れて最適化を無効にしている。

RgeExpに関しては、存在確認だけならexecよりtestを使うほうが行儀がいい。

GoogleAdwords経由かどうか判定

クッキーの「__utmz」を利用して、どうにか判定できる。"organic"が含まれていたら普通のリンク、そうでなければAdwordsのリンク(たぶん)

        var __utmz = $.myGetCookie('__utmz');
        if(__utmz && __utmz.indexOf('organic') >= 0){
          return 'Google-Organic';
        }else{
          return 'Google-Adwords';
        }