1.現象
0963-RC2でphiEditedonのカレンダーボタンが動かない。
よろしくお願いします。
3.直接原因
編集画面のpe_editedonのinputタグおよびスクリプトを調べたところ、アンダースコア("_")がURLエンコーディングされていることに気がつきました。
HTML上では、"tvpe_editedon"といったシンボルが"tvpe%5Feditedon"に置き換えられています。

なんか、そこらへんにヒントがあるような気がします。ログイン時の実行だけでは万全ではないのかも。
確かに manager/processors/login.processor.php で mysql_connect()した後 SET NAMES/SET CHARACTER SET してますね(20行目~25行目)。このファイルはおそらく管理画面にログインする時必ず実行されるので、以降の管理画面での操作に伴うDBとのやり取りでは、ちゃんと SET NAMES/SET CHARACTER SET が適用されているってことになるわけですね。
何かのきっかけでこれがリセット(あるいは変更)されてしまうことってあるんでしょうか?
@mysql_query("{$connection_method} {$charset}", $this->conn);connect() 関数だけですね。query() 関数は全然変更されていませんquery( )関数の中からconnect( )関数にアクセスしているように思えますが、どうでしょう?
if (empty ($this->conn) || !is_resource($this->conn)) {
$this->connect();
}
$modxDBConn = mysql_connect($database_server, $database_user, $database_password)
うーん、どうでしょう。インクルードするファイルが多いので追いきれないですが(孫インクルードもあるし)、2つ同時にコネクション張ってなくて、どこかでmysql_closeしてるかも。この種のコードってそう作るのが普通なのかも、という気もしますが。(つなぎっぱなしを避ける、みたいな。詳しい方のフォロー求む)
私勘違いしていました。manager/index.php の37行目(のif文の内容)の
$modxDBConn = mysql_connect($database_server, $database_user, $database_password)
で作られるDBコネクションと、modxオブジェクトの中のDBAPIで作られるDBコネクションを、同じものだと思っていました。これって、2つの別のDBコネクションが同時にオープンされてるってことなんですよね?
mysql_close() 関数は確かに DBAPI ( db->disconnect() 関数 ) にありますが、
どこかでmysql_closeしてるかも。
さっきdbapiの一部を編集すると管理画面が表示されなくなりましたが、その中にmysql_closeはあるようです。
あれ?ほんとですね。document.parser.class.inc.phpからは呼ばれてるみたいだけど、管理画面
mysql_close() 関数は確かに DBAPI ( db->disconnect() 関数 ) にありますが、
関数定義の中にあるだけでその関数を実際に呼んでいる部分は無さそうですよ~
そうなんですか~ だとすると、最初 mysql_query($query) の方のDBコネクションで処理がなされてきて、途中でDBAPIが呼び出されてDBコネクションが新たに張り直されると、そもそも最初の mysql_query($query) を想定して記述されている各種MySQL関数は、DBAPIで開かれたDBコネクションを使って実行されるってことなんですね~ ここら辺で何か問題があるのかな~
最後に実行した方のconnectがmysql_query($query)のときに使われるリンクになります。
Jasonは多分前者(両方に適切に SET NAMES/SET CHARACTER SET が実行されています)のスタンスで問題ないはずだと言ってるわけですね。やっぱり、この両者の違いを明確化しないと Jason を納得させられない感じがします(私はこれ以上技術的な話は無理です…
文字化けは、多分この2つがあるから両方にSET NAMESとかしとけばOKもしくはDB APIで統一ってことですかねぇ。
)。