JavaScript
cookie
閲覧履歴

Javascriptでcookieを使って閲覧履歴を実装


Javascriptでcookieを使って閲覧履歴を実装

wordpress案件でcookieを使って閲覧履歴を実装しました。

遠回りをしてしまったのですが、最終的には配列を文字列化して対応しました。

そのメモです。

閲覧履歴:recent_view

1,クッキーrecent_viewの存在をチェック(indexOf)
2,なければ、配列recent_viewをつくって記事IDをいれる
3,あれば、配列にする(split)
4,重複チェック(indexOf)
5,重複してたら、それを削除(splice)
6,配列の先頭に記事IDを入れる(unshit)
7,配列recent_viewを文字列化(join)
8,クッキーrecent_viewに文字列を入れる

var allCookie = document.cookie;

$(function(){
/* 閲覧履歴:recent_view */
if (allcookie.indexOf('recent_view') == -1) {
var recent_view = [];
recent_view.unshift('<?=get_post()->ID?>');

} else {
var str = allcookie.replace(/(?:(?:^|.*;\s*)recent_view\s*\=\s*([^;]*).*$)|^.*$/, "$1");
recent_view = str.split(',');

var num = recent_view.indexOf('<?=get_post()->ID?>');
if (num != -1) {
recent_view.splice(num, 1);
}
recent_view.unshift('<?=get_post()->ID?>');
}

recent_view_str = recent_view.join(',');
document.cookie = 'recent_view='+recent_view_str+';path=/';
console.log(document.cookie);
});

あとは、phpの$_COOKIEで値を取得して配列に戻してループで利用します。

$recent_view = explode(',', $_COOKIE['recent_view']);

$recent_view = array_map('htmlspecialchars', $recent_view);
foreach($recent_view as $val){
処理
}