XPressME Integration Kit

フォーラム

Re: modules非表示にした際のポストリストページナビについて

永らくありがとうございました フォーラム その他 modules非表示にした際のポストリストページナビについて Re: modules非表示にした際のポストリストページナビについて

#2992
toemon
キーマスター

となると、そもそも

$GLOBALS = array(

‘/info/’,

);

$GLOBALS = array(

‘/modules/info/’,

);

という記述が間違っているということでしょうか。

はい、XPressMEに限って言えば、基本的には.htaccessのRewriteRuleと、WordPress一般設定ブログのアドレス (URL)の変更だけでmainfile.php側への追記は必要ありません。

(が、後述するさくらテストサイトでの設定では、せっかく追加したコードなので、他のモジュールとは逆の使い方で利用したりしています。)

mainfile.phpに追加されたコードは、大まかに言うと、内部のモジュールが

$_SERVERや$_SERVERが.htaccessのRewriteRuleで変更されてしまうと、動作しないモジュールの為に、

http://ドメイン/モジュールディレクトリ名/

でリクエストされても、

http://ドメイン/modules/モジュールディレクトリ名/

でリクエストされたように見せかけるために、追加されているものです。

WordPress のブログのアドレス設定も、内容的には少しちがいますが、同じような働きをします。

ですから、XPressMEの、WordPress のブログのアドレス設定をhttp://ドメイン/infoに設定している場合は .htaccessのRewriteRule設定だけで、Mainfile.phpによる$_SERVERや$_SERVERの変更は必要ありません。

参考までに「さくらのテストサーバー」での設定を後述しておきます

XPressME モジュールディレクトリ xpress として

.httaccess

<br />
RewriteEngine on<br />
RewriteRule xpress$ xpress/ [L]<br />
RewriteRule ^xpress/(.*)$ modules/xpress/$1 [L]<br />

mainfile.phpへの追記

<code>$GLOBALS['_rewriteRulesFrom'] = array('/modules/xpress/');<br />
$GLOBALS['_rewriteRulesTo'] = array('/xpress/');<br />
$GLOBALS['_abs_offset'] = preg_replace('/https?://'.$_SERVER["HTTP_HOST"].'/','',XOOPS_URL);<br />
$GLOBALS['_rewriteRulesTo1'] = preg_replace('/^(.*)$/e','"!('.XOOPS_URL.'|"".$GLOBALS["_abs_offset"]."|'".$GLOBALS["_abs_offset"].")".preg_quote("1","!")."!"', $GLOBALS['_rewriteRulesTo']);<br />
$GLOBALS['_rewriteRulesFrom1'] = preg_replace('/^(.*)$/','\11',$GLOBALS['_rewriteRulesFrom']);<br />
<br />
function modules_changer( $s ) {<br />
$s = preg_replace($GLOBALS['_rewriteRulesTo1'],$GLOBALS['_rewriteRulesFrom1'], $s);<br />
for($i=0; $i<count($GLOBALS['_rewriteRulesFrom']); $i++) {<br />
$s = preg_replace( '/('.preg_quote(XOOPS_URL,'/').'|"|')'.preg_quote($GLOBALS['_rewriteRulesTo'][$i],'/').'/' , "\1".$GLOBALS['_rewriteRulesFrom'][$i] , $s ) ;<br />
}<br />
return $s;<br />
}<br />
if (empty($_SERVER['REDIRECT_URL']) || ($_SERVER['REDIRECT_URL'] == $_SERVER['REQUEST_URI'])) {<br />
if (empty($_SERVER['REDIRECT_REDIRECT_STATUS'])) {<br />
if (($_changer_url=modules_changer('"'.$_SERVER['REQUEST_URI'].'"')) != '"'.$_SERVER['REQUEST_URI'].'"') {<br />
//           if request url is old url redirect to new<br />
header('Location: ' . str_replace('"','',$_changer_url));<br />
}<br />
}<br />
}<br />
$_SERVER['REQUEST_URI'] = str_replace( $GLOBALS['_rewriteRulesFrom'],$GLOBALS['_rewriteRulesTo'], @$_SERVER['REQUEST_URI'] ) ;<br />
$_SERVER['HTTP_REFERER'] = str_replace($GLOBALS['_rewriteRulesFrom'], $GLOBALS['_rewriteRulesTo'], @$_SERVER['HTTP_REFERER'] ) ;</code>

ここで、

$GLOBALS = array(‘/modules/xpress/’);

$GLOBALS = array(‘/xpress/’);

の部分は他のモジュールとは逆に

http://xpress.sakura.ne.jp/modules/xpress/

でリクエストされたときでも

http://xpress.sakura.ne.jp/xpress/

でリクエストされたように見せかけるために使ってみました。

WordPress一般設定ブログのアドレス (URL)

http://xpress.sakura.ne.jp/xpress

テンプレートlegacy_block_mainmenu.html

<code><table cellspacing="0"><br />
<tr><br />
<td id="mainmenu"><br />
<a class="menuTop" href="<{$xoops_url}>/"><{$smarty.const._MB_LEGACY_HOME}></a><br />
<{foreach item=module from=$block.modules}><br />
<{if $module.directory == 'xpress'}><br />
<a class="menuMain" href="<{$xoops_url}>/<{$module.directory}>/"><{$module.name}></a><br />
<{foreach item=sublink from=$module.sublinks}><br />
<a class="menuSub" href="<{$sublink.url|replace:"modules/xpress":"xpress"}>"><{$sublink.name}></a><br />
<{/foreach}><br />
<{else}><br />
<a class="menuMain" href="<{$xoops_url}>/modules/<{$module.directory}>/"><{$module.name}></a><br />
<{foreach item=sublink from=$module.sublinks}><br />
<a class="menuSub" href="<{$sublink.url}>"><{$sublink.name}></a><br />
<{/foreach}><br />
<{/if}><br />
<{/foreach}><br />
</td><br />
</tr><br />
</table></code>

としております。