2007年10月09日18:04
もう2年以上悩んでいたことが、とりあえず解決しました。livedoorBlogの個別記事の下の方に、「同じカテゴリーの他の記事を表示する」ただそれだけのことが出来ずにずっと方法を考えていました。今回ようやくできました。
恐ろしくアナログな方法ですが(笑)。
ライブドアブログのカテゴリーは、ひとつの記事に対して二つ選ぶことができます。
ライブドアブログの独自タグで言うと、<$ArticleCategory1$>、<$ArticleCategory2$>がカテゴリー名をあらわすタグなのですが、それはわかっても、その先が進みません。
カテゴリー内の記事の一覧表示が出来ないものか、ずっと悩んでいたのです。とりあえず<$ArticleCategory1$>だけでいいから何とかならないものかと。
少し似たようなカスタマイズに、カテゴリー別ページの記事一覧というのがあるんですが、カテゴリー別ページや月別ページでは、記事を繰り返し表示する「ループタグ」というのがあって、簡単に出来るのです。
しかし、個別記事ではそのループタグが使えない。ここで2年ほど行き詰っていました。
記事の一番下にカテゴリー内の他の記事が表示されれば、興味を持ってくださった方なら、似たようなジャンルの記事を読んでくれるかもしれない。Movable Typeとかなら出来そうなのに、何でlivedoorBlogではできないんだと地団駄踏んでいました。
発想を変えると、とりあえずこのカテゴリー名をどうにかして認識して、どっかにあるカテゴリー別記事一覧を表示できないものか。
それから、もう一つ別の思惑がありました。
記事一覧をそのまま表示してしまうと、カテゴリーによってはものすごくページ内のリンクが増えてしまうのです。
出来たら、ページ内のリンクは必要以上に増やしたくない。
そうなると、選択肢はJavaScriptの一択となっていました。
(参考記事:Java scriptとリンク)
が、一択となって残ったまま、解決法がわからず、ただただ長い時間が過ぎ去っていたのです。
しかし、そうも言ってられない事態が発生しました。
ちょっと前に、サイトマップを作成したのですが、これが大誤算。
やはり他のサイトに移動してしまうような形のナビゲーションはあまり使用感が良くないらしく、ページビューは減少。
また、インターネットエクスプローラーで表示が微妙に遅いことから自分でも使いにくい(笑)という問題が発生しておりました。
そこで長年放置していたこの「同じカテゴリーの他の記事を表示する」問題を、私的には何が何でも解決しなければならなくなったのです。
前置きが長くなりましたが、方法に入ります。
まず、どうやったら、カテゴリー名の情報をJavaScriptで認識して、JavaScriptに手渡せるのか。
ついこの間PHPをはじめてみましたが、いつまでたっても相変わらず知識は進歩しておりません。JavaScriptも同じようなものでほとんどわかっていません。
今回、document.writeで文字が書けるということを学びました。
どうしていいか良くわからなかったので、質問してみました。
すると、あっさりカテゴリー名が取得できることが判明。
<IfArticleCategory1>
<script type="text/javascript">
<!--
var category1 = "<$ArticleCategory1$>";
//-->
</script>
</IfArticleCategory1>
var 変数名で変数を定義することが出来ます。
<IfArticleCategory1>は「カテゴリー1を定義していたら」というライブドアブログの条件タグです。
簡単に変数としてカテゴリー名が取得できましたが、次にどうやって記事一覧を作ればいいのか。
理想としてはカテゴリー別ページのRDF情報を取得して利用し、自動で記事一覧のリンクを作る、ということですがもちろん出来ません(笑)。
しょうがないので、手動でホームページで記事一覧のページを作りました。
ただ、カテゴリー別ページに一覧を作っていたので、ほとんどカテゴリー別ページのソースをコピペするだけですみました。メタタグで文字コードをeuc-jpで指定して、euc-jpで保存しなければいけません。
カテゴリーが60個くらいあったのは想定外でしたが(笑)。
あまりにページ数が多く、もし全ページ間違いが発見されたらどうしよう・・・と思い、必要に迫られ、Dreamweaverのテンプレートという機能を初めて使ってみました。
このテンプレート機能というものは、編集可能領域以外をテンプレートにすると、テンプレートを使用して作ったページは、テンプレートを変更すれば全てのページのテンプレート部分が変わってくれるという優れものです。
記事一覧のリスト部分のみを編集可能領域にして、60ページほど作成しました。
作ったページサンプル
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<title>タイトル</title>
<style type="text/css">
<!--
body {
width:360px;
font-size: 80%;
line-height:1.5;
}
ul {
margin:0;
padding:0;
}
ul li {
list-style-position: outside;
list-style-type: none;
margin:0;
padding:0;
}
li a{
width:330px;
margin: 0;
padding: 0 0 0 20px;
background-image: url(list-link.gif);
background-position: 0px 2px;
background-repeat: no-repeat;
text-decoration:none;
display: block;
}
li a:hover{
width:330px;
margin: 0;
padding: 0 0 0 20px;
background-image: url(list-hover.gif);
background-position: 0px 2px;
background-repeat: no-repeat;
text-decoration:underline;
}
-->
</style>
</head>
<body>
<ul>
<li><a href="http://afiliate.livedoor.biz/archives/000001.html">サンプル1</a></li>
<li><a href="http://afiliate.livedoor.biz/archives/000002.html">サンプル2</a></li>
</ul>
</body>
</html>
画像「list-link.gif」

