ブログとはよくできたものだと思う。書きたいことだけ書いて投稿すると、綺麗な体裁のウェブページを作ってくれる。ヘッダーとかフッターとかサイドバーのような、定型部分をユーザーは気にかけないでいい。ブログの成功は、ユーザーが書く部分とコンピューターが自動生成できる部分の分離に寄るのではないかと思う。このブログがほぼ毎日続いているのも、定型部分を気にせず、エントリーだけに集中できているのが大きい。
でも逆を返せば、ブログではエントリー部分しか編集できない。つまり投稿する時に、フッターやサイドバーの内容は書き替えられない。
特に Blogger ではその制限が厳しい。
そこで、投稿記事に
div
要素を埋め込んで、フッターやサイドバーに反映する JavaScript を書いてみた。
サンプル
記事には、次のコードを埋め込んだ。
<div class="category" title="Blogger,JavaScript,HTML"></div> <div class="amazon" title="4873111692:JavaScript & DHTMLクックブック -- Webエキスパート必携テクニック集"></div> <div class="amazon" title="4774106224:スタイルシートWebデザイン -- CSS2完全解説"></div> <div class="amazon" title="4873111811:Amazon Hacks 世界最大のショッピングサイト完全活用テクニック100選"></div>
最初の一行は、フッター部分に はてなブックマークを利用したカテゴリー・タグを表示させる設定。今回は Blogger と JavaScript と HTML のタグを付けた。
二行目〜四行目は、サイドバーに Amazon へのリンクを表示させる設定。この記事を書くのに参考にした本の情報を書いた。
JavaScript `outEntry'
今回使った JavaScript outEntry.js のソースは以下の通り。
var hatena = 'http://b.hatena.ne.jp/at-aka/'; var amazon = 'http://www.amazon.co.jp/exec/obidos/ASIN/'; var ama_id = 'clmemoaka-22'; var amaimg = 'http://images.amazon.com/images/P/'; var amajpg = '.09._SCTHUMBZZZ_.jpg' function getNum (e) { return (e.className=='post') ? e.getAttribute('id') : getNum(e.parentNode); } function outEntry () { var divs = document.getElementsByTagName('div'); var length = divs.length; for (var i=0; i<length; i++){ printCategory (divs[i]); printAmazon (divs[i]); } } function printCategory (e) { if (e.className == 'category'){ var num = getNum(e); var txt = '<br />Category: '; var tag = e.getAttribute('title').split(','); for (var j=0; j<tag.length; j++){ tag[j] = '<a href="' + hatena + tag[j] + '/">' + tag[j] + '</a>'; } txt += tag.join(', '); document.getElementById('category_'+num).innerHTML = txt; } } function printAmazon (e) { if (e.className == 'amazon'){ var title = e.getAttribute('title').split(':'); var asin = title.shift(); title = title.join(':'); var url = amazon + asin + '/' + ama_id; var img = amaimg + asin + amajpg; var li = document.createElement("li"); var ul = document.getElementById ('bb'); li.innerHTML = '<a href="'+ url +'"><img alt="" src="'+ img +'"/>'+ title +'</a>'; ul.appendChild (li); } }
テンプレートの修正
head 部分
<head> <title>clmemo@aka</title> <script type="text/javascript" src="http://pop-club.hp.infoseek.co.jp/prog/outEntry.js"></script> </head> <body onload="outEntry();">
関数 outEntry がロード時に実行され、記事の中の category / amazon 情報を展開する。
カテゴリー・タグ用の設定
post クラスを持つ div 要素に次のような ID を付ける。
<div class="post" id="<$BlogItemNumber$>">
そういうコードがなければ、ブログの投稿部分を上記の div 要素で囲む。
そして、category を表示させる部分に次のコードを入れる。
<span id="category_<$BlogItemNumber$>"></span>
category クラスを持つ div 要素が、カテゴリー・タグに展開されるというわけ。
Amazon 用の設定
Amazon 用には次のコードを入れる。
<ul id="bb" class="body_shown"> </ul>
id="bb" を持つ ul 要素の中に、 Amazon へのリンクが追加されていく。
解説
getElementsByTagName で div タグを集め、
className == 'category'
ならカテゴリーの情報を
className == 'amazon'
なら
Amazon の情報を
getAttribute('title')
で手に入れる。
printAmazon が Amazon 用のコード。title 属性に ASIN と書名をコロン区切りで情報を入れておいて、そこからリンクと li 要素を作る。 Amazon のアフィリエイト・リンクの作り方は、 Amazon Hacks を参照。その li 要素を bb という ID を持つ ul 要素に入れていく。
printCategory はカテゴリー・タグ用のコード。カテゴリー・タグはエントリーごとにあるので、カテゴリーとエントリーの対応を考えなくちゃいけない。エントリーを区別するのに $BlogItemNumber$ を使った。もちろん、permalink でもよいと思う。 $BlogItemNumber$ を手がかりに、カテゴリーを展開する場所を探す。
PHP とか使わないでも、JavaScript だけでこれだけできるので面白いんじゃないかと思う。
No comments:
Post a Comment