MySQL4.1.xで日本語が文字化け

2006/03/08 | MySQL

MySQLは、バージョン4.1以降でサブクエリが使えるようになり、随分使い勝手がよくなった。しかし4.1以降で日本語がうまくハンドリングできなくなる。理由はこのバージョンから文字コードの自動変換機能がついたことらしい。
開発で遭遇した問題点と対応した記録をここに掲載する(CentOS4にて)。

【問題】
○CentOS4を日本語環境としてインストール
 /etc/my.cnfをネット上の情報に基づき変更するもうまくいかず。

【対応】
○CentOS4を英語環境としてインストール
 /etc/my.cnfを上記同様に設定(設定内容は以下:赤字を加筆)。
——————————————————————
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=ujis
init-connect=SET NAMES binary

[mysql.server]
user=mysql
basedir=/var/lib
default-character-set=ujis

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=binary

[mysql]
default-character-set=binary

Read the rest of this entry »

viewでもinitialize

2006/03/05 | mojavi2

mojaviではactionクラス内のinitializeメソッドで、必要な初期化処理をおこなうのが通常だ。しかしviewにも同様にinitializeメソッドがあり、action同様初期化処理が可能。
CustomSmaryRenderer.class.phpの初期化処理をこんなふうにやってます。

function initialize(&$controller, &$request, &$user)
{
 $myRenderer=& new CustomSmartyRenderer(&$controller, &$request, &$user);
 $request->setAttributeByRef(‘myRenderer’,$myRenderer);
 return true;
}

これでviewを継承したクラスを作っておいて、新たにviewを作成するときはコレを継承して使用しています。

Action Chain

2006/03/04 | mojavi2

「Action Chain」は複数のアクションの結果を組み合わせて表示させたりするときに使用する(他にも使い方があるかもしれない)。
基本的にactionからでもviewからでも呼び出せるが、actionから呼び出したほうが簡単っぽい(いろいろやったけど自前のライブラリの絡みのせいか、viewの中で上手く呼び出すことができなかった)。
使い方はこんな感じ。

$actChain=new ActionChain();
$actChain->setPreserve(true);
$actChain->register(‘myChain’,’callModule’,’callAction’,array());
$actChain->execute($controller, $request, $user);
$myChain=$actChain->fetchResult(‘myChain’);
$request->setAttribute(‘myChainBody’,$myChain);

setPreserve(true)はちょっとしたおまじない。
registerで「チェーンの名前」「呼び出すモジュール」「呼び出すアクション」「アクションに与える引数」により、Action Chainに登録。
executeで登録したアクションを実行。
fetchResultでアクションの実行結果を取得。

ただいろいろと工夫は必要です。

checkboxの値指定

2006/02/23 | HTML_QuickForm

HTML_QuickFormで普通にcheckboxを作成すると、そのvalue値は全て「1」になる。これを回避するための(value値を指定する)スクリプトは以下の通り($resultがPearDBのクエリの結果の場合)。

$i=0;
$tmpArray=array();
while($row=$result->fetchRow()){
 $tmpCheckBox=& HTML_QuickForm::createElement(‘checkbox’);
 $tmpCheckBox->setName($i);
 $tmpCheckBox->setText($row[‘name’]);
 $tmpCheckBox->updateAttributes(array(‘value’=>$row[‘id’]));
 $tmpArray[]=$tmpCheckBox;
 $i++;
}
$myForm->addGroup($tmpArray,’formCheckBox’,’CheckBox’,’ ‘);

これでvalue値を任意のものにできる。

Read the rest of this entry »

モジュール単位のフィルタ

2006/02/09 | mojavi2

GlobalFilterに登録しておくと全モジュールに対して共通した処理を施せるが、モジュール毎に共通処理を含むことができるmoduleFilterという機能もある。これについてもまともに解説してあるページはない。
ようやくわかりやすく解説してあるページを見つけることができ、理解できたのでここに掲載(参照元にトラックバック:感謝)。

□moduleFilterの設置場所:
各モジュールのディレクトリ直下には「actions」「views」「templates」などのディレクトリが存在するが、それらのディレクトリと同じ階層に記述したファイルを設置する。

□記述・設置方法:
ファイル名は「(モジュール名)FilterList.class.php」とし、記述方法はGlobalFilterと同様、FilterListを継承して記述する。
このファイルを設置するだけで、mojaviは自動的にファイルの有無を確認し、存在すれば自動的に取り込んで実行する、ということらしい。Filterの適用順序は以前に述べたとおり。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net