Tag Cloud 和 META Keywords

發表於 | 9.09.2009 | 無回應

原本想說工程會蠻浩大的... 但實做後, 還好, 調整一下資料表的對應, 再使用 array, 便產生了預期中的標籤雲

雖說本機沒使用資料庫, 但基本上資料的儲存蠻類似 Berkeley DB

首先, 網誌有一張表簡單紀錄所有文章的指標, 我稱之為 indicator

原本第一個念頭是動到各貼文的 schema... 這也是我所謂的工程浩大

不過一覺醒來後, 靈光乍現, 新增一個標籤欄位, 將資料與 indicator 並存, 有了關連, 又不必動到其他資料

這是一個好的開始



OK, 標籤的資料格式定義為 標籤1,標籤2,標籤3

標準的以半形逗號間隔, 也方便產生 META 的 Keywords

接者取出標籤同時作成兩個 array

一個紀錄各組標籤與其貼文的 index association, 以 indicator 為 key... 作為各網誌標籤的標示, 定義為 $tagcloud

一個紀錄所有標籤並以各標籤的統計數量為 value... 作為標籤雲的產生, 定義為 $tagclouds



標籤雲的排列, 我試了 ksort, krsort, asort, arsort

但因為我的標籤是以群組的格式存在, 在作成 array 的當下
如果權重(頻率值)一樣, 其 index association 的便會順序存在

導致如何的排序, 總是打不散

於是改採 array_rand 的作法

而 array_rand 是對一組特定 range 內的數目作成一個隨機陣列$clouds = array_rand($tagclouds,count($tagclouds));於是我得到了一個經過隨機處理過的陣列, 其 value 值便是標籤

經由 $clouds = array($key,標籤); 再關連 $tagclouds = array(標籤,$value);

這就是我的標籤雲



META 的 Keywords 就更容易了... Keywords 數量不需(宜)太多, 就網誌的首頁而言, 我只需要前十名的標籤

於是先排序 $tagclouds (arsort), 針對 $tagclouds 的 array_keysarray_slice 出 TOP 10arsort($tagclouds);
$keywords implode(",",array_slice(array_keys($tagclouds),0,10));
echo 
"<meta name=\"Keywords\" content=\"".$keywords."\">\n";

回應

建立迴響