ホーム > フォーラム > 質問箱 > その他Ver.(本文に記述) > XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず)

XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず)
投稿者: souhalt | 投稿日時: 2008/10/26 8:37 | 閲覧: 28342回
souhalt
XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず)

XCL2.1 でテーマチェンジャー・モジュールが使えるという情報があるので、試用しています。

引用:
e.g. 「旧システムモジュールをインストール」する必要があるが「Cube2.1で」使える

Xoops Users Group Japan - themechangerモジュールの使い方教えて


「モジュールごとにテーマを設定」ということはしておらず、
「ユーザーが自分のテーマを持てる」という用途 (ログイン後の初期テーマ設定) を想定しています。
しかし、期待した動作になりません。対策を御教授していただけると幸いです。
なお、X2 (XOOPS 2.0.16a JP) の場合は、期待した動作になります (JPEx では未確認) 。

[使用ファイル]
cf. テーマチェンジャー 2.6

テーマチェンジャー | DOWNLOADS | Amethyst Blue


cf. XCL: XOOPS Cube Legacy 2.1.6 RC

XOOPS Cube Legacy 2.1.6 RCリリース | XOOPS Cube日本サイト


cf. X2: XOOPS 2.0.16a JP (zip)

XOOPS Cubeダウンロード | XOOPS Cube日本サイト


[構成]
XOOPS_ROOT_PATH は、実際にはディレクトリ名のリネームにより切り替えています。
他のモジュールの影響を排除するため、最低限の構成にしています。

1. localhost 環境で AMP (apache/mysql/php) を動作可能に
2. XCL または X2 を解凍し、html の下を XOOPS_ROOT_PATH (DocumentRoot) の下にコピー
3. テーマチェンジャーを解凍し、modules 以下と themes 以下を XOOPS_ROOT_PATH の下にコピー
4. XCL の場合、XOOPS_ROOT_PATH/modules の下に X2 の html/modules/system 以下をコピー
5. XCL または X2 をインストール
6. XCL の場合、「システム管理」モジュールをインストール
7. 「テーマチェンジャー」モジュールをインストール
8. 「テーマチェンジャー」モジュールの「テーマ選択」ブロックをインストール(XCL)/表示オン(X2)
9. 設定で「デフォルト・サイトテーマ」を z_changeable_theme に、「選択可能なテーマ」を全選択

[操作]
1. 任意のユーザでログインした状態でトップページ (XOOPS_URL/) 等を表示
2. 「テーマ選択」ブロック内のリストボックスで現状と異なるテーマを選択
3. 「このテーマを常に使う」のチェックをオン
4. (XOOPS_DB_PREFIX_users テーブルの該当ユーザの theme フィールド値を phpMyAdmin 等で確認)
5. 「送信」ボタンをクリックし、テーマが切り替わったことを確認
6. (XOOPS_DB_PREFIX_users テーブルの該当ユーザの theme フィールド値を phpMyAdmin 等で確認)
7. ログアウト
8. 同じユーザで再ログインし、切り替え後のテーマになっていることを確認

[現象]
XCL の場合、「テーマチェンジャー」モジュールの「テーマ選択」ブロックでテーマを切り替え、
ログアウト、同じユーザで再ログイン後に、切り替え後のテーマになりません。
(対応する theme フィールド値も、変化せず)

X2 の場合、同様の操作で切り替え後のテーマになります (期待した動作) 。
(対応する theme フィールド値も、切り替え後のテーマに変化)

[xoops環境 - local/Windows]
デバッグモード: 「PHPデバグ」に設定
XOOPS_ROOT_PATH = D:/homepage
XOOPS_URL = http://localhost
XOOPS Cube Legacy 2.1.6 RC, XOOPS 2.0.16a JP
mysql 4.0.27
php 5.2.4
apache 2.2.6
Windows XP HE SP3, IE6

[調査概要]
● X2 の場合、期待した動作になる。
● get method に替えると動作する。
● 何故か mainfile.php の中身が2度実行されている。
● $_POST の入力パラメータが消える段階は、XCube_Delegate() を呼び出す所。
● 入力部だけでなく、出力 (記録) 部も動作していない。

