MODxの最新版は0.9.5です。MODx 0.9.5の導入をご覧下さい。
MODx0.9.2.1の導入手順
データベースの準備
XREAの管理画面でMySQL5以降を使用している場合、"UNICODE"でデータベースを作成します。 (XREAにはデータベースごとの同時接続数制限があるため、出来るだけMODx専用のデータベースを使用した方が良いでしょう) 使用データベースは以下nanabit_2とします。
まだインストールしていなければ上の画面でphpMyAdminをインストールし、 /public_html/log/phpmyadmin/config.inc.phpを開き、122行目付近で新しいデータベースを設定し、アップロードします。
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['compress'] = FALSE;
$cfg['Servers'][$i]['controluser'] = '';
$cfg['Servers'][$i]['controlpass'] = '';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = '(yourid_2など自分のDB名※2番目以降のDBでは_2,_3などがつきます)';
$cfg['Servers'][$i]['password'] = '自分のデータベースのパスワード';
$cfg['Servers'][$i]['only_db'] = '(yourid_2など自分のDB名)';
MODxの入手、設置
MODxからmodx-0.9.2.1.zipをダウンロード、展開します。展開されたファイル全てをMODxをインストールするディレクトリにアップロードします。
assets/仮にMODxをインストールするディレクトリを/public_html/modx/ ( URLはhttp://modx.example.com/ ) とします。
install/
manager/
ht.access
index.php
ソースコード修正箇所
-
UTF-8日本語対応
MODxがデータベースで正しくUTF-8を扱えるように、以下の箇所を変更します。 ./manager/index.phpの138行目付近の}直後にmysql_query("SET NAMES utf8;");を挿入します。
// connect to the database if(@!$modxDBConn = mysql_connect($database_server, $database_user, $database_password)) { die("<h2>Failed to create the database connection!</h2>. Please run the MODx <a href='../install'>install utility</a>"); } else { mysql_select_db($dbase); } mysql_query("SET NAMES utf8;");また、 ./manager/includes/extenders/dbapi.mysql.class.inc.php 88行目付近のelse{直後にmysql_query("SET NAMES utf8;");を挿入します。if (!$this->conn = ($persist ? mysql_pconnect($host, $uid, $pwd) : mysql_connect($host, $uid, $pwd))) { $modx->messageQuit("Failed to create the database connection!"); exit; } else { mysql_query("SET NAMES utf8;"); $dbase = str_replace('`', '', $dbase); // remove the `` chars if (!@ mysql_select_db($dbase)) { $modx->messageQuit("Failed to select the database '" . $dbase . "'!"); exit; } -
XSS対策
詳しくはこちら
-
CAPTCHA修正
CAPTCHAを使用する場合は、以下の箇所を修正します。
./manager/includes/veriword.php 174行目 $this->im = imagecreatetruecolor($this->im_width,$this->im_height); ↓ $this->im = imagecreate($this->im_width,$this->im_height); 同72行目付近 function pick_word() { ↓ function pick_word() { include("config.inc.php");MODxを導入するディレクトリを基準に、assets/cache
に書き込みパーミッションを付加(777)し、 manager/includes/config.inc.php という名前で空のファイルをパーミッション777で(サーバ側に)作成します。
assets/cache/siteCache.idx.php
assets/cache/sitePublishing.idx.php
assets/images
assets/export -
Pluginの引数に=, ;などを入力すると消える問題の修正
mutate_plugin.dynamic.action.php
--- /manager/actions/dynamic/mutate_plugin.dynamic.action.php_original Thu Jul 13 21:55:53 2006
+++ /manager/actions/dynamic/mutate_plugin.dynamic.action.php Fri Jul 14 01:26:48 2006
@@ -119,15 +119,16 @@
for(p in dp) {
dp[p]=(dp[p]+'').replace(/^\s|\s$/,""); // trim
ar = dp[p].split("=");
- key = ar[0] // param
+ key = ar[0]; // param
ar = (ar[1]+'').split(";");
- desc = ar[0]; // description
+ desc = unescape(ar[0]); // description
dt = ar[1]; // data type
value = decode((ar[2])? ar[2]:'');
+ value = value.replace(/\"/g, """).replace(/</g, "<").replace(/>/g, ">");
// store values for later retrieval
- if (key && dt=='list') currentParams[key] = [desc,dt,value,ar[3]];
- else if (key) currentParams[key] = [desc,dt,value];
+ if (key && dt=='list') currentParams[key] = [escape(desc),dt,escape(value),ar[3]];
+ else if (key) currentParams[key] = [escape(desc),dt,escape(value)];
if (dt) {
switch(dt) {
@@ -205,13 +206,13 @@
break;
case 'menu':
v = ctrl.options[ctrl.selectedIndex].value;
- currentParams[key][3] = v;
+ currentParams[key][3] = escape(v);
implodeParameters();
return;
break;
case 'list':
v = ctrl.options[ctrl.selectedIndex].value;
- currentParams[key][3] = v;
+ currentParams[key][3] = escape(v);
implodeParameters();
return;
break;
@@ -219,7 +220,7 @@
var arrValues = new Array;
for(var i=0; i < ctrl.options.length; i++){
if(ctrl.options[i].selected){
- arrValues.push(ctrl.options[i].value);
+ arrValues.push(escape(ctrl.options[i].value));
}
}
currentParams[key][3] = arrValues.toString();
@@ -227,7 +228,7 @@
return;
break;
default:
- v = ctrl.value+'';
+ v = escape(ctrl.value+'');
break;
}
currentParams[key][2] = v;
@@ -258,7 +259,7 @@
s=s+'';
s = s.replace(/\%3D/g,'='); // =
s = s.replace(/\%26/g,'&'); // &
- return s;
+ return unescape(s);
}
</script>document.parser.class.inc.php
--- /manager/includes/document.parser.class.inc.php_original Sat Jul 08 09:30:30 2006
+++ /manager/includes/document.parser.class.inc.php Fri Jul 14 01:51:37 2006
@@ -2136,7 +2136,7 @@
}
// load default params/properties
- $parameter = $this->parseProperties($pluginProperties);
+ $parameter = $this->parseProperties($pluginProperties, true);
if (!empty($extParams)) $parameter = array_merge($parameter,$extParams);
// eval plugin
@@ -2149,7 +2149,7 @@
}
# parses a resource property string and returns the result as an array
- function parseProperties($propertyString){
+ function parseProperties($propertyString, $decode=false){
$parameter = array();
if(!empty($propertyString)) {
$tmpParams = explode("&",$propertyString);
@@ -2157,8 +2157,8 @@
if (strpos($tmpParams[$x], '=', 0)) {
$pTmp = explode("=", $tmpParams[$x]);
$pvTmp = explode(";", trim($pTmp[1]));
- if ($pvTmp[1]=='list' && $pvTmp[3]!="") $parameter[trim($pTmp[0])] = $pvTmp[3]; //list default
- else if($pvTmp[1]!='list' && $pvTmp[2]!="") $parameter[trim($pTmp[0])] = $pvTmp[2];
+ if ($pvTmp[1]=='list' && $pvTmp[3]!="") $parameter[trim($pTmp[0])] = $decode ? html_entity_decode(urldecode($pvTmp[3])) : $pvTmp[3]; //list default
+ else if($pvTmp[1]!='list' && $pvTmp[2]!="") $parameter[trim($pTmp[0])] = $decode ? html_entity_decode(urldecode($pvTmp[2])) : $pvTmp[2];
}
}
}
MODxインストール
Webブラウザからindex.php (http://modx.example.com/) にアクセスします。

"Install Now"をクリックし、次の画面で"Next"で進みます。

ライセンス条項を読み、同意できたらチェックを入れ、"Next" 今回は新規インストールなので、そのまま次に進み、データベースの設定画面に入ります。
Database name: (XREAのid、もしくはid_2, id_3, ..)Database passwordが正しいかチェックするため、次に進む前に"Test connection"を押しましょう。(パスワードはFTP接続のとは違うことがあるので注意)
Table prefix(テーブルの先頭につける文字列): modx_ など
Database host: localhost
Database login name: (上のDatabase nameと同じにする)
Database password: (先ほど設定したデータベースのパスワード)
Administrator username(管理者のユーザ名): admin (セキュリティ上変えた方が良いかもしれません)
Administrator password(そのパスワード): (破られにくそうな文字列を設定します)
Confirm password: (上の確認に同じ物を入力します)

となったら成功です。 "Next"を押します オプションを設定します。 サンプルは結構参考になるので、"Install/Overwrite Sample Web Site"にチェックを入れると良いでしょう。次へ進みます。

のようになったら、パーミッションの設定などが間違っています。設定し直して"Retry"してください。

"Install Now"をクリックします。 これでインストールは終了しました。 FTP接続して、installディレクトリを削除します。 "Close"をクリック(あるいはhttp://modx.example.com/manager/にアクセス)すると、

が表示されます。先ほど入力したユーザ名とパスワードを使ってログインします。
設定
Site Settings
表示を日本語にするために、 Language: Japanese-utf8 Character encoding: Unicode (UTF-8) - utf-8 と設定し、画面上方の"Save"をクリックします。一旦ログアウトしてから再びログインすると、メニューを含め日本語化されています。 先の設定の続きは「管理->MODx設定」から行います。特に設定する箇所は・訪問の記録別途アクセス解析を入れている場合、サーバのログを取っている場合は不要なのでNoにします。 設定したあとは"保存"を忘れないようにしてください。
フレンドリーURLの使用
Apacheのmod_rewriteが.htaccessなどから使用可能の場合、?.phpを?.htmlであるかのように見せかけられるフレンドリーURLの設定です。検索エンジンに拾われやすくするためには有効にした方がよいとされています。
ユーザ設定
アクセスパーミッションの使用: 一人で編集する場合にはあまり問題になりませんが、複数人で作業する場合はYesにします。
Default Templateを編集する
標準のテンプレートは文字コードがiso-8859-1になっていて、日本語が扱えないためutf-8に変更します。 「リソース->リソース管理->Default Template」を選択表示されたテキスト領域で、8行目付近の <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> を <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> に変更し、保存します。
日本語入力のテスト
左側のツリーから My MODx Site Home(1) を選択、「編集」をクリックします。 FCKEditor(リッチテキストエディタ)でページが表示されるので、適当に日本語を入れてみます。 保存するとプレビュー画面が現れ、正しく表示できていることが分かります。 
blog
付属のblog機能でもいいのですが、さまざまなプラグインが用意されていて管理画面も使いやすいWordPressをMODxから使うこともできます。(要Plugin+Snippet: WordPress Integratorx)