画像「list-hover.gif」

そうして作った60ページに及ぶ記事一覧ページを、あとはカテゴリー名にあわせて表示させれば良いだけです。
しかし、その方法もまた、わからない。
JavaScriptにもifという条件分岐のコマンドがあります。
ifで条件を分岐し、カテゴリー毎に表示するHTMLを変えてカテゴリー別一覧ページを呼び出したら良いんじゃないかと考えました。
とりあえず、iframeという便利なものがあります。
(参考:いいわけジェネレーターの作り方)
document.writeでif内に直接iframeのHTMLタグを書いて呼び出すURLを変えておけば、たぶんカテゴリー名ごとに違った一覧ページが呼び出されるはず。
そういうわけで、if文とdocument.writeだけで、JavaScriptを作成しました。
内容はこんな感じ。ぐちゃぐちゃなJavaScriptです(笑)。
if (category1 == "アフィリエイト"){document.write("<div class='box'><iframe frameborder='0' src='http://サイトのアドレス/afilieito.html' width='400' height='190' marginheight='0' marginwidth='10'></iframe></div>")}
if (category1 == "まとめ"){document.write("<div class='box'><iframe frameborder='0' src='http://サイトのアドレス/matome.html' width='400' height='190' marginheight='0' marginwidth='10'></iframe></div>")}
if (category1 == "著作権"){document.write("<div class='box'><iframe frameborder='0' src='http://サイトのアドレス/chosakuken.html' width='400' height='190' marginheight='0' marginwidth='10'></iframe></div>")}
アフィリエイト、まとめ、著作権、などの部分が、自分のlivedoorBlogに実際あるカテゴリー名です。カテゴリー名に対応して、作ったカテゴリー一覧ページのアドレスをsrcの部分に入力します。
作った文字列をiframes.jsという名前でeuc-jpで保存し、アップロード。
個別記事のHTMLの記事の下の部分に下記のものを入れ込みました。
<IfArticleCategory1>
<script type="text/javascript">
<!--
var category1 = "<$ArticleCategory1$>";
document.write("カテゴリー:'" +category1 +"'内の記事<br />");
//-->
</script>
<script src="http://サイトのアドレス/iframes.js" type="text/javascript"></script>
</IfArticleCategory1>
スタイルシートに下記のものを入れ込みました。
.box {
padding:0;
margin:0;
border:solid 1px #999999;
width:400px;
}
スタイルシートを再構築した後、「投稿したブログを編集する」で個別記事のひとつを選んで、何もせずに「この内容で投稿する」 を押します。
すると、その個別記事のみが再構築されますので、うまく表示されているか確認します。
おお、表示されてる!!
表示されていれば、全ページ再構築。
カテゴリ−1を設定しているページには、うまくいけば、作った記事一覧ページが表示されます。
2年越しの悩みが一応、解決されました。
これがJavaScriptでもっとスマートに出来るようになりたいものです。
追記:すみません。大事なことを言い忘れていました。
カテゴリー別記事一覧ページや、iframes.jsをアップロードするために、レンタルサーバーを借りておくことが必要です。
レンタルサーバーが無ければこのカスタマイズは出来ません。
やりたいと思う方はほとんどいないとは思うのですが、念のため(笑)。
超大事な追記:
すみません。ものすごく間抜けな状態になっていました。

呼び出したiframeの中にあるリンクをクリックすると、iframeの中にサイトが表示されるという状態になっていました。
マジであせりました(泣)。
どうすればいいのか右往左往しましたが、以前どこかでリンクを開く際に、target="_parent"というものがあったことを思い出しました。
ひょっとしてこれは、親ウインドウにリンクを開いてくれるのではないか!?と思ってわらにもすがる思いで試したところ、
60ページに及ぶ修正を行いました。でも、Dreamweaverで結構さくさく修正できたので、楽でした。これを手動でやらなければならなかったら・・・と思うと冷や汗ものです。
各ページ、下記のように修正しました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<title>タイトル</title>
<style type="text/css">
<!--
body {
width:360px;
font-size: 80%;
line-height:1.5;
}
ul {
margin:0;
padding:0;
}
ul li {
list-style-position: outside;
list-style-type: none;
margin:0;
padding:0;
}
li a{
width:330px;
margin: 0;
padding: 0 0 0 20px;
background-image: url(list-link.gif);
background-position: 0px 2px;
background-repeat: no-repeat;
text-decoration:none;
display: block;
}
li a:hover{
width:330px;
margin: 0;
padding: 0 0 0 20px;
background-image: url(list-hover.gif);
background-position: 0px 2px;
background-repeat: no-repeat;
text-decoration:underline;
}
-->
</style>
</head>
<body>
<ul>
<li><a href="http://afiliate.livedoor.biz/archives/000001.html" target="_parent">サンプル1</a></li>
<li><a href="http://afiliate.livedoor.biz/archives/000002.html" target="_parent">サンプル2</a></li>
</ul>
</body>
</html>
変な表示がされてるなあ、と思われた方、すみません。お騒がせしました。
調子に乗って、JavaScriptを使って同様の手法で、サイドバーにカテゴリーのリンクも作りました。

アフィリエイトは儲かんないってば