自力で調査して分かったのはここまでです。

調査内容は以下参照。

(続く)

コメント(14)

Re: XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず) 
投稿者: souhalt | 投稿日時: 2008/10/26 8:39
souhalt
Re: XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず)

(続き)

X2 の場合、入力パラメータを記録する調査用パッチを適用し、テーマ切り替えの操作をすると、
再ログイン後に切り替え後のテーマになります (期待した動作) 。
(対応する theme フィールド値も、切り替え後のテーマに変化)
ログファイルを見ると、$_POST に入力パラメータがセットされています (期待した動作) 。
$_SERVER['REQUEST_METHOD'] と xoops_getenv('REQUEST_METHOD') に、'POST' がセットされています。

XCL の場合、同様の操作で切り替え後のテーマになりません。
(対応する theme フィールド値も、変化せず)
ログファイルを見ると、$_POST に入力パラメータがセットされていません。
$_SERVER['REQUEST_METHOD'] と xoops_getenv('REQUEST_METHOD') に、何故か 'GET' がセットされています。

● X2 の場合、期待した動作になる。

[調査#1 - テーマ入力部]
下は、入力パラメータを記録する調査用パッチです。

XOOPS_ROOT_PATH/modules/theme_changer/blocks/theme.php: line 34
	$current_theme = $xoopsConfig['theme_set'];
$ELF = XOOPS_ROOT_PATH.'/!ERR_LOG.txt';
error_log("\r\n--- theme.php #1 ----------------------------\r\n",3,$ELF);
error_log("\t\$_SERVER['HTTP_HOST']\r\n",3,$ELF);
$zo = $_SERVER['HTTP_HOST'];
$zv = gettype($zo).' '.var_export($zo,TRUE);
error_log("$zv\r\n",3,$ELF);

error_log("\t\$_SERVER['PHP_SELF']\r\n",3,$ELF);
$zo = $_SERVER['PHP_SELF'];
$zv = gettype($zo).' '.var_export($zo,TRUE);
error_log("$zv\r\n",3,$ELF);

error_log("\t\$_POST\r\n",3,$ELF);
$zo = $_POST;
$zv = gettype($zo).' '.var_export($zo,TRUE);
error_log("$zv\r\n",3,$ELF);

error_log("\t\$_GET\r\n",3,$ELF);
$zo = $_GET;
$zv = gettype($zo).' '.var_export($zo,TRUE);
error_log("$zv\r\n",3,$ELF);

error_log("\t\$_SERVER['REQUEST_METHOD']\r\n",3,$ELF);
$zo = $_SERVER['REQUEST_METHOD'];
$zv = gettype($zo).' '.var_export($zo,TRUE);
error_log("$zv\r\n",3,$ELF);

error_log("\t\$_SERVER['QUERY_STRING']\r\n",3,$ELF);
$zo = $_SERVER['QUERY_STRING'];
$zv = gettype($zo).' '.var_export($zo,TRUE);
error_log("$zv\r\n",3,$ELF);

error_log("\t xoops_getenv('REQUEST_METHOD')\r\n",3,$ELF);
$zo = xoops_getenv('REQUEST_METHOD');
$zv = gettype($zo).' '.var_export($zo,TRUE);
error_log("$zv\r\n",3,$ELF);

error_log("\t xoops_getenv('QUERY_STRING')\r\n",3,$ELF);
$zo = xoops_getenv('QUERY_STRING');
$zv = gettype($zo).' '.var_export($zo,TRUE);
error_log("$zv\r\n",3,$ELF);
	$block = array();

AFTER;

X2 で操作後のログファイル (XOOPS_ROOT_PATH/!ERR_LOG.txt):
--- theme.php #1 ----------------------------
	$_SERVER['HTTP_HOST']
string 'localhost'
	$_SERVER['PHP_SELF']
string '/index.php'
	$_POST
array array (
  'xoops_theme_select' => 'phpkaox',
  'holdtheme' => '1',
)
	$_GET
array array (
)
	$_SERVER['REQUEST_METHOD']
string 'POST'
	$_SERVER['QUERY_STRING']
string ''
	 xoops_getenv('REQUEST_METHOD')
string 'POST'
	 xoops_getenv('QUERY_STRING')
string ''


XCL で操作後のログファイル (XOOPS_ROOT_PATH/!ERR_LOG.txt):
--- theme.php #1 ----------------------------
	$_SERVER['HTTP_HOST']
string 'localhost'
	$_SERVER['PHP_SELF']
string '/index.php'
	$_POST
array array (
)
	$_GET
array array (
)
	$_SERVER['REQUEST_METHOD']
string 'GET'
	$_SERVER['QUERY_STRING']
string ''
	 xoops_getenv('REQUEST_METHOD')
string 'GET'
	 xoops_getenv('QUERY_STRING')
string ''


(続く)
Re^2: XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず) 
投稿者: souhalt | 投稿日時: 2008/10/26 8:41
souhalt
Re^2: XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず)

