カテゴリーの記事を一覧表示

機能的には「カテゴリーの記事を一覧表示(簡易版)」とほぼ同じです。
今回説明する「設定機能付き版」は「簡易版」に比べて改造箇所が多くなりますが、管理画面でいつでも表示件数を変更する事が出来ます。
以下、目次

  1. 「admin.php」書き換え
  2. 「common.php」書き換え
  3. アップロード(admin/common)
  4. 「index.php」書き換え
  5. アップロード(index)
  6. カテゴリ用スキン作成
  7. スキン適用
  8. 制限事項

Blogn v1.9.2 で動作の確認をしています。

説明

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

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

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

「簡易版」になかった機能として、管理画面から表示記事件数を指定する事が出来るようにしました。これによって、表示記事件数を変更する毎に「index.php」をいじる必要がなくなります。

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

1. 「admin.php」を書き換える

admin.php の120行目(↓実際は1行で書かれていますが、見やすくするため改行を入れています)

conf_edit($qry_action, $sitename, $sitedesc, $width, $height, 
$logcount, $arcount, $necount, $rccount, $rtcount, $imcount, 
$tz, $charset, $address, $cok_send, $tok_send, $comment_maxsize, 
$comment_maxtime, $trackback_type, $catcount, $moncount);

admin.php 939行目(↓実際は1行で書かれていますが、見やすくするため改行を入れています)

