BlognPlus 用「アーカイブ一覧化モジュール」

ブログの記事がたくさんたまってくると「あの記事いつ書いたっけ?」と思うことありませんか?
記事を探す為に1ページずつさかのぼっていくのは結構大変です。

そこでこのモジュールを導入すると、BlognPlus でカテゴリー別/月別/ユーザー別記事表示時に、記事タイトルを一覧化して表示出来ます。
1ページに数十個の記事を一覧表示出来、お目当ての記事を探しやすくなる事でしょう。

モジュールの主な機能

1ページに最大50件の記事の一覧を表示する事が出来ます。一覧に表示できる項目は

動作例

モジュールを導入する前に、どんな風に動作しているかご覧になりたい場合は、以下のサイトを参考にして下さい。

※ トラックバックをいただいたサイト様に無断でリンクさせていただいています。

動作環境

BlognPlus v2.5.4(テキスト版およびMySQL版)で動作確認しています。PostgreSQL版での動作は未確認です。

ダウンロード

利用規約

  1. このモジュールの所有権は 「nJOY」管理人 CJ にあります。
  2. モジュールを使用して損害が生じても、「nJOY」管理人 CJ は一切の責任を負いかねます。
  3. モジュールの再配布・販売等は一切禁じます。
  4. 利用者個人の責任において改造は自由に行えます。
  5. スクリプト内にあるプログラム名・バージョン名・著作権表示を削除・変更する事は認めません。
  6. 当規約に同意された方のみ、このモジュールを無料で使う事が出来ます。
  7. もしよければ、あなたのブログに「nJOY BLOG」へのリンクをはってやってください。管理人が大変喜び、モジュール作成の励みになります。

アーカイブ一覧化モジュール」(alist.zip, 6kb)

インストール方法(BlognPlus v2.3.2 の場合)

  1. ダウンロードした圧縮ファイル(alist.zip)を解凍する
  2. 「alist」フォルダを BlognPlus ディレクトリ下の「module」にアップロード
  3. 「config.ini」のパーミッションを変更する(666 等)
  4. スキンファイルの任意の場所に alist 用タグを記述する

2. ディレクトリ構成

blognplus
   + module
      + alist
         - alist.php
         - config.ini (設定ファイル)
         - control.php
         - function.php
         - index.html
         - info.php
         - update.php

使用できるタグ

タグ説明
{ALM}開始タグ
{ALM_HEADING}カテゴリー別表示時に「カテゴリー名」を出力
月別表示時に「年月」を出力
ユーザー別表示時に「ユーザー名」を出力
{ALM_LOOP}ループ処理開始タグ
{ALM_YMD}〜{/ALM_YMD}記事の日付を出力
{ALM_HMS}〜{/ALM_HMS}
{ALM_TITLE}記事タイトルを出力(記事にリンク)
{ALM_AUTHOR}記事投稿者名を出力(プロフィールにリンク)
{ALM_COMMENT}コメント数を出力(コメント欄にリンク)
{ALM_TRACKBACK}トラックバック数を出力(トラックバック欄にリンク)
{ALM_CATEGORY}記事の属するカテゴリー名を出力(カテゴリー別表示にリンク)
{ALM_MES}記事の概要を表示
{/ALM_LOOP}ループ処理終了タグ
{/ALM}終了タグ

太字で記されているタグは必須です。

スキンファイルへの記述方法

試しに以下のような記述をスキンファイルに追加して、必要に応じて各自修正してください。

  1. {ALM}
  2. ■ {ALM_HEADING}
  3. <ul>
  4. {ALM_LOOP}
  5. <li>{ALM_YMD}Y/m/d{/ALM_YMD} {ALM_TITLE} ({ALM_AUTHOR})| {ALM_COMMENT} | {ALM_TRACKBACK} | {ALM_CATEGORY}<br>{ALM_MES}</li>
  6. {/ALM_LOOP}
  7. </ul>
  8. {/ALM}

※ {LOG}〜{/LOG} の直前あたりに追加するといいと思います。

管理画面

管理画面からモジュールの動作に関する設定を変更できます。

一覧化・表示件数

カテゴリー別/月別/ユーザー別表示時に、それぞれ一覧化するかしないか、した場合の表示件数(1〜50件)を設定できます。

