##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){
処理
}