月別アーカイブをプルダウンメニューにする改造方法(Blogn版)

月別アーカイブをプルダウンメニュー化する方法です。
以下、目次

  1. 「index.php」書き換え Part1()
  2. 「index.php」書き換え Part2()
  3. スキン作成
  4. スキン適用

BlognPlus 用のモジュールも公開しています。

説明

改造方法の前に簡単に仕組みを説明します。

ぶろぐんでは管理画面から1ページに表示する記事の数を指定できます(表示記事件数)。
この設定のせいで、すべての表示方法(初期表示/月別表示/カテゴリ別表示)において、5件なら5件ずつしか記事が表示されません。

今回の改造では、全表示方法に対して同じ件数しか表示されないという呪縛から、ユーザーを解き放ちます。これによって初期表示では5件、カテゴリ別表示では50件など、柔軟な表示を可能にします。
これにカテゴリ専用スキンを用意することで、カテゴリでは題名だけの一覧表示が出来るようになります。

Blogn(ぶろぐん)v1.9.2 の場合

1. 「index.php」を書き換える(プルダウンメニューを作成する関数)

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) {

2. 「index.php」を書き換える(関数を適用)

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);
}

3. スキン修正

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

サイト作成のヒント集に戻る