{ALM_MES}

スキンに {ALM_MES} と記述する事で、記事の概要も表示できます。ここでは最初の何文字を抜粋して表示させるかを指定できます(mbstring 関数が使えない場合は、bytes 数で指定)。
概要からはすべての HTML タグが除去されます。また「続き」部分は概要の対象外になります。

モジュールの仕様・他

仕様

このモジュールを使うと、カテゴリー別表示時に「index.php?cl=*-*」、月別表示時に「index.php?ml=******」、ユーザー別表示時に「index.php?ul=*」にリダイレクトされるようになります。

スキンが適用されるのは、初期表示用のスキンです。
カテゴリー別/月別/ユーザー別スキンに適用したい場合は、「index.php」の改造が必要です(後述)。

他のモジュールとの互換性

パンくずリスト表示モジュール」「お知らせ表示モジュール」「カテゴリー別最新記事表示モジュール」をお使いの方は、各モジュールの最新版にアップデートしてください。

月別一覧を ON にすると「カレンダーモジュール」に不具合が出る事を確認しています。不具合の解消方法については下記を参照してください。

「カレンダーモジュール」との互換性

月別一覧が「ON」の場合、カレンダーによる月移動が出来ない不具合があります。
「カレンダーモジュール」が「アーカイブ一覧化モジュール」で拡張した機能に対応しきれていないのが原因です。

「カレンダーモジュール」の「calender.php」17行目からを以下のように改造する事で、不具合が解消されます。

赤文字部分の2行を追加してください。

  1. if ($_GET["m"] != "") {
  2. $blogn_mod_calendar_date = $_GET["m"];
  3. } elseif ($_GET["ml"] != "") {
  4. $blogn_mod_calendar_date = $_GET["ml"];
  5. }else{
  6. $blogn_mod_calendar_date = gmdate("Ym", time() + BLOGN_TIMEZONE);
  7. }
  8. $blogn_skin = blogn_mod_calendar_viewer($blogn_user, $blogn_skin, $blogn_mod_calendar_date);

表示モード別分岐モジュールとの互換性

The Blue and Violet Storys」で配布されている「表示モード別分岐モジュール」に改造を加えることで、一覧化した時に分岐するようにできます。

「function.php」40行目あたりに青文字部分(カテゴリー)、赤文字部分(月)、緑文字部分(ユーザー)を追加してください。

  1. switch ($blogn_view_mode) {
  2. case "e":
  3. $sx_view = "E";
  4. break;
  5. case "c":
  6. case "cl":
  7. $sx_view = "C";
  8. break;
  9. case "d":
  10. $sx_view = "D";
  11. break;
  12. case "m":
  13. case "ml":
  14. $sx_view = "M";
  15. break;
  16. case "p":
  17. $sx_view = "P";
  18. break;
  19. case "u":
  20. case "ul":
  21. $sx_view = "U";
  22. break;
  23. case "s":
  24. $sx_view = "S";
  25. break;
  26. default:
  27. $sx_view = "A";
  28. break;
  29. }

カテゴリー別/月別/ユーザー別スキンに適用させるための改造方法

アーカイブ一覧化モジュールを導入しただけの状態では、ジャンル別表示を使っていても一覧化が適用されるのは初期表示用のスキンのみです。
しかし以下の通りに「index.php」を改造することで、ジャンル別表示に対応させることができます。

月別一覧に月別スキンを適用させたい場合は、赤文字部分を2ヶ所追加してください。
ユーザー別一覧にユーザー別スキンを適用させたい場合は、緑文字部分を2ヶ所追加してください。
カテゴリー別一覧にカテゴリー別スキンを適用させたい場合は、青文字部分を2ヶ所追加してください。

