XPressME Integration Kit

フォーラム

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

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

  • このトピックには13件の返信、2人の参加者があり、最後に匿名により13年、 4ヶ月前に更新されました。
14件の投稿を表示中 - 1 - 14件目 (全14件中)
  • 投稿者
    投稿
  • #2621
    匿名
    ゲスト

    toemon様

    お世話になります。

    たびたび別件にてご質問がございます。

    現在、xoops、xpressME、wordpress全て最新バージョンで

    新しいサイトの構築に挑んでおります。

    xoopsサイトにつきものである、URLに表示される「modules」を非表示にしたく、

    のぶのぶさんのサイトを参考に、

    .htaccessの設定を行い非表示にすることができました。

    xpressmeをinfoという名前にしてインストールしましたので、

    http://ドメイン名/info/***

    という表示にすることができました。

    ほかモジュールも問題なくリライトされているようです。

    xpressMEのリンクが問題ないか、いろいろリンクしていたのですが、

    xpressMEのトップページ(http://ドメイン名/info/)に表示されるページナビの

    “前ページへ>>”リンクがおかしなことになってしまいました。

    http://ドメイン名/info/modules/modules/info/?paged=2

    modulesとinfoが重複されてしまうようです。

    試しにhttp://ドメイン名/info/?paged=2でアクセスしたところ、

    問題なく表示されました。

    paged=2以降のページナビリンクは問題ないようです。

    あくまでもxpressMEのトップページに表示されるナビだけの

    現象のようです。

    シングルページのナビは問題ありません。

    解決方法があればご教授いただけますでしょうか。

    宜しくお願いいたします。

    #2981
    toemon
    キーマスター

    ky982339さんこんにちは

    xpressMEのトップページ(http://ドメイン名/info/)に表示されるページナビの

    “前ページへ>>”リンクがおかしなことになってしまいました。

    http://ドメイン名/info/modules/modules/info/?paged=2

    modulesとinfoが重複されてしまうようです。

    試しにhttp://ドメイン名/info/?paged=2でアクセスしたところ、

    問題なく表示されました。

    ページリンクはwordpressのnext_posts_link()やprevious_posts_link()を元にしていますので、integration Kitの方でどうのこうのは難しそうですが、とにかく再現してみないことにはなんとも言えないので

    のぶのぶさんのサイトを参考に、

    .htaccessの設定を行い非表示にすることができました。

    で実際に設定された.htaccessの内容を提示お願いします。

    また、もしモジュールのトップディレクトリに.htaccessがあるようならそちらも提示ください。

    #2982
    匿名
    ゲスト

    toemon様

    お世話になります。

    ページリンクはwordpressのnext_posts_link()やprevious_posts_link()を元にしていますので、integration Kitの方でどうのこうのは難しそうですが、とにかく再現してみないことにはなんとも言えないので

    このリライト自体、試行錯誤の産物のようなので

    無理もないでしょうか。

    ルートディレクトリにのみ、

    以下の.htaccessを設定しております。

    <code>AddHandler php5-script .php<br />
    <br />
    Options FollowSymLinks<br />
    RewriteEngine on<br />
    RewriteRule ^info/(.*)$ /modules/info/$1 [L]</code>

    サーバーはhetemlを使っていますので、

    AddHandler php5-script .phpと

    Options FollowSymLinksの記述が必須のようです。

    原因等お分かりになれば幸いです。

    どうぞ宜しくお願いいたします。

    #2983
    toemon
    キーマスター

    再現確認とれました。

    WordPressの一般設定の「ブログのアドレス (URL)」の変更(RewriteRule で変更した URLにする)で対応可能かと思いますが、

    チケット109の修正で変更できないようになってます。

    このあたりの処理もう一度考えてみます。

    とりあえずは、

    /wp-content/plugins/xpressme/xpressme.phpの75,76をコメントアウトすることで、一時的な対応は出来ると思います。

    <br />
    //Site URL check<br />
    //add_filter('option_home',			"safe_site_url_filter");<br />
    //add_filter('option_siteurl',		"safe_site_url_filter");<br />
    

    #2984
    匿名
    ゲスト

    toemon様

    お世話になります。

    /wp-content/plugins/xpressme/xpressme.phpの75,76をコメントアウトすることで、一時的な対応は出来ると思います。

    こちを設定し、WordPressの一般設定の「ブログのアドレス (URL)」を

    以下のように設定してみましたが変わりませんでした。

    http://ドメイン/info

    xpressMEトップに表示されるナビ(前ページへ »)に付加されるURL

    http://ドメイン/info/modules/info/?paged=2

    試しに、WordPressの一般設定の「WordPress のアドレス (URL)」も

    http://ドメイン/info

    に変更してみましたが、付加されるURLは変わりませんでした。

    シングルポストナビは問題無いのですが、

    ポストリストページナビの場合は上記のような症状が起こります。

    #2985
    toemon
    キーマスター

    リンク

    http://ドメイン/info/modules/info/?paged=2

    から判断して、おそらく、トップページにhttp://ドメイン/modules/infoのURLでアクセスされたのではなかろうかと思います。

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

    http://ドメイン/infoに設定して

    xpressMEトップにhttp://ドメイン/infoではなくhttp://ドメイン/modules/infoでアクセスした場合には

    xpressMEトップに表示されるナビ(前ページへ »)に付加されるURLは

    http://ドメイン/info/modules/info/?paged=**

    またその逆でWordPressの一般設定の「ブログのアドレス (URL)」を

    http://ドメイン/modules/infoに設定して

    xpressMEトップにhttp://ドメイン/modules/infoではなくhttp://ドメイン/infoでアクセスした場合には

    xpressMEトップに表示されるナビ(前ページへ »)に付加されるURLは

    http://ドメイン名/info/modules/modules/info/?paged=**

    と、いずれも正常なリンクが作成されなくなります。

    従って、http://ドメイン/infoでアクセスさせるのであれば、トップページへのアクセスURLもhttp://ドメイン/infoにしておく必要があります。

    http://ドメイン/info、http://ドメイン/modules/infoどちらからのアクセスにも対応させるというのは難しいです。

    #2986
    匿名
    ゲスト

    toemon様

    従って、http://ドメイン/infoでアクセスさせるのであれば、トップページへのアクセスURLもhttp://ドメイン/infoにしておく必要があります。

    http://ドメイン/info、http://ドメイン/modules/infoどちらからのアクセスにも対応させるというのは難しいです。

    メインメニューからのリンク自体が

    http://ドメイン/info/になっているので、

    http://ドメイン/modules/infoでアクセスする(される)ことは

    まず無いのではと思います。

    今回起きている状況としまして、

    1.

    WordPress のアドレス (URL)、ブログのアドレス (URL)ともに

    http://ドメイン/infoに設定。

    2.

    WordPress のアドレス (URL)はhttp://ドメイン/modules/info、

    ブログのアドレス (URL)のみhttp://ドメイン/infoに設定。

    xoopsサイトトップのブロック、メインメニューから

    モジュールトップ(http://ドメイン/info/)にアクセスすると、

    ポストリストページナビ(前ページへ »)のurlは

    http://ドメイン/info/modules/info/?paged=2と表示される。

    ※メインメニューのリンクはhttp://ドメイン/info/となっている。

    http://ドメイン/info/?paged=2としてアクセスした際に表示される

    ポストリストページナビ(« 次ページへ:前ページへ »)も同じように、

    http://ドメイン/info/modules/info/ (« 次ページへ)

    http://ドメイン/info/modules/info/?paged=3 (前ページへ »)

    となってしまいます。

    #2987
    toemon
    キーマスター

    まず先の投稿で、ドメイン名のところが実ドメイン **.netになっていた部分を

    ‘ドメイン名’に変更させていただきました。

    つまりXOOPS側でRewriteRuleを変更しそのルールに従いWordPressの一般設定の「ブログのアドレス (URL)」を設定したけれど、

    最初のページのページナビは正しいけれど、そのページナビから次のページに移った時のページナビがおかしいということですよね。

    この現象はこちらは、当方では再現しません。

    RewriteRule ^info/(.*)$ /modules/info/$1 [L]

    RewriteRule ^info/(.*)$ modules/info/$1 [L]

    にしても同じでしょうか?

    #2988
    匿名
    ゲスト

    toemon様

    RewriteRule ^info/(.*)$ /modules/info/$1 [L]

    RewriteRule ^info/(.*)$ modules/info/$1 [L]

    にしても同じでしょうか?

    書き換えてみましたが同じ状態のままでした。

    そのほかのリンクを全く問題ないのですが、

    ポストリストページナビのみ重複したリンクが生成されてしまいます。

    いっそうのこと、こちらのサイトでは

    ポストリストページナビ自体を削ってしまおうかなと思います。

    #2989
    toemon
    キーマスター

    えっと、気になる点が一つあるのですが、

    のぶのぶさんのサイトを参考に、

    とありますので多分、xoops のmainfile.phpも修正されているのですよね。

    であれば、追加されたコード中で

    $GLOBALS = array()リストに ’/info/’ が

    $GLOBALS = array()リストに  ’/modules/info/’ が

    設定されているということはないでしょうか?

    もし、設定されているのであれば、ky982339さんの言われている現象が発生します。

    なぜならば、その追加したコードの最後の方に

    <br />
    $_SERVER = str_replace( $GLOBALS,$GLOBALS, @$_SERVER ) ;

    とかいうのがありますが、

    これっていうのは

    $GLOBALS = array()リストと

    $GLOBALS = array()リストにある、変換ルールによって

    $_SERVERを変更している訳で、

    もし、

    $GLOBALS = array()リストに’/info/’があり

    $GLOBALS = array()リストに ‘/modules/info/’を設定されていれば

    http://ドメイン/info/でアクセスした場合の$_SERVERは

     ’/info/’ から

     ’/modules/info/’ に、

    改変され、

    WordPressから見ると

    http://ドメイン/info/ でリクエストされたのではなく、

    http://ドメイン/modules/info/ としてリクエストされたことになってしまうからです。

    そうなると

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

    http://ドメイン/infoに設定して

    xpressMEトップにhttp://ドメイン/infoではなくhttp://ドメイン/modules/infoでアクセスした場合には

    xpressMEトップに表示されるナビ(前ページへ »)に付加されるURLは

    http://ドメイン/info/modules/info/?paged=**

    またその逆でWordPressの一般設定の「ブログのアドレス (URL)」を

    http://ドメイン/modules/infoに設定して

    xpressMEトップにhttp://ドメイン/modules/infoではなくhttp://ドメイン/infoでアクセスした場合には

    xpressMEトップに表示されるナビ(前ページへ »)に付加されるURLは

    http://ドメイン名/info/modules/modules/info/?paged=**

    と、いずれも正常なリンクが作成されなくなります。

    が成立します。

    #2990
    toemon
    キーマスター

    追記、

    ちょいと「さくらのテストサイト」で確認してみました。

    (こちらは XPressME Integration Kit Ver2.20RC2を使ってます)

    一応パーマリンクなんかも日付ベースに変更したりしてみましたが、問題はなさそうです。

    ただ、カテゴリーリストのALLを選択した場合ではhttp://ドメイン/modules/infoとかいう(最後に/のない)リンクを返すので、エラーになることがありますので

    .httaccessに

    RewriteRule info$ module/info/ [L]

    なんかを置いておくのもよいでしょう.

    メインメニューとモジュールサブメニューはどうにもならないのでテンプレート側ででリンク修正を行っています。

    #2991
    匿名
    ゲスト

    toemon様

    検証していただきありがとうございます。

    $GLOBALS = array()リストに ’/info/’ が

    $GLOBALS = array()リストに  ’/modules/info/’ が

    設定されているということはないでしょうか?

    まさにその通りでございます。

    WordPressから見ると

    http://ドメイン/info/ でリクエストされたのではなく、

    http://ドメイン/modules/info/ としてリクエストされたことになってしまうからです。

    なるほど。

    となると、そもそも

    $GLOBALS = array(

    ‘/info/’,

    );

    $GLOBALS = array(

    ‘/modules/info/’,

    );

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

    ちょいと「さくらのテストサイト」で確認してみました。

    拝見させていただきました。

    おぉ~、トップに表示されるナビ(前ページへ »)のリンクも

    正常ですね。

    #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>

    としております。

    #2993
    匿名
    ゲスト

    toemon様

    お世話になります。

    最後までお付き合いいただき感謝いたします。

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

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

    でリクエストされても、

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

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

    なるほど。モジュールによってそのあたりの仕様が違うんですね。

    テンプレートlegacy_block_mainmenu.html

    メインメニューの修正コードまでいただき

    ありがとうございます。

    実は、以前までの.htaccess、mainfile.phpによるリライト設定だと、

    設定後に、モジュールを新規でインストールできなくなるという

    不具合があったのですが、このたび教えていただいた方法で、

    この不具合も解消されました。

    今回のスレッドについては、xpressMEに関することと、

    ややずれていたことをお詫び申し上げます。

    ただ、xoopsユーザーは意外とこの“modules”表示を消したいと

    思っているのではないかと思います。

    以前、某xoopsフォーラムでも同じような話題があり、

    最終的にしっくりする解決には至らなかったのですが、

    そのスレッドの閲覧数は通常の倍以上ありました。

    今回いただいた情報は、そんなxoopsユーザーの悩みを

    解決してくれる思います。

    どうもありがとうございました。

14件の投稿を表示中 - 1 - 14件目 (全14件中)
  • このトピックに返信するにはログインが必要です。