カテゴリーの記事を一覧表示(BlognPlus版)

Blogn(ぶろぐん)で出来た「カテゴリーの記事を一覧表示」の BlognPlus(ぶろぐん+)版です。

動作を確認した環境:WindowsXP, Apache/2.0.54, PHP/4.3.10, BlognPlus v2.2.2(テキスト版)

動作例

カテゴリをクリックすると、こんな感じでカテゴリ内のタイトル一覧が表示されます。
記事のタイトルをクリックすると、個別記事を読むことが出来ます。


BlognPlus(ぶろぐん)v2.2.2 の改造

index.php に赤で示した文字列を追加していってください。

STEP 1. 表示件数を指定

下記の例では1ページ内に表示する件数を50件にしています。
お好きなページ数を半角英数字で指定してください。

index.php 850行目に3行追加

if (BLOGN_MOBILE_KEY == 0) {
  $start_key = BLOGN_LOG_VIEW_COUNT * ($qry_page - 1);
  $count = BLOGN_LOG_VIEW_COUNT;
  $maxpage = ceil($totalentry / BLOGN_LOG_VIEW_COUNT);
  $count_cat = 50;	// ここで表示件数を指定
  $start_key_cat = $count_cat * ($qry_page - 1);
  $maxpage_cat = ceil($totalentry / $count_cat);
}else{
  $start_key = BLOGN_MOBILE_VIEW_COUNT * ($qry_page - 1);   $count = BLOGN_MOBILE_VIEW_COUNT;   $maxpage = ceil($totalentry / BLOGN_MOBILE_VIEW_COUNT); }

STEP 2. カテゴリーに適用

index.php 873行目〜

case "category":
  $url = "?c=".$key_id."&";
  $loglist = blogn_mod_db_log_load_for_category($user, $start_key_cat, $count_cat, $key_id);
  reset($loglist[1]);
  $logdata = current($loglist[1]);
  list($c1, $c2) = explode("-", $key_id);
  $category = $category1[1][$c1]["name"];
  if ($c2) $category .= "::".$category2[1][$c2]["name"];
  $skin = str_replace ("{SITETITLE}", BLOGN_SITENAME."::".$category , $skin);
  $skin = str_replace ("{CATEGORYNAME}", $category , $skin);
  break;

STEP 3. 「次/前の記事」

index.php 900行目あたり

if ($qry_page == 1) {
  $skin = preg_replace("/\{NEXTPAGE\}[\w\W]+?\{\/NEXTPAGE\}/", "", $skin);
}else{
  $skin = preg_replace("/(\{NEXTPAGE\})([\w\W]+?)(\{\/NEXTPAGE\})/", "<a href=\"index.php".$url."page=".$nextpage."\">\\2</a>", $skin);
}
if ($mode == "category") {
  if ($maxpage_cat < $backpage) {
    $skin = preg_replace("/\{BACKPAGE\}[\w\W]+?\{\/BACKPAGE\}/", "", $skin);
  }else{
    $skin = preg_replace("/(\{BACKPAGE\})([\w\W]+?)(\{\/BACKPAGE\})/", "<a href=\"index.php".$url."page=".$backpage."\">\\2</a>", $skin);
  }
}else{
  if ($maxpage < $backpage) {
    $skin = preg_replace("/\{BACKPAGE\}[\w\W]+?\{\/BACKPAGE\}/", "", $skin);
  }else{
    $skin = preg_replace("/(\{BACKPAGE\})([\w\W]+?)(\{\/BACKPAGE\})/", "<a href=\"index.php".$url."page=".$backpage."\">\\2</a>", $skin);
  }
}

STEP 4. 個別記事表示時のスキンを初期表示と同じに

BlognPlus からは個別記事に適用されるスキンがカテゴリーに依存するようになりました。
カテゴリーをクリックした時にタイトル一覧を表示させるためには不都合な仕様なので、以下の部分をごっそりコメントアウトします。

index.php 1528〜1540行目をコメントアウト

// case "e":  //指定記事画面(記事カテゴリーに依存)
//   $logdata = blogn_mod_db_log_load_for_editor($entry_id);
//   $category = $logdata[1]["category"];
//   for ($i = 14; $i < count($skinview[1]); $i++) {
//     if ($skinview[1][$i]["category_id"] == "3" && $skinview[1][$i]["section_id"] == $category) {
//       $skin = file(BLOGN_SKINDIR.$skinlist[1][$skinview[1][$i]["skin_id"]]["html_name"]);
//       $skin = implode("",$skin);
//       $skin = blogn_mbConv($skin,0,4);
//       $skin = preg_replace ("/\{CSSNAME\}/", BLOGN_SKINDIR.$skinlist[1][$skinview[1][$i]["skin_id"]]["css_name"], $skin);
//       break;
//     }
//   }
//   break;

カテゴリー専用スキンの作成

タイトル一覧表示に必要なのは、スキン内の {LOG}〜{/LOG} で必要な要素は {LOGLOOP}{LOGTITLE}{/LOGLOOP} です。
他の要素(日付/投稿者名/カテゴリー名/投稿時間/コメント数/トラックバック数)は任意で入れてください。

{LOG}
  {LOGLOOP}
    {LOGYMD}Y,m,d, l{/LOGYMD}
    {LOGTITLE}
    {LOGAUTHOR}
    {LOGCATEGORY}{LOGHMS}h:i A{/LOGHMS}{LOGCOMMENT}{LOGTRACKBACK}
  {/LOGLOOP}
{/LOG}

※ 上記の例では装飾に関するタグは取り除いています。

ちなみにページ上部の動作例ではスキンに下記のような記述をしています。

{LOG}
<h2 style="margin-top:2em;font-size:100%">{CATEGORYNAME}</h2>
<ul style="list-style-type:none;font-size:90%;line-height:150%;">
{LOGLOOP}
<li>{LOGYMD}Y.m.d{/LOGYMD}: <strong>{LOGTITLE}</strong></li>
{/LOGLOOP}
</ul>
{/LOG}

「STEP 4」で独自の変数 {CATEGORYNAME} を導入しました。
カテゴリー用スキンにこの変数を書くとカテゴリー名が表示されるようになります。

アップロード&スキンの適用

ここまでの作業が終わったら、まず「index.php」を BlognPlus をインストールしたディレクトリに上書きアップロードして下さい。
アップロードし終わったらブログがエラーを出していないか確認してください。もし何らかのエラーが出ていたら、何らかの記述間違いがあります。エラーの際に出力される行数を頼りに間違いを修正してください。

次に先ほど作成したカテゴリー専用スキンを登録します。
[スキン追加/編集]から新スキンを登録してください。

最後に[表示スキン設定]から[ジャンル別表示]を選び、カテゴリー表示に対して先ほど登録した新スキンを登録します。

ブログに戻りカテゴリーをクリックします。もしタイトル一覧が表示されたら成功です。

確認されている不具合

その1

この改造はカテゴリー毎に違うスキンを使用しているブログでは使わないでください。
BlognPlus では個別記事に適用されるスキンは、カテゴリーで指定したスキンに依存するようになりました。
しかしタイトル一覧表示を可能にするため、「STEP 4」でこの機能を停止しています。
(実際は使ってもかまいませんが、「STEP 1」で指定した件数分の題名と本文が表示されます)

その2

ソースを見れば分かりますが、記事の題名と一緒にメタデータもページに埋め込まれています。
ですので見た目以上にファイルサイズの大きいページが生成されます。
目安として1つの記事に対して約1kbのメタデータが付加されます。
(Blogn ではメタデータを埋め込まないように出来ましたが、BlognPlus ではちょっと分かりませんでした。)


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