2010年11月17日 星期三

Blogger 支援樹狀結構多層次標籤 (更新)

原來舊版本有個問題
像下面這樣


明明休閒下面只有一個分類
但是休閒這個根目錄會把下面所有子目錄的文章總和加總

應該根目錄要顯示的是下面的子分類目錄數量
子分類數目到最底層才顯示文章數量



當初數量是從 Blogger api 擷取出來的
所以要達成這個目標(根目錄要顯示的是下面的子分類目錄數量)
我們自己補充算法

紅字體是跟舊 code 比新增的程式
function TAG(label, id, sid, pid, subdir_count, count, url)
{
   this.label = label;
   this.id = id;
   this.sid = sid;
   this.pid = pid;
   this.subdir_count = subdir_count;
   this.count = count;
   this.url = url;
}
   
var tag = new Object();
var id = 0;
function add_Tag(tagString, count, url, dir)
{
   var seq_id = 0;
   var pre_id = 0;
   var re_all = new RegExp("\\[(.+)\\]","g");
   var re_array = new RegExp("\\[(.+?)\\]","g");
   var m_all = tagString.match(re_all);
   var m_array = tagString.match(re_array);

   for (arrayNumber in m_array) // 抓取現在 add_Tag 每一個[分類]
   {
      var same = 0;
      for (labelNumber in tag) // 抓取已經紀錄的[分類]
      {
         if (tag[labelNumber].label == m_array[arrayNumber]) // 檢查是不是已經有此[分類]在紀錄中
         {
            // 連 id 也要檢查 避免在不同整體分類中有相同的[分類]名稱 例如 [A][B] 跟 [C][A] 中的 [A] 是不同的分類
            if (tag[labelNumber].sid == seq_id)
            {
               same = 1;
               pre_id = tag[labelNumber].id;
               tag[labelNumber].subdir_count++;
               tag[labelNumber].count += parseInt(count);
            }
         }
      }
      if (!same) // 新增[分類]
      {
         id++;
         tag[id] = new TAG(m_array[arrayNumber], id, seq_id, pre_id, 1, parseInt(count), "");
         pre_id = id;
      }
      seq_id++;
   }
   id++;
   if (m_array == null) // 是不是連[分類]都沒有
   {
      tag[id] = new TAG(tagString, id, seq_id, pre_id, 0, parseInt(count), url);
   }
   else
   {
      var final_tag = tagString.substring(m_all[0].length,tagString.length);
      tag[id] = new TAG(final_tag, id, seq_id, pre_id, 0, parseInt(count), url);
   }
}


顯示的部份要整個新增

把原來的
for (personNumber in tag) {
d.add(tag[personNumber].id, tag[personNumber].pid, tag[personNumber].label+"("+tag[personNumber].count+")", tag[personNumber].url);
}

換成
for (personNumber in tag)
{
   if (tag[personNumber].subdir_count == 0)
      d.add(tag[personNumber].id, tag[personNumber].pid, tag[personNumber].label+"("+tag[personNumber].count+")", tag[personNumber].url);
   else
      d.add(tag[personNumber].id, tag[personNumber].pid, tag[personNumber].label+"("+tag[personNumber].subdir_count+"/"+tag[personNumber].count+")", tag[personNumber].url);
}



這樣就完成了

3 則留言:

  1. 你要配合前面一篇看
    如果還有不知道如何修改的可以回覆給我

    回覆刪除
  2. 你好,我將您的兩個網站內容整理一下放在我的Blog裡

    先跟您報備一下,如果不行我再刪除,謝謝。
    http://novathinking.blogspot.com/2011/07/blogger_05.html

    回覆刪除

開放匿名留言 請大家注意網路禮儀