NP_ContentsListとMagicalURL
コメントがありましたので、記事としてまとめてみます。あと追加としてサブブログのサブディレクトリ運用を併用する場合についても。
【2004/12/21追記】
NP_ContentsList2.0から以下の改造は不要です。すぺてプラグインオプションで設定できるようになりました!ありがとうタカ姐さん!
MagicalURLでNP_ContentsListを使用する方法(1)
1.まずNP_ContentsList側。吐き出すURLをMagical形式にするため、コードを以下のように書き換えます。
312行目辺り
$data['blogurl'] .= '/blogid_' . $data['blogid'];
377行目辺り
$myblogurl .= '/blogid_' . $data['blogid'];
これで /blogid_x_catid_xx.html という形式のURLを吐き出すようになります。
2.しかし、これはMagicalURLでは考慮してない形式になるので(考慮してるのは /catid_xx_blogid_x.html の様にcatidが先の形式)、.htaccessファイルのRewriteRule行に以下の記述を加えます。
RewriteRule ^blogid_([0-9]+)_catid_([0-9]+).html+ index.php?blogid=$1&catid=$2
3.blogURLの問題(追記)
コメントより問題のある事が発覚。というか当然の話ですね。サブディレクトリで運用してるので忘れてました(^^;
この問題は当初下のサブディレクトリでの対処をしていなかったウチでも起きていた問題でした。当初.htaccessファイルで /blogid_xx となるリンクをそのまま有効にする方法を書いたのですが、やはりスマートではないので、NP_ContentsListの書き換えで。
NP_ContentsListの397行目、echo TEMPLATE::fill($item,$data); の上に以下の行を追加
if(preg_match ('/_[0-9]+$/',$data['blogurl'])){ $data['blogurl'] .= '.html';}
これで動くと思いますが…。一応実験済みではあります。
サブブログをサブディレクトリとして運用してる場合
サブブログをサブディレクトリとしている場合、に方法1の改造をすると、サブブログでのURLが /subblog/blogid_x_catid_xx.html の様になり、ちょっとスマートじゃありません。サブディレクトリであるからにはブログは指定されているわけですから、URLとしては /subblog/catid_xx.html としたいところです。ということで書き換えをするのは2つのファイル。
1.NP_ContentsListは2カ所をコメントアウトします。
1-1.306行目~327行目。具体的には以下のように(太字が追記部分)
306行 /*if ($data['blogid'] != $CONF['DefaultBlog'] || $defurl != $CONF['IndexURL']) {
・・・・・
326行 }
327行 */
328行 if ( $data['blogid'] == $nowbid ) {
(/* ~ */で囲まれた範囲がコメントアウトされます。)
1-2.373~381行目を以下のように
373行 /*
374行 if ($indexFlg) {
・・・・・
381行 }*/
382行 $catdata['catlink'] = addLinkParams($myblogurl,$linkparams);
しかし、これではURLが /subblog/_catid_xx.html となってしまいます。
2.caidの前の"_"を削除したいので、globalfunctions.phpを書き換えます。
MagicalURLをされているのであれば、function addLinkParams()に以下のようなコードを加えていると思いますが、
$link .= ".html";
if(strstr ($link, '//')){ $link = preg_replace("/([^:])\/\//", "$1/", $link);}
(下の行は記述が少し違うかもしれません。この記事を参考に)
その行の下に以下の記述を加えます。
if(strstr ($link, '/_')){ $link = str_replace("/_", "/", $link);}
これでスッキリとしたURLになるはずです。ここのサイトはその改造で動いています。(サブブログは表にだしてませんが、ちゃんと動いてます)
TrackBack
トラックバック URI←この記事にトラックバックする際使用してください。
(右クリックからショートカットのコピーを選択)
-
Nucleus の FancyURL から MagicalURLへ
-
昨日は なんとかURLをFancyURL にすることが出来ました。^^
という事で 調子に乗って、
今日は FancyURL から MagicalURL にチャレンジし、
なんとか無事に対応する事ができました~
とっても参考にさせていただき...
コメント
通販生活.comです。
このような、丁寧な記事までUPして頂き本当に有難うございます。
早速、この記事のとおり試してみたのですが、こんなかんじのリンクになってしまいます。
http://~/blogid_5
URLの拡張子「.html」が表示されないんです。それで、自分なりにこのようにNP_ContentsListを修正しました。
312行目辺り
$link .= ".html";
$data['blogurl'] .= '/blogid_' . $data['blogid'].$link;
これで、URLは、
http://~/blogid_5.html
と表示されたので「やったーっ!」っと思いクリック!目的のブログにたどり着きました。その後、カテゴリーをクリックしたのですが、
http://~/blogid_5.html_catid_11.html
とURLに「.html」が2つも表示されてしまいました。
何とか、自己解決しようと試みたのですが、力尽きました。
どこが、間違っているのか全く判りません!
ご迷惑とは存じますが、今一度ご教授願えないでしょうか?よろしく、お願いいたします。
そうか、それがありましたね。うちはサブディレクトリで解決してるんで忘れてました。すみません。
で、今のNP_ContentsListだと、Magicalは根本的に対象外のため、blogidの後にcatidをつける形式でURLを作成します。(Fancyの場合それで問題ないのです)
このため、この部分を何とかしようとすると大幅な改造が必要になると思いますので、小手先の方法ですが記事に追記しておきますのでやってみてください。
こんにちは、通販生活.comです。
「追記」の部分をプラグインに追加したらバッチリ直りました!本当に有難うございました。
ただ、パンくずの方が、やっぱり
http://~/catid_11_blogid_5.html
のように、なっています。
こうなるとは、思っていたのですが、、、
やはり、これを解決するには、「ItemNaviEX」の大幅な
改造が必要になるんでしょうね?
あっ、すいません、贅沢ばかり言ってしまいました。(反省!)
パンくずの方は、諦めて取り外そうと思います。
でも、本当に動いてくれてよかったです。
藤咲さん、お忙しい中、大変親切なご指導本当に有難うございました!!
うまくいったようでよかったです、自分でも色々試したので勉強になりました(笑)
パンくずの方ですが、
http://~/catid_11_blogid_5.html
となるのはMagicalとしては正しい挙動じゃないでしょうか?
http://~/catid_11.html
という形式を想定されているかもと思うのですが、それではうまく動かないと思います。
ご無沙汰いたしております、通販生活.comです。
今回こちらの記事にありますように、”サブブログをサブディレクトリとして運用”に挑戦させていただきました。
しかしながら、またしても行き詰まってしまいました。
globalfunctions.phpを書き直す部分ですが、
$link .= ".html";
if(strstr ($link, '//')){ $link = blockquoteg_replace("/([^:])\/\//", "$1/", $link);}
ではなく、
$link .= ".html";
return $link;
と、このように記述してありました。悩んだ末
$link .= ".html";
if(strstr ($link, '//')){ $link = blockquoteg_replace("/([^:])\/\//", "$1/", $link);}
if(strstr ($link, '/_')){ $link = str_replace("/_", "/", $link);}
このように、書き換えてアップしてみたところ http://~/subblog/ までしか表示されませんでした。
クリックしても、そのブログには、飛びませんでした。
カテゴリーやアイテムリンクにカーソルを置いても、 http://~/subblog/ と表示されてしまいます。
/subblog/_catid_xx.html
ここまで、順調だったんですが・・・
お忙しい中、恐れ入りますがご指導のほど宜しくお願い致します。
いつもご指導有難うございます。
サブブログに飛ぶようになりました。
しかしながら、サブブログからのカテゴリーへのリンク
/subblog/catid_xx.html
をクリックすると、”404error”となってしまい、カテゴリーに飛ばずにリンク切れになってしまいます。
globalfunctions.php には、
$link .= ".html";
if(strstr ($link, '/_')){ $link = str_replace("/_", "/", $link);}
return $link;
を記述しました。
”TrackBack時に/が2重に出てくるという問題”は、うちでは出ていなかったので”if(strstr ($link, '//')){ $link = blockquoteg_replace("/([^:])\/\//", "$1/", $link);}
”は、記述してません。ちなみに、これを記述したら、
Fatal error: Call to undefined function: blockquoteg_replace() in /home/sites/lolipop.jp/users/lolipop.jp-dp40001501/web/nucleus/libs/globalfunctions.php on line 982
という、errorがでました。
何か、根本的に間違いをおかしているのでしょうか?
すいません、スキルがなくて・・・
何卒、ご指導お願い致します。
URL生成まではうまくいったようですね。
あとはそのURLをNucleusに受け渡してやればいいので、.htaccessを使用します。
トップのディレクトリにおいてある.htaccessファイルを/subblog/にコピーしたらどうなりますでしょうか?
サブブログを作った際に、トップの、.htaccessをそのまま/subblog/にコピーしておいたのですが、それでもうまくいかないとなると.htaccessの記述がおかしいのでしょうか?
素人のクセに色々いじったせいで、余計なものを書いているような気がします。ご診断ください。
RewriteEngine On
RewriteRule ^blogid_([0-9]+)_catid_([0-9]+).html+ index.php?blogid=$1&catid=$2
RewriteRule ^catid_([0-9]+)_blogid_([0-9]+).html+ index.php?catid=$1&blogid=$2
RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3&blogid=$1
RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3-$4&blogid=$1
RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+)_catid_([0-9]+).html+ index.php?archive=$2-$3&blogid=$1&catid=$4
RewriteRule ^catid_([0-9]+)_blogid_([0-9]+)_archive_([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$3-$4-$5&blogid=$2&catid=$1
RewriteRule ^catid_([0-9]+)_blogid_([0-9]+)_archive_([0-9]+)-([0-9]+).html+ index.php?archive=$3-$4&blogid=$2&catid=$1
RewriteRule ^archives_([0-9]+).html+ index.php?archivelist=$1
RewriteRule ^archivelist_([0-9]+)_catid_([0-9]+).html+ index.php?archivelist=$1&catid=$2
RewriteRule ^catid_([0-9]+)_archivelist_([0-9]+).html+ index.php?archivelist=$2&catid=$1
RewriteRule ^item_([0-9]+)_catid_([0-9]+).html+ index.php?itemid=$1&catid=$2
RewriteRule ^item_([0-9]+).html+ index.php?itemid=$1
RewriteRule ^member_([0-9]+)_catid_([0-9]+).html+ index.php?memberid=$1
RewriteRule ^member_([0-9]+).html+ index.php?memberid=$1
RewriteRule ^blogid_([0-9]+).html+ index.php?blogid=$1
RewriteRule ^item_([0-9]+).html?(.*)+ index.php?itemid=$1&$2
<FilesMatch "^item$">
ForceType application/x-httpd-php
</FilesMatch>
<FilesMatch "^archive$">
ForceType application/x-httpd-php
</FilesMatch>
<FilesMatch "^member$">
ForceType application/x-httpd-php
</FilesMatch>
<FilesMatch "^archives$">
ForceType application/x-httpd-php
</FilesMatch>
<FilesMatch "^category$">
ForceType application/x-httpd-php
</FilesMatch>
<FilesMatch "^blog$">
ForceType application/x-httpd-php
</FilesMatch>
<FilesMatch "^extra$">
ForceType application/x-httpd-php
</FilesMatch>
<FilesMatch "^trackback$">
ForceType application/x-httpd-php
</FilesMatch>
<IfModule mod_php4.c>
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_flag mbstring.encoding_translation On
php_value mbstring.http_input auto
php_value mbstring.http_output pass
</IfModule>
<FilesMatch "^page$">
ForceType application/x-httpd-php
</FilesMatch>
大変お手間をおかけして、申し訳ございません。
RewriteRuleの中に、catid_xx.html を書き換えるのがありませんね。
RewriteRuleに以下を追加したらどうなりますか?
RewriteRule ^catid_([0-9]+).html+ index.php?catid=$1
RewriteRule ^catid_([0-9]+).html+ index.php?catid=$1
を追加しましたところ、うまくいきました。
大変ご多忙の中、今回も本当に有難うございました。
コメントを書く
この記事を携帯で読む
(右クリックからショートカットのコピーを選択)