昨日に引き続き、nucleusの使っていないプラグインを使ってみよう第2弾。

今日は、NP_SEOSitemapsの巻。

これはsitemaps.orgの仕様に準拠したsitemapを作成するプラグイン。

まあ、個人的な趣味のサイトなので、別にSEO対策は特にしなくてもいいんだけどね。

ま、勉強、勉強。

plugins:seositemaps
http://japan.nucleuscms.org/wiki/plugins:seositemaps

インストール完了後、「Google ウェブマスターツール」や「Yahoo! Site Explorer」へsitemap.xmlを登録します

とにかく、sitemap.xmlを作らなきゃ話は始まらないみたい。

ググってみると、いやあ、あるもんだねえ。

XML Sitemap Generator and Editor
http://www.sitemapdoc.com/Default.aspx

このサイトでは、自分のサイトのURLを入力するだけでsitemap.xmlを自動的に作ってくれるスグレモノ。
(ただし、“Max entries in sitemap = 500”との文言が、、、)

英語サイトだけど、操作は非常に簡単。

ただ、時間がかかるのでぼおっと待った。

5分くらい?で作成完了。

作成されたsitemap.xmlをダウンロードして、ルートディレクトリにポン!

これで、OK。

あとは、“Google ウェブマスターツール”と“Yahoo! Site Explorer”にそれぞれ登録・通知する必要がある。

“Google ウェブマスターツール”は日本語サイトなので特に不便はなくスムーズに事は進んだ。

問題は“Yahoo! Site Explorer”。これが米国版しかない。

日本版も2008年5月に提供開始したのにも関わらず、2010年末にあっさりサービス終了してやんの。

なんでも、Yahoo!がGoogleの検索エンジンを採用することが決定したことにより、本サービスを継続する理由がないためらしい。

少なくとも2012年までは米国版Yahoo! Site Explorerは利用できる見込みらしいが、“Googleだけで十分じゃね?”と思ってしまう。

まあ、一応登録はしたけどね、英語に苦労しながら。

んで、さっきの“XML Sitemap Generator and Editor”に話が戻るが、こいつのまたエライところは、xml版だけじゃなくてhtml版のサイトマップまで吐き出してくれやんの。

今まで“のぬけす”サイトのサイトマップは各カテゴリーのトップページ(index.php)へのリンクのみという、あってないような気休め程度の代物だったが、この際だからブログのエントリも全部サイトマップに書いてやろうかと思った。

ただ、ブログを更新する度にサイトマップをいちいち手書きで修正していくのもアホらしい。

我らがnucleus様は、ブログの全データをmySQLに保存してくれているので、phpからmySQLにアクセスして自動的にサイトマップを作成することに決定。

作業は意外とすんなりと進んだ。

以下、ブログ記事のサイトマップを自動生成する関数。

function createSitemap($x)
{
  global $db;
  global $path;

  $conn = mysql_connect($db['host'],$db['user'],$db['pass']);
  mysql_set_charset('utf8');
  $select = mysql_select_db ($db['dbname']);

  if($x == "construction"){
    $blog_id = "2";
  }elseif($x == "beetles"){
    $blog_id = "3";
  }elseif($x == "hanako"){
    $blog_id = "4";
  }

  $tblname = "nucleus_plug_customurl";
  $sql = "SELECT * FROM {$db['dbname']}.{$tblname} WHERE `obj_bid` = '{$blog_id}' ORDER BY `obj_name` DESC";
  $res = mysql_query($sql,$conn);

  $item_id = "";
  $category_id = "";
  $item_array = array();
  $category_array = array();

  while($row = mysql_fetch_assoc($res))
  {
    if($row['obj_param'] == "item"){
      $item_id = $row['obj_id'];
      $item_array[$item_id]['name'] = $row['obj_name'];
    }elseif($row['obj_param'] == "category"){
      $category_id = $row['obj_id'];
      $category_array[$category_id] = $row['obj_name'];
    }
  }

  $tblname = "nucleus_item";
  $sql = "SELECT * FROM {$db['dbname']}.{$tblname} WHERE `iblog` = '{$blog_id}'";
  $res = mysql_query($sql,$conn);

  $item_id_array = array_keys($item_array);
  $item_id = "";
  $category_id = "";

  while($row = mysql_fetch_assoc($res))
  {
    if(in_array($row['inumber'],$item_id_array)){
      $item_id = $row['inumber'];
      $category_id = $row['icat'];
      $item_array[$item_id]['title'] = $row['ititle'];
      $item_array[$item_id]['time'] = $row['itime'];
      $item_array[$item_id]['category'] = $category_array[$category_id];
    }
  }

  $num = count($item_array);
  $count = "";
  foreach($item_array as $v)
  {
    ++$count;
    if($count == $num){
      $class = "bottom2";
    }else{
      $class = "joint2";
    }
    
    list($year,$month,$day,$time,$minute,$second)=sscanf($v['time'],"%d-%d-%d %d:%d:%d");
    $date = "(".$year."年".$month."月".$day."日)";
    
    print "        <li class=\"".$class."\"><a href=\"{$path}{$x}/".$v['category']."/".$v['name']."\">".$v['title']."</a>".$date."</li>\n";
  }

  mysql_close($conn);

}

ただ、ブログの記事が現時点で100件以上になるため、異様に縦長なサイトマップになってしまった、、、

これだと不格好なので、ブログの記事だけ“折りたたみ式”にすることに。

そんなときのための、jQueryです。

またまた、ググってみた。

エフェクト操作:スライディング:slideToggle()の使用例 | jQuery
http://phpjavascriptroom.com/exp3.php?f=include/ajax/jquery_effects_sliding/jquery_effects_slidetoggle_exp2.inc

jQueryでリストを開閉させたい
http://redline.hippy.jp/lab/misc/jquery_1.php

いやあ、ホントにありがたい。

皆さんがウェブ上で色々なサンプルを紹介していただいているので、助かります。

上記2サイトの記事を参考に、リスト折りたたみのJavaScriptを作成。

print "    <li class=\"marker\"><a href=\"{$path}beetles/\">カブトムシ飼育の紆余曲折</a> [<span class=\"entry1\">エントリの一覧を以下に表示しています</span>]</li>\n";
print "    <li class=\"second\">\n";
print "      <ul class=\"entrylist01\">\n";

// createSitemap(category)関数
createSitemap('beetles');

print "      </ul>\n";
print "    </li>\n";

このhtml(つかphpだけど)に対して、

$(document).ready(function() {
  $("span.entry1").text("エントリを展開/格納する");
  $("span.entry1").css("color","#0000FF");
  $("span.entry1").css("text-decoration","none");
  $("span.entry1").hover(function(){
    $(this).css("cursor","pointer");
    $(this).css("color","#0000FF");
    $(this).css("text-decoration","underline");
  },function(){
    $(this).css("cursor","default");
    $(this).css("color","#0000FF");
    $(this).css("text-decoration","none");
  });
  $("ul.entrylist01").css("display","none");
  $("span.entry1").click(function(){
    $("ul.entrylist01").slideToggle("slow");
    $("ul.entrylist01").css("display","block");
  });
});

を記述すればよい。

素晴らしい。

これで、スッキリしたサイトマップになった。

よかったら、ご覧くださいませ。

http://www.nonukes-maria.net/sitemap/

今日も頑張った。

気持ちよく、寝よう。