(続き)

XCL の場合、post method の代わりに get method で入力パラメータを送信する調査用パッチを追加し、
テーマ切り替えの操作をすると、入力パラメータが受信できています。
ログファイルを見ると、$_GET に入力パラメータがセットされています。
$_SERVER['REQUEST_METHOD'] と xoops_getenv('REQUEST_METHOD') に、'GET' がセットされています。
$_SERVER['QUERY_STRING'] と xoops_getenv('QUERY_STRING') に、入力パラメータがセットされています。

● get method に替えると動作する。

[調査#2 - テーマ入力部 - get method]
下は、post method の代わりに get method で入力パラメータを送信する調査用パッチです。

XOOPS_ROOT_PATH/modules/theme_changer/blocks/theme.php: line 39 (行番号はオリジナルファイルを基準)
//	$block['content'] .= '<div style="text-align: center;"><form action="http://'.$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'" method="post">';
	$block['content'] .= '<div style="text-align: center;"><form action="http://'.$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'" method="get">';

AFTER;

XCL で操作後のログファイル (XOOPS_ROOT_PATH/!ERR_LOG.txt) - get method:
--- theme.php #1 ----------------------------
	$_SERVER['HTTP_HOST']
string 'localhost'
	$_SERVER['PHP_SELF']
string '/index.php'
	$_POST
array array (
)
	$_GET
array array (
  'xoops_theme_select' => 'default',
  'holdtheme' => '1',
)
	$_SERVER['REQUEST_METHOD']
string 'GET'
	$_SERVER['QUERY_STRING']
string 'xoops_theme_select=default&holdtheme=1'
	 xoops_getenv('REQUEST_METHOD')
string 'GET'
	 xoops_getenv('QUERY_STRING')
string 'xoops_theme_select=default&holdtheme=1'


(続く)
Re^3: XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず) 
投稿者: souhalt | 投稿日時: 2008/10/26 8:43
souhalt
Re^3: XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず)

(続き)

XCL の場合、theme.php の get method パッチを post method に戻し、
mainfile.php と XCube_Controller.class.php にも theme.php と同様のパッチを適用し、
テーマ切り替えの操作をすると、次のことが分かりました。

● 何故か mainfile.php の中身が2度実行されている。
● $_POST の入力パラメータが消える段階は、XCube_Delegate() を呼び出す所。

チェックポイント通過フロー:
1. mainfile.php #1 (1回目)
2. XCube_Controller.class.php #1 (1回目)
3. $_POST の入力パラメータが消える (XCube_Delegate)
4. mainfile.php #1 (2回目)
5. XCube_Controller.class.php #1 (2回目)
6. XCube_Controller.class.php #2
7. theme.php #1

