Re: modules非表示にした際のポストリストページナビについて
永らくありがとうございました › フォーラム › その他 › modules非表示にした際のポストリストページナビについて › Re: modules非表示にした際のポストリストページナビについて
となると、そもそも
$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>
としております。