Bloggerに「タイトルで検索」ボタンを付ける

私はBloggerでもひとつBlogを運営しています。毎日、本や漫画、CDなど、なんらかについて適当に書いているのですが、同じものについて複数の記事がある場合、それをなんとか読者に知らせる方法はないものかとずっと思っていたのです。後に書いたものなら、過去の記事にリンクしておけばいいのですが、その逆、新しく記事を書くたびに過去の記事を編集するというのは面倒です。トラックバックを送るというのも手かも知れませんが、私はBloggerではトラックバックを用意していないから、それも無理。期待していた「Links to this post」も、自Blogからのリンクには働きません。がっかりでした。

てなわけで、関連記事を検索するためのボタンを用意してやることにしたのでした。私は記事タイトルに、そのものの名前を使っていますから、文書名を取得して、そこからBlog名を除いたものを検索キーワードにするとよさそうです。

というわけで、書いてみました。

<!-- topic search script -->
<div class="topic_search_script">
  <script type="text/javascript">
  var sitename = 'こととねお試しBlog';
  var query = 'http://kototone.blogspot.com/search';
  var pagename = document.title;
  var targetname = pagename.substr(sitename.length + 2, pagename.length - sitename.length - 2);

  document.write('<form action="' + query + '" method="get">');
  document.write('<input name="q" type="hidden" value="' + targetname + '"/>');
  document.write('<p><input type="submit" value="&quot;' + targetname + '&quot; を検索" /></p>');
  document.write('</form>');
  </script>
</div>

ただ、これをそのままBloggerのテンプレートに書いても動作しないので、次のようにします。

<!-- topic search script -->
<b:if cond='data:blog.pageType == &quot;item&quot;'>
  <div class='topic_search_script'>
    <script type='text/javascript'>
    var sitename = &#39;こととねお試しBlog&#39;;
    var query = &#39;http://kototone.blogspot.com/search&#39;;
    var pagename = document.title;
    var targetname = pagename.substr(sitename.length + 2, pagename.length - sitename.length - 2);

    document.write(&#39;&lt;form action=&quot;&#39; + query + &#39;&quot; method=&quot;get&quot;&gt;&#39;);
    document.write(&#39;&lt;input name=&quot;q&quot; type=&quot;hidden&quot; value=&quot;&#39; + targetname + &#39;&quot;/&gt;&#39;);
    document.write(&#39;&lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;&amp;quot;&#39; + targetname + &#39;&amp;quot; を検索&quot; /&gt;&lt;/p&gt;&#39;);
    document.write(&#39;&lt;/form&gt;&#39;);
    </script>
  </div>
</b:if>

これで、簡単に関連記事を検索できるようになりました。ちょっとだけ満足です。ただ、問い合わせ先uriをqueryって変数に入れるのは変だなあ。なんとかしたかったけど、ちょっといい名前が思い付きませんでした。