月別アーカイブをプルダウンメニュー化する方法です。
以下、目次
BlognPlus 用のモジュールも公開しています。
改造方法の前に簡単に仕組みを説明します。
ぶろぐんでは管理画面から1ページに表示する記事の数を指定できます(表示記事件数)。
この設定のせいで、すべての表示方法(初期表示/月別表示/カテゴリ別表示)において、5件なら5件ずつしか記事が表示されません。
今回の改造では、全表示方法に対して同じ件数しか表示されないという呪縛から、ユーザーを解き放ちます。これによって初期表示では5件、カテゴリ別表示では50件など、柔軟な表示を可能にします。
これにカテゴリ専用スキンを用意することで、カテゴリでは題名だけの一覧表示が出来るようになります。
800行目辺り、リンクリスト関数の上に以下の記述を追加する。
/* ----- 月別合計(プルダウンメニュー) ----- */
function pulldown_archives_call($skin, $mid) {
if (!preg_match("/\{PDM_AR\}/",$skin) || !preg_match("/\{\/PDM_AR\}/",$skin)) return $skin;
list($skin1,$buf,$skin2) = word_sepa("{PDM_ARLOOP}", "{/PDM_ARLOOP}", $skin);
$tmpbuf = $buf;
$skin3 = "";
$i = 0;
$selection = 0;
if ($a_count = archive_count()){
while(list ($key, $val) = each($a_count)) {
if ($val != 0) {
if ($key != $mid) {
$ARlink = '<option value="index.php?month='.$key.'">';
$selection = $selection + 0;
}else{
$ARlink = '<option value="index.php?month='.$key.'" selected="selected">';
$selection = $selection + 1;
}
$ARlinke = "</option>";
$ARcount = sprintf("%s", $val);
$buf = preg_replace ("/\{PDM_ARCOUNT\}/", $ARcount, $tmpbuf);
if (strstr($buf,"{PDM_ARYM}") && strstr($buf,"{/PDM_ARYM}")) {
list($dat1,$dd,$dat2) = word_sepa("{PDM_ARYM}", "{/PDM_ARYM}", $buf);
$buf = $dat1.date($dd,mktime(0,0,0,substr($key,4,2), 1, substr($key,0,4))).$dat2;
}
$buf = preg_replace ("/\{PDM_ARLINK\}/", $ARlink, $buf);
$buf = preg_replace ("/\{\/PDM_ARLINK\}/", $ARlinke, $buf);
$skin3 .= $buf;
$i++;
if ($i >= ARCOUNT){
break;
}
}
}
}
if ($skin3 == "") {
$skin = preg_replace("/\{PDM_AR\}[\w\W]+?\{\/PDM_AR\}/", "", $skin);
}else{
if (!$selection) $select = ' selected="selected"';
$pre_form = '<form name="pdm_arform" id="pdm_arform">
<select name="pdm_arslct" id="pdm_arslct" onchange="location=this.value">
<option value=""'.$select.'>月別ログ</option>';
$post_form ='</select>
</form>';
$skin = $skin1.$skin3.$skin2;
$skin = preg_replace("/\{PDM_AR\}/", "$pre_form", $skin);
$skin = preg_replace("/\{\/PDM_AR\}/", "$post_form", $skin);
}
return $skin;
}
/* ----- リンクリスト ----- */
function linkslist_call($skin) {
index.php 200行目辺り。赤字部分を追加する。
if (IKEY == 0) {
$skin = calendar_call($skin, $qry_data);
$skin = newentries_call($skin);
$skin = recomments_call($skin);
$skin = retrackback_call($skin);
$skin = categorylist_call($skin, $category);
$skin = archives_call($skin);
$skin = pulldown_archives_call($skin, $qry_month);
$skin = linkslist_call($skin);
$skin = profilelist_call($skin, $profile);
$skin = poprank_call($skin);
}
<div class="linktitle">■ログ(月別)■</div> <div class="linktext"> {PDM_AR}{PDM_ARLOOP} {PDM_ARLINK}{PDM_ARYM}Y年m月{/PDM_ARYM}({PDM_ARCOUNT}件){/PDM_ARLINK}</li> {/PDM_ARLOOP}{/PDM_AR} <noscript> {AR} <ul class="sidelist"> {ARLOOP} <li>{ARLINK}{ARYM}Y年m月{/ARYM}({ARCOUNT}件){/ARLINK}</li> {/ARLOOP} </ul> {/AR} </noscript> </div>