CMSでPC&携帯を同時に更新できるかという打診があったので、
とりあえず、MODxでどこまでできるか、MobileConverterを試させていただきました。
- 使うテンプレート毎にフォルダを分ける。
- 1階層余分にダミーフォルダを間に入れる。(*1)
- TinyMCE等リッチエディタの機能を制限する(もしくは使わない)。
等の制限をすれば、けっこう使えそうです。
(soushiさん、ありがとうございます)
ただ、一点、携帯用の画像を生成する箇所で問題が残りました。
というのは、ドキュメント作成時に、リソースブラウザで画像をアップロードしても、
「OnFileManagerUpload」イベントが発行されず、携帯用の画像が生成されないのです。
(ファイルマネージャを使うと生成されますが、ユーザには開放したくないので)
そこで、リソースブラウザでも「OnFileManagerUpload」イベントを発行できないか、
試行錯誤して(*2)、以下のように無理やりドキュメントパーサを組み込んで改造してみました。
とりあえず、MobileConverterは動いたのですが、
もっと良い(他のプラグインも動かせるような)方法は無いものでしょうか?
どこかで副作用が出てこないか?ちょっと、ドキドキものです。(*3)
改造の対象は、この↓ファイルです。
manager/media/browser/mcpuk/connectors/php/Commands/FileUpload.php
※以下、行番号はMODx0.9.6.1p2の変更前のソースを基準にしています。
(読みにくいので、インデントは削っています)
131行目~の「if (file_exists($this->real_cwd."/$filename.$ext")) {」に対応する
elseブロックが終わった後の、180行目に以下を挿入。
if (reset(explode(',', $disp)) != '202') {
$uploaded_path = preg_replace('|\\/$|', '', $this->real_cwd);
include_once("../../../../../includes/document.parser.class.inc.php");
global $modx;
$modx = new DocumentParser;
$modx->getSettings();
$modx->invokeEvent("OnFileManagerUpload",
array(
"filepath" => $uploaded_path,
"filename" => $uploaded_name
));
}
164行目~の「if (is_uploaded_file($_FILES[’NewFile’][’tmp_name’])) {」に対応する
elseブロックが終わった後の、179行目に以下を挿入。
$uploaded_name = "$filename.$ext";
139行目~の「if (is_uploaded_file($_FILES[’NewFile’][’tmp_name’])) {」に対応する
elseブロックが終わった後(「$taskDone=true;」の上)の、156行目に以下を挿入。
$uploaded_name = "$filename($i).$ext";
(*1)MobileConverterに、親ドキュメント指定(親ドキュメントはテンプレートが切り替わらない)パラメータがあると嬉しいなぁ…
(*2)リソースマネージャでは、ディレクトリパスの最後に「/」が付いていて、最初、これに気づかずハマリました。
(*3)イベント発行の条件等は考慮していません。(というか、そういう条件ってあったっけ?)
追記)
(元のファイルの)126行目~180行目だった箇所は、改造後、以下のようになります。
if ((($this->fckphp_config['DiskQuota']['Global']!=-1)||($typeconfig['DiskQuota']!=-1))&&$failSizeCheck) {
//Disk Quota over
$disp="202,'Over disk quota, ".$msg."'";
} else {
if (file_exists($this->real_cwd."/$filename.$ext")) {
$taskDone=false;
//File already exists, try renaming
//If there are more than 200 files with
// the same name giveup
for ($i=1;(($i<200)&&($taskDone==false));$i++) {
if (!file_exists($this->real_cwd."/$filename($i).$ext")) {
if (is_uploaded_file($_FILES['NewFile']['tmp_name'])) {
if
(move_uploaded_file($_FILES['NewFile']['tmp_name'],($this->real_cwd."/$filename($i).$ext"))) {
@chmod(($this->real_cwd."/$filename($i).$ext"),$this->fckphp_config['modx']['file_permissions']); //modified for MODx
$disp="201,'..$filename($i).$ext'";
} else {
$disp="202,'Failed to upload file, internal error.'";
}
} else {
if
(rename($_FILES['NewFile']['tmp_name'],($this->real_cwd."/$filename($i).$ext"))) {
@chmod(($this->real_cwd."/$filename($i).$ext"),$this->fckphp_config['modx']['file_permissions']); //modified for MODx
$disp="201,'$filename($i).$ext'";
} else {
$disp="202,'Failed to upload file, internal error.'";
}
}
$uploaded_name = "$filename($i).$ext";
$taskDone=true;
}
}
if ($taskDone==false) {
$disp="202,'Failed to upload file, internal error..'";
}
} else {
//Upload file
if (is_uploaded_file($_FILES['NewFile']['tmp_name'])) {
if (move_uploaded_file($_FILES['NewFile']['tmp_name'],($this->real_cwd."/$filename.$ext"))) {
@chmod(($this->real_cwd."/$filename.$ext"),$this->fckphp_config['modx']['file_permissions']); //modified for MODx
$disp="0";
} else {
$disp="202,'Failed to upload file, internal error...'";
}
} else {
if (rename($_FILES['NewFile']['tmp_name'],($this->real_cwd."/$filename.$ext"))) {
@chmod(($this->real_cwd."/$filename.$ext"),$this->fckphp_config['modx']['file_permissions']); //modified for MODx
$disp="0";
} else {
$disp="202,'Failed to upload file, internal error...'";
}
}
$uploaded_name = "$filename.$ext";
}
if (reset(explode(',', $disp)) != '202') {
$uploaded_path = preg_replace('|\\/$|', '', $this->real_cwd);
include_once("../../../../../includes/document.parser.class.inc.php");
global $modx;
$modx = new DocumentParser;
$modx->getSettings();
$modx->invokeEvent("OnFileManagerUpload",
array(
"filepath" => $uploaded_path,
"filename" => $uploaded_name
));
}
}
さらに追記)
下記のコメントの通り、コードを修正しました。
さらに2009-03-24追記)
「global $modx;」が抜けていたので、修正しました。
ソースを下記にアップしました。
http://modxcms.com/forums/index.php/topic,34199.0.html