[調査#3 - テーマ入力部]
下は、mainfile.php と XCube_Controller.class.php の調査用パッチです。

XOOPS_ROOT_PATH/core/XCube_Controller.class.php: line 346
	function _setupUser()
	{
$ELF = XOOPS_ROOT_PATH.'/!ERR_LOG.txt';
error_log("\r\n--- XCube_Controller.class.php #1 -----------\r\n",3,$ELF);
:
(略: 以下 theme.php のパッチと同様)
:
		$this->mSetupUser->call(new XCube_Ref($this->mRoot->mContext->mUser), new XCube_Ref($this), new XCube_Ref($this->mRoot->mContext));
error_log("\r\n--- XCube_Controller.class.php #2 -----------\r\n",3,$ELF);
:
(略: 以下 theme.php のパッチと同様)
:
	}

AFTER;

XOOPS_ROOT_PATH/mainfile.php: line 98
    //
$ELF = XOOPS_ROOT_PATH.'/!ERR_LOG.txt';
error_log("\r\n--- mainfile.php #1 -------------------------\r\n",3,$ELF);
:
(略: 以下 xoops_getenv() 部分を除き theme.php のパッチと同様)
:
    if (!defined('_LEGACY_PREVENT_LOAD_CORE_') && XOOPS_ROOT_PATH != '') {

AFTER;

XCL で操作後のログファイル (XOOPS_ROOT_PATH/!ERR_LOG.txt):
--- mainfile.php #1 -------------------------
	$_SERVER['HTTP_HOST']
string 'localhost'
	$_SERVER['PHP_SELF']
string '/index.php'
	$_POST
array array (
  'xoops_theme_select' => 'default',
  'holdtheme' => '1',
)
	$_GET
array array (
)
	$_SERVER['REQUEST_METHOD']
string 'POST'
	$_SERVER['QUERY_STRING']
string ''

--- XCube_Controller.class.php #1 -----------
	$_SERVER['HTTP_HOST']
string 'localhost'
	$_SERVER['PHP_SELF']
string '/index.php'
	$_POST
array array (
  'xoops_theme_select' => 'default',
  'holdtheme' => '1',
)
	$_GET
array array (
)
	$_SERVER['REQUEST_METHOD']
string 'POST'
	$_SERVER['QUERY_STRING']
string ''
	 xoops_getenv('REQUEST_METHOD')
string 'POST'
	 xoops_getenv('QUERY_STRING')
string ''

--- mainfile.php #1 -------------------------
	$_SERVER['HTTP_HOST']
string 'localhost'
	$_SERVER['PHP_SELF']
string '/index.php'
	$_POST
array array (
)
	$_GET
array array (
)
	$_SERVER['REQUEST_METHOD']
string 'GET'
	$_SERVER['QUERY_STRING']
string ''

--- XCube_Controller.class.php #1 -----------
:
(略: $_POST に入力パラメータがセットされていない)
:
--- XCube_Controller.class.php #2 -----------
:
(略: $_POST に入力パラメータがセットされていない)
:
--- theme.php #1 ----------------------------
:
(略: $_POST に入力パラメータがセットされていない)
:

AFTER;

(続く)
Re^4: XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず) 
投稿者: souhalt | 投稿日時: 2008/10/26 8:44
souhalt
Re^4: XCL2.1.6RC: テーマチェンジャー動作せず ($_POST 取得不可、theme フィールド変化せず)

(続き)

X2 の場合、$_POST を無視してテーマを切り替える調査用パッチを適用し、
「このテーマを常に使う」のチェックをオフにしてテーマ切り替えの操作をすると、
再ログイン後に切り替え後のテーマになります。
(対応する theme フィールド値も、切り替え後のテーマに変化)

XCL の場合、同様の操作で切り替え後のテーマになりません。
(対応する theme フィールド値も、変化せず)

● 入力部だけでなく、出力 (記録) 部も動作していない。

[調査#4 - テーマ出力 (記録) 部]
下は、$_POST を無視してテーマを切り替える調査用パッチです。

XOOPS_ROOT_PATH/modules/theme_changer/blocks/theme.php: line 61
//	if( isset( $_POST['holdtheme'] ) ){
	if (is_object($xoopsUser)) {
//		$otema = $_POST['xoops_theme_select'];
		$otema = $current_theme;

AFTER;

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top