Hexoのカテゴリーページで親カテゴリーを配列で取得する
Hexoにはpage.category
という変数が用意されていて、カテゴリーページでカテゴリーの名前を出せるのですが、カテゴリーを階層化させているときに、そのカテゴリーが属する親カテゴリーの名前やURLを出す変数がありません。
なので、何とかして親カテゴリーを取得してみようという企画です。
ソース
親カテゴリーが存在する場合は、parentというキーで親のidが入ってるので、それを頼りにフィルターで親カテゴリーを探します。
<%
function get_category(){
let arr = {};
arr[page.category] = url_for(page.path);
get_parent(page.category);
function get_parent(current){
const current_cat = site.categories.data.filter(x => x.name === current );
const parent_id = current_cat[0].parent;
if(parent_id) {
const parent_name = site.categories.data.filter(x => x._id === parent_id);
arr[parent_name[0].name] = url_for(parent_name[0].path);
get_parent(parent_name[0].name);
}
}
return reverse_array(arr);
}
function reverse_array(a) {
var key = [];
for (var i in a) {
key.push(i);
}
key.reverse();
var ret = [];
for (var i in key) {
ret[key[i]] = a[key[i]];
}
return ret;
}
const cat = get_category();
console.log(cat);
%>
get_category()
を実行すれば、カテゴリー名とURLのセットが連想配列で返ってきます。
これをこのブログのhttps://pixelog.net/category/web/hexo/
で実行すると、下のような配列が得られます。
[ Web: '/category/web/', Hexo: '/category/web/hexo/' ]
応用
この関数を使えばパンくずリストや構造化マークアップもできます。