「index.php」90行目あたり(ver2.4.2の場合)

  1. //-------------------------------------------------------------------- スキン選択処理
  2. if ($_GET["e"] != "") $blogn_entry_flag = $_GET["e"];
  3. if ($_GET["m"] != "") $blogn_date_flag = $_GET["m"];
  4. if ($_GET["ml"] != "") $blogn_date_flag = $_GET["ml"];
  5. if ($_GET["d"] != "") $blogn_date_flag = $_GET["d"];
  6. if ($_GET["p"] != "") $blogn_user_flag = $_GET["p"];
  7. if ($_GET["u"] != "") $blogn_user_flag = $_GET["u"];
  8. if ($_GET["ul"] != "") $blogn_date_flag = $_GET["ul"];
  9. if ($_GET["c"] != "") {
  10. if (ereg("-", $_GET["c"])) {
  11. $blogn_category_flag = str_replace("-", "|", $_GET["c"]);
  12. }else{
  13. $blogn_category_flag = $_GET["c"]."|";
  14. }
  15. }
  16. if ($_GET["cl"] != "") {
  17. if (ereg("-", $_GET["cl"])) {
  18. $blogn_category_flag = str_replace("-", "|", $_GET["cl"]);
  19. }else{
  20. $blogn_category_flag = $_GET["cl"]."|";
  21. }
  22. }
  23. $ua = explode("/",$_SERVER["HTTP_USER_AGENT"]);

「index.php」1600行目あたり(ver2.4.2の場合)

  1. // ジャンル別表示
  2. $findflg = false;
  3. switch ($mode) {
  4. case "": //初期表示画面
  5. @reset($skinview[1]);
  6. while(list($key, $val) = each($skinview[1])) {
  7. if ($val["category_id"] == "1" && $val["section_id"] == "1") {
  8. $findflg = $key;
  9. break;
  10. }
  11. }
  12. break;
  13. case "s": //サーチ画面
  14. @reset($skinview[1]);
  15. while(list($key, $val) = each($skinview[1])) {
  16. if ($val["category_id"] == "1" && $val["section_id"] == "2") {
  17. $findflg = $key;
  18. break;
  19. }
  20. }
  21. break;
  22. case "m": //月別表示画面
  23. case "ml": //月別一覧
  24. case "d": //日別画面(月指定スキンを使用)
  25. $mkey = (int)substr($date,4,2);
  26. @reset($skinview[1]);
  27. while(list($key, $val) = each($skinview[1])) {
  28. if ($val["category_id"] == "2" && $val["section_id"] == $mkey) {
  29. $findflg = $key;
  30. break;
  31. }
  32. }
  33. break;
  34. case "p": //プロフィール画面(ユーザー別)
  35. case "u": //ユーザー別画面
  36. case "ul": //ユーザー一覧
  37. @reset($skinview[1]);
  38. while(list($key, $val) = each($skinview[1])) {
  39. if ($val["category_id"] == "3" && $val["section_id"] == $userid) {
  40. $findflg = $key;
  41. break;
  42. }
  43. }
  44. break;
  45. case "e": //指定記事画面(記事カテゴリーに依存)
  46. $logdata = blogn_mod_db_log_load_for_editor($entry_id);
  47. $category = $logdata[1]["category"];
  48. case "c": //カテゴリ別画面
  49. case "cl": //カテゴリ一覧
  50. @reset($skinview[1]);
  51. while(list($key, $val) = each($skinview[1])) {
  52. if ($val["category_id"] == "4" && $val["section_id"] == $category) {
  53. $findflg = $key;
  54. break;
  55. }
  56. }
  57. break;
  58. }

アップグレードの仕方

Ver1.10/1.14 → 1.21

「config.ini」以外を上書きアップロードしてください。

バージョンアップ情報

2006/03/20
ver1.21 概要の文字数指定機能追加
2006/03/20
ver1.20 {ALM_MES} 追加
2006/03/20
ver1.15 リダイレクト処理を変更
2006/03/06
ver1.14 「RSS/Atom 生成モジュール」併用時の不具合を修正
2006/03/06
ver1.13 記事がない時にタグがそのまま表示されてしまう不具合を修正
2006/03/01
ver1.12 記事タイトルがない時に“(無題)”と表示
2006/02/28
ver1.11 処理を見直して若干高速化
2006/02/08
ver1.10 設定画面追加
2006/02/04
ver1.03 リダイレクトされるように変更
2006/02/04
ver1.02 ユーザー別一覧化機能追加
2006/02/02
ver1.01 月別一覧化機能追加
2006/02/01
ver1.00 カテゴリー別一覧化機能追加

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