function conf_edit($action, $sitename, $sitedesc, $width, $height, 
$logcount, $arcount, $necount, $rccount, $rtcount, $imcount, $tz, 
$charset, $address, $cok_send, $tok_send, $comment_maxsize, $comment_maxtime, 
$trackback_type, $catcount, $moncount){

admin.php 956行目(↓実際は1行で書かれていますが、見やすくするため改行を入れています)

$newconf = $sitename."<>".$sitedesc."<>".$width."<>".$height."<>".$logcount."<>"
.$arcount."<>".$necount."<>".$rccount."<>".$rtcount."<>".$imcount."<>".$tz."<>"
.$charset."<>".$address."<>".$cok_send."<>".$tok_send."<>".$comment_maxsize."<>"
.$comment_maxtime."<>".$trackback_type."<>".$catcount."<>".$moncount."\r\n";

admin.php 1012行目(↓実際は1行で書かれていますが、見やすくするため改行を入れています)

list($sitename,$sitedesc,$width,$height,$logcount,$arcount,$necount,$rccount,
$rtcount,$imcount,$tz,$charset, $address, $cok_send, $tok_send, $comment_maxsize, 
$comment_maxtime, $trackback_type, $catcount, $moncount) = explode("<>", $conf[0]);

admin.php 1226行目と1227行目の間に以下の記述を加える。

<div class="mainstate">※ トラックバックが受信できない場合はチェックを入れてください。</div>
  </td></tr>
  <tr>
  <td width="200" bgcolor="#82BE7D">■カテゴリー別表示件数</td>
  <td width="300"><select name=catcount>';
  for ($i = 1; $i <= 100; $i++) {
    if ($i == $catcount) {
      echo '<option value="'.$i.'" selected>'.$i.'件</option>';
    }else{
      echo '<option value="'.$i.'">'.$i.'件</option>';
    }
  }
  echo '
  </select></td>
  </tr>
  <tr>
  <td width="200" bgcolor="#82BE7D">■月別表示件数</td>
  <td width="300"><select name=moncount>';
  for ($i = 1; $i <= 100; $i++) {
    if ($i == $moncount) {
      echo '<option value="'.$i.'" selected>'.$i.'件</option>';
    }else{
      echo '<option value="'.$i.'">'.$i.'件</option>';
    }
  }
  echo '
  </select></td>
  </tr>
  </table>
  </td></tr>
  <tr><td align="right">
  <input type="submit" value="更新する">

2. 「common.php」を書き換える

common.php 76行目(↓実際は1行で書かれていますが、見やすくするため改行を入れています)

list($c_sitename,$c_sitedesc,$c_width,$c_height,$c_logcount,$c_arcount,$c_necount,
$c_rccount,$c_rtcount,$c_imcount,$c_tz,$c_charset,$c_address,$c_cok_send,
$c_tok_send, $c_maxsize, $c_maxtime, $c_tracktype, $c_catcount, $c_moncount) = 
explode("<>", $conf[0]);

common.php 112行目の後に次の記述を加える

/* トラックバック設定 */
define(TTYPE, $c_tracktype);
/* カテゴリ別表示数 */
define(CATCOUNT, $c_catcount);
/* 月別表示数 */
define(MONCOUNT, $c_moncount);

3. アップロード

ここで「admin.php」と「common.php」をアップロードしてください。
アップロードし終わったら、管理画面から[ブログの初期設定]に入ります。

「トラックバック設定」の下に、新たに「■カテゴリー別表示件数」と「■月別表示件数」という項目があるはずです。
プルダウンメニューから数値を選び[更新する]ボタンを押してください。もし改造が成功していたら、エラーが出ずに数値が記録されるはずです。
もし何らかのエラーが出た場合は、スクリプトの記述が間違っているので、もう一度間違いがないか見直してください。

4. 「index.php」を書き換える

1504行目、1505行目、1614行目の LOGCOUNT を CATCOUNT に書き換えてください。

/* ----- ログ表示処理(カテゴリ別表示) ----- */
function category_log($skin, $qry_data, $qry_page) {
	if ($qry_page == "") $qry_page = 1;
	if (IKEY == 0) {
		$page_st = CATCOUNT * ($qry_page - 1) + 1;
		$page_ed = $page_st + CATCOUNT;
	}else{
		$page_st = IMCOUNT * ($qry_page - 1) + 1;
		$page_ed = $page_st + IMCOUNT;
	}

          …
          …
        (中 略)
          …
          …

	if (IKEY == 0) {
		$maxpage = ceil(($i - 1) / CATCOUNT);
	}else{
		$maxpage = ceil(($i - 1) / IMCOUNT);
	}

1524 と 1525行目の間に、次の記述を加えます。

if ($page_st <= $i && $page_ed > $i) {
  $d_link = "<a href=\"".PHP_SELF."?eid=".$eid."\">".$d_title."</a>";
  $buf = str_replace ("{LOGTITLE}", $d_link, $tmpbuf);

1256行目、1257行目、1363行目の LOGCOUNT を MONCOUNT に書き換えてください。

/* ----- ログ表示処理(月別表示) ----- */
function category_log($skin, $qry_data, $qry_page) {
	if ($qry_page == "") $qry_page = 1;
	if (IKEY == 0) {
		$page_st = MONCOUNT * ($qry_page - 1) + 1;
		$page_ed = $page_st + MONCOUNT;
	}else{
		$page_st = IMCOUNT * ($qry_page - 1) + 1;
		$page_ed = $page_st + IMCOUNT;
	}

          …
          …
        (中 略)
          …
          …

	if (IKEY == 0) {
		$maxpage = ceil(($i - 1) / MONCOUNT);
	}else{
		$maxpage = ceil(($i - 1) / IMCOUNT);
	}

1275 と 1276行目の間に、次の記述を加えます。

if ($page_st <= $i && $page_ed > $i) {
  $d_link = "<a href=\"".PHP_SELF."?eid=".$eid."\">".$d_title."</a>";
  $buf = str_replace ("{LOGTITLE}", $d_link, $tmpbuf);

5. アップロード

ここまできたら「index.php」をアップロードしてください。
アップロードし終わったら、カテゴリ別と月別表示でそれぞれ指定した件数の記事が表示されているか確認します。

6. カテゴリ別/月別表示用のスキン作成

「記事表示件数」よりも多くの記事を一度に表示出来るようになりましたが、本文も一緒に表示されてしまいます。
題名だけ一覧表示するための専用スキンを作りましょう。

専用スキンを作るといっても、現在使用しているスキンをベースにするので作業量はたいした事はありません。
ここではぶろぐん同梱のスキン(0.html)を例に説明します。

ここから上はそのまま
  ↑
{SEARCH}
 (中略)
{/SEARCH}

{PROFILES}
 (中略)
{/PROFILES}

{LOGLOOP}
  <table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tr>
      <td>
        <div class="entry_date">{LOGYMD}Y,m,d, l{/LOGYMD}</div>
        <div class="entry_title">{LOGTITLE}</div>
        <div class="entry_author" style="text-align:right;">
        author : {LOGAUTHOR}</div>
        <div class="entry_body">
        {LOGBODY}<br>
        <br>
        {MOREMARK}続き▽{/MOREMARK}
        {LOGMORE}
        </div>
        <div class="entry_state">
        {LOGCATEGORY} | {LOGHMS}h:i A{/LOGHMS} | {LOGCOMMENT} | {LOGTRACKBACK} |</div>
      </td>
    </tr>
  </table>
{/LOGLOOP}

{COMMENT}
 (中略)
{/COMMENT}

{TRACKBACK}
 (中略)
{/TRACKBACK}
  ↓
ここから下もそのまま

必要なのは記事の題名(と日付)だけなので、要らない部分(SEARCH, PROFILES, COMMENT, TRACKBACK, 他)を削除します。

ここから上はそのまま
  ↑
{SEARCH}
 (中略)
{/SEARCH}

{PROFILES}
 (中略)
{/PROFILES}

{LOGLOOP}
  <table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tr>
      <td>
        <div class="entry_date">{LOGYMD}Y,m,d, l{/LOGYMD}</div>
        <div class="entry_title">{LOGTITLE}</div>
        <div class="entry_author" style="text-align:right;">
        author : {LOGAUTHOR}</div>
        <div class="entry_body">
        {LOGBODY}<br>
        <br>
        {MOREMARK}続き▽{/MOREMARK}
        {LOGMORE}
        </div>
        <div class="entry_state">
        {LOGCATEGORY} | {LOGHMS}h:i A{/LOGHMS} | {LOGCOMMENT} | {LOGTRACKBACK} |</div>
      </td>
    </tr>
  </table>
{/LOGLOOP}

{COMMENT}
 (中略)
{/COMMENT}

{TRACKBACK}
 (中略)
{/TRACKBACK}
  ↓
ここから下もそのまま

要らない部分を削除した結果(↓)


ここから上はそのまま
  ↑
{LOGLOOP}
  <table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tr>
      <td>
        <div class="entry_date">{LOGYMD}Y,m,d, l{/LOGYMD}</div>
        <div class="entry_title">{LOGTITLE}</div>
      </td>
    </tr>
  </table>
{/LOGLOOP}
  ↓
ここから下もそのまま

スキンは人それぞれカスタマイズして使っているのであまり多くは語りません。

日付の表示が必要なければ {LOGYMD}〜{/LOGYMD} も削除してかまいません。
最低限 {LOGLOOP}{LOGTITLE}{/LOGLOOP} のような記述さえあれば OK です。
スタイルシートの適用は各自好みで。

新しいスキンが出来上がったら、ぶろぐん管理画面からスキンファイルと CSS ファイルを登録してください。

7. スキンの適用

ぶろぐん管理画面から [使用スキンの登録] 画面に入り、先ほど登録したスキンを適用します。

  1. 通常は「ノーマル表示」を選択していると思いますが、「ジャンル別表示」に切り替えます。
  2. 初期表示/サイト内検索表示/プロフィール表示/指定記事表示はプルダウンメニューから今まで使っていたスキンを選んでください。
  3. 月別とカテゴリ別表示については、先ほど登録した専用スキンを選んでください。
  4. 最後にページ最下部の [スキンを登録する] を押して作業完了です。

スキンの適用が終わったら、自分のブログのカテゴリ別/月別表示を確認します。
本文なしで題名(+日付)だけが表示されていたら、一覧表示の改造は成功です。ごくろうさま。

8. 制限事項

必ず全カテゴリと月に対して、作成した専用スキンを登録してください。
登録しなかった場合、そのカテゴリまたは月をクリックすると指定した記事件数分の記事+本文が表示されます。100件とかに設定しているとかなりファイルサイズが重くなる事が予想されます。

また新しくカテゴリを作成したら、忘れずにスキンを登録しましょう。


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