14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ホームページに最近見たページを表示する JavaScript

Last updated at Posted at 2016-07-07

最近見たページを表示するJavaScript (jQuery) を concrete5 のアドオンとして公開しました。計算フォームマイミツブログで利用しています。
使用している変数の一部に concrete5 特有のものがありますが、おおまかな処理は他のCMSでも使えます。

表示したページの情報を記録する

(1) /// License: MIT
$( document ).ready(function() {
    var recent_views_start = JSON.parse(localStorage.getItem('ounziw_recent_views'));
    var recent_views = [{
        url: CCM_CID,
        headertitle: document.title,
    }];
    if (recent_views_start) {
        for(i=0;i<10;i++) {
            if (recent_views_start[i] && recent_views[0].url !== recent_views_start[i].url) {
                recent_views.push(recent_views_start[i]);
            }
        }
    }
    localStorage.setItem('ounziw_recent_views',JSON.stringify(recent_views));
});

urlとページタイトルを取得して、順に保存していく、という方式です。
CCM_CIDは、concrete5が各ページに割り当てるIDです。他のCMSを使う場合や静的ページの場合は、document.URLに変更してもらえればと思います。
元の履歴に、同じページがあった場合に複数回表示する必要はないので、重複チェックを行っています。(元の履歴をいったんrecent_views_startに格納して、最新の履歴recent_views と比較)
取得する数は10個に決めうちにしてますが、この辺も適宜変更してもらえればと思います。

ページ上に表示する

localStorageに保存されているものを表示するコードです。

(2) /// License: MIT
$( document ).ready(function() {
    var recent_views_list = JSON.parse(localStorage.getItem('ounziw_recent_views'));
    var listclass = $('.recent_views').data('listclass');
    var title = 'headertitle';
    
    if ($('.recent_views').data('num') >= 1) {
        var num_of_lists = $('.recent_views').data('num');
    } else {
        var num_of_lists = 5;
    }

    listdata = $("<ul></ul>",{
        class: listclass,
    });
    if (recent_views_list) {
        $('.recent_views').append(listdata);        
        for(i=0;i<num_of_lists;i++) {
            if (recent_views_list[i]) {
                textdata = $("<a></a>",{
                    href: CCM_APPLICATION_URL + '/index.php?cID=' + parseInt(recent_views_list[i]['url']),
                    text: recent_views_list[i][title]
                });
                textlist = $("<li></li>").html(textdata);
                $('.recent_views ul').append(textlist);
            }
        }
    }
});

localStorageの情報を表示していきます。jQueryでHTML部品を作って組み立てていきます。この辺はもっと上手く書けるかもしれないです。
CCM_APPLICATION_URL は concrete5 のインストールされている URL です。

表示する場所は、以下のようなHTMLで指定します。

<div class="recent_views" data-num="5" data-title="title" data-listclass="viewhistory"></div>

実践例

このアドオンは、concrete5でサイト運用するため、レスキューワーク株式会社の業務として開発しました。concrete5 の公式サイトからダウンロードすることができます。

PHPを使わない理由

PHPを使わないで、JavaScriptで記述しました。理由としては、

  • 閲覧者が確認できれば良い情報である -> サーバー側で処理する必要が無い

です。なので、閲覧者のブラウザで処理するlocalStorage機能を選択しました。

  • 閲覧履歴が他者に漏れにくい
  • サーバー処理負荷を重くしない

といったメリットがあります。一方、デメリットとしては、

  • 同じ閲覧者でも、端末やブラウザが異なると履歴が保存されない
  • 履歴に基づいた提案はしにくい (「閲覧履歴を元におすすめページを出す」などは難しい)

があります。

14
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?