これまでTopサイトでは、複数サイトの最新記事をRSSで取得・統合表示していましたが、表示速度の低下や、各記事のアクセス数などの情報を取得できないという課題がありました。
そこで、RSSによる取得を廃止し、同一サーバー内の複数サイト(データベース)から直接データを取得する仕組みに変更しました。
これにより、以下の機能を実現しています。
- 同一サーバー内の複数サイト(データベース)から記事を一括取得
- サイトやカテゴリなどの表示条件に応じて、最新記事をカード形式で表示
- 複数サイトのアクセスデータをリアルタイムで集計・統合し、サイトの枠を超えた総合アクセスランキングを表示
- 投稿日が指定期間内の記事には「New!」バッジを自動表示
- 管理者ログイン時には、本日・今週・今月・累計のPV(ページビュー)の内訳を表示
RSS取得方式と比べて表示速度が向上したほか、アクセス情報を活用したランキング表示や管理機能も実現し、利便性を大幅に向上させました。
最新記事一覧ショートコードの流れ
全体の一連の流れ(概要)
- 設定の読み込みと整理
表示件数、キャッシュ期限、除外記事ID、抽出対象サイト・カテゴリ条件(site属性)を読み込み・整理
↓ - キャッシュの確認
有効なキャッシュデータがあれば、データベースにアクセスせず即座にHTMLを出力して処理を終了
↓ - 複数サイトのデータベースを順次巡回(ループ処理)
同一サーバー内にある対象サイトのデータベースへ順番に外部接続
↓ - 【巡回中】サイト・カテゴリのフィルタリング判定
ショートコードで指定されたサイトか判定、および対象外サイトのスキップ処理
↓ - 【巡回中】対象データの抽出(SQL + PHPの二連チェック)
SQLで最新記事を取得(SQLのサブクエリでカテゴリの内包・除外を一次フィルタリング)。さらにPHP側で、複数カテゴリを持つ記事の不整合を完全に防ぐための二次除外チェックを実行
↓ - 親サイトへのデータベース接続復元
データ収集完了後、メイン(親)サイトのデータベース接続状態へと安全に復元
↓ - データの統合・最新順ソート
全サイトから集まった記事データを1つの配列にマージし、投稿日付の新しい順(最新順)に並び替え
↓ - 表示件数の切り出し
ソート済みの配列から、指定された表示件数(デフォルト10件)だけを切り出し
↓ - 「New!」マーク判定
投稿日が基準期間内(デフォルトは7日以内)の記事に対して、タイトル先頭に「New!」バッジを付与
↓ - カード型デザイン(HTML)の組み立て
Cocoonのスタイルに合わせたHTMLを作成
(管理者ログイン時は、各サイトの統計テーブルから詳細な本日/週/月/全体のリアルタイムPV内訳を再集計してカード内に追加出力)
↓ - キャッシュ保存 & 画面出力
生成されたHTMLを次回の高速化のために一時保存(トランスジエント)し、画面に出力
人気記事一覧ショートコードの流れ
全体の一連の流れ(概要)
- 設定の読み込みと整理
表示件数、集計対象期間(days)、キャッシュ期限、除外記事IDを読み込み・整理
↓ - キャッシュの確認
有効なキャッシュデータがあれば、データベースにアクセスせず即座にHTMLを出力して処理を終了
↓ - 複数サイトのデータベースを順次巡回(ループ処理)
同一サーバー内にある対象サイトのデータベースへ順番に外部接続
↓ - 【巡回中】PV数ベースでのデータ抽出(SQL処理)
Cocoonのアクセス統計テーブルを確認。テーブルが存在する場合は「指定期間内の合計PV数」が多い順に上位30件を取得。存在しない場合はPV数「0」として最新記事順で代替取得
↓ - 親サイトへのデータベース接続復元
データ収集完了後、メイン(親)サイトのデータベース接続状態へと安全に復元
↓ - データの統合・総合ランキングソート
全サイトから集まった記事データを1つの配列にマージし、サイトをまたいだ「総合PV数」の多い順に並び替え
↓ - 表示件数の切り出し
総合ランキングの上位から、指定された表示件数(デフォルト10件)だけを正確に切り出し
↓ - ランキング型デザイン(HTML)の組み立て
Cocoonのスタイルに合わせた、PV数表示付きのランキング用HTMLを作成
(管理者ログイン時は、各サイトの統計テーブルから詳細な本日/週/月/全体のリアルタイムPV内訳を再集計してカード内に追加出力)
↓ - キャッシュ保存 & 画面出力
生成されたHTMLを次回の高速化のために一時保存(トランスジエント)し、画面に出力

