話の分かるやつ

オープンソースCMSMODxをいじりはじめて数週間になるが、これの印象が題の通り。
必ずしも誰もがこう感じるわけではないかもしれないが、自分にとっては“つーと言えばかーが返る”話し相手といった感じで、これまで対話中に急に不機嫌になって黙り込むようなこともなく、とても使い心地が良い。こうなってくれれば便利なんだけどなぁ、と思いついてさわってみると、大抵その思い通りに反応してくれている。

既存の静的なサイトにこのシステムを組み込んでみたところ、スムーズかつシームレスに移行が進んでいる。MODx生成ページよりも既存ページが優先するというルールがあるようなので、最初はとにかく何も考えずサイトルートにインストールすればいい。*1この時点で頭から足先まで見た目は何も変わらない。*2あとは、指をパチンと鳴らせば右腕がすげ変わり、も一度鳴らせば左足がといった具合。誰にも気づかれることなく、たちまち既存データは共通項と個別ドキュメント属性に分解され、ポテンシャルを大きく増したコンテンツに生まれ変わってしまう。

目下気になっているのは、この強力さや快適さがどこまでもつものなのか。ドキュメントの数をどんどん増やしていって、例えば1万くらいになった時に、管理や表示にどんな影響がでてくるものだろう…

雰囲気な感想の記事というのも何なので1つtips:

pluginの directresize はphpセーフモードだと書き込み権限の問題で動作しないが、実はftpスイッチを入れるとその問題を迂回してセーフモードのまま動作させられる。しかし、単純にスイッチを入れるだけでは使えなかった。

directResize.php 640行付近から始まる関数 CreateDir()内で、サムネールを保持するディレクトリを自動生成するのだが、順に、

  1. ftpサーバに接続
  2. ftpアカウントでログイン
  3. サムネールディレクトリへ移動
  4. サムネールディレクトリを作成
  5. ...

という記述になっている。赤文字をご覧の通り、directresize自身がこれから作成するはずの(まだしていない)ディレクトリに移動しようとしていて、困ったことに“そんなディレクトリは無かった”と怒ってエラー終了してしまう。

これを本来意図していたであろう以下の通りに変更する。

directResize.php 671行目以降 関数 CreateDir()内

$changeDir = ftp_chdir($connect, $this->drconfig['ftp_base_dir'].$path_to_gal);
if (!$changeDir) {
$output = 'Could not change directory to: '.$this->drconfig['ftp_base_dir'].$path_to_gal;
return;
}

を、

$changeDir = ftp_chdir($connect, $this->drconfig['ftp_base_dir']);
if (!$changeDir) {
$output = 'Could not change directory to: '.$this->drconfig['ftp_base_dir'];
return;
}

へ変更。
これにより、まず“指定されたベースディレクトリ”へ移動しておいてから、そこにサムネールディレクトリを作成するという動作に変更される。これなら納得。
ちなみに、ftpベースディレクトリがルートのサムネール作成専用のftpアカウントを作ってやればより安全に使えると思う。CGIモードにすればそもそもftpスイッチも不要なようだが、とりあえずモード変更による影響がよく分からないので現状維持してみた。

*1:ディレクトリ等の上書きはご注意を

*2:ドメインに存在しないページを参照した際に特定のページが現れるようになるのが違い。