NP_ArchiveIndexのFancyURL化(Nucleus)
この記事はNP_ArchiveIndex Ver0.77 – Nucleusだとかに対する改造について記載したものです。
そちらでは、最新バージョンは0.80にになっています。
0.80でこの記事のまま対応出来るか分かりませんが、そちらの解析をする余裕がないため以前のまま転載しておきます。
以下の元ソース及びその行番号はNP_ArchiveIndex0.77からです。
まずURL解析部分。
89行目付近//get value from requestと書いてあるところ。
$page = intRequestVar('ap'); if ($catid) { $item_order = requestVar('ao'); //check value (also used to make flip link) list($itarget, $iorder) = @split(' ',$item_order); if(!($itarget=='time' or $itarget=='title' or $iorder =='desc' or $iorder =='asc')) { $item_order = $this->getOption('itemOrder2'); list($itarget, $iorder) = @split(',',$item_order); $iorder = strtolower($iorder); } }
を次のように変更します。
//get value from request if ($catid) { $uri = sprintf("%s%s%s","http://",$_SERVER["HTTP_HOST"],$_SERVER["REQUEST_URI"]); list($pagelink, $currentpage) = explode("/page/",$uri); list($page, $item_order) = explode("/mode/",$currentpage); list($itarget, $iorder) = @split(',',$item_order); if(!($itarget=='time' or $itarget=='title' or $iorder =='desc' or $iorder =='asc')) { $item_order = $this->getOption('itemOrder2'); list($itarget, $iorder) = @split(',',$item_order); $iorder = strtolower($iorder); } }
そしてその少し下にあるswitch ($item_order)の中にある
case ‘title asc’などの部分をcase ‘title,asc’と書き換えます(4箇所)
この部分、0.76から変わってるところです。
出力URLでも半角スペースにしようと思ったらURLには%20とか出てきちゃったので、うまくできるか不安に思って,に戻しました。
ここまでがURL解析部。
次からが出力部分です。
変更してないソースの233行目付近から。
$orderURL = serverVar('REQUEST_URI'); $orderURL = preg_replace('/[?&]ap=[0-9]*/','',$orderURL); //delete to add 'ap' param to last $orderURL = preg_replace('/[?&]ao=[^&0-9]*/','',$orderURL); if (strpos($orderURL,'?')===false) $orderURL .= "?ao="; else $orderURL .= "&ao="; $orderURL1 = $orderURL . "$itarget_flip+$itarget_flip_order&ap=".$page; $orderURL2 = $orderURL . "$itarget+$iorder_flip&ap=".$page; $pagenavi = "Sort: <b>$itarget</b>/<a href='$orderURL1'>$itarget_flip</a>, "; $pagenavi.= "<b>$iorder_str</b>/<a href='$orderURL2'>$iorder_flip_str</a>"; //make 'page link' $pagenavi.= " Page: "; for ($i=1; $i<=$pagemax; $i++) { if ($i==$page) $pagenavi.= "<b>$i</b> "; else { $pageURL = serverVar('REQUEST_URI'); $pageURL = preg_replace('/([?&]ap=)[0-9]*/','',$pageURL); if (strpos($pageURL,'?')===false) $pageURL .= "?ap=$i"; else $pageURL .= "&ap=$i"; $pagenavi.= "<a href='$pageURL'>[$i]</a> "; }
ここを次のように変更。
$orderURL1 = $pagelink . "/page/1/mode/$itarget_flip,$itarget_flip_order"; $orderURL2 = $pagelink . "/page/1/mode/$itarget,$iorder_flip"; $pagenavi = "Sort: <b>$itarget</b>/<a href='$orderURL1'>$itarget_flip</a>, "; $pagenavi.= "<b>$iorder_str</b>/<a href='$orderURL2'>$iorder_flip_str</a>"; //make 'page link' $pagenavi.= " Page: "; for ($i=1; $i<=$pagemax; $i++) { if ($i==$page) $pagenavi.= "<b>$i</b> "; else { if ($itarget=='title' || $iorder =='ASC') $mode = "/mode/$itarget,$iorder"; $pageURL = $pagelink . "/page/$i" . $mode; $pagenavi.= "<a href='$pageURL'>[$i]</a> "; }
ばっさり削ってます。あと、FancyURLsっぽく?ap,aoはpage,modeという表示にしてあるので元のほうが好みの場合は修正を。
ちなみに表示方式を変更したら1ページ目に戻るようなおせっかい設定だったりします。
削りたい場合は/page/1となってる部分を/page/$pageにしてください。