昨天用 backlinks 的時候出了一點問題,花了不少時間才解決(雖然最後發現其實很簡單 -_- )。雖然不知道版上有沒有在用 backlinks,可能也不會有人遇到這種白痴問題,不過還是分享一下心得,或許正好有人需要呢。 ^_^
先介紹一下 backlinks。他的功用是「往回連結」。比方說我們從網頁 A 超連結到 B,如果使用 backlinks 的話,就會在 B 那邊有一個超連結連回 A。他原本是一個模組,後來被含進 views 模組裡,只要安裝 views ,然後啟動(enable)backlinks 這個 view 就可以用了。預設有兩種模式,用 tab 呈現的和用 block 呈現的。
順便說一下用 backlinks 大概一定會遇到的問題:剛做好的連結是沒有用的,一定要跑過 cron 之後 backlinks 才會發揮作用。因為 backlinks 是利用 search 模組所做的索引來發揮作用的。所以要跑過 cron ,建立過索引之後才能夠正常顯示。
backlinks 是我的網站設計裡很重要的一部份。所以我昨天用 pathologic 模組搞定站內連結之後,想要試試看 backlinks 還能不能用,是否相容。一試之下大驚:我在網頁 A1、B1 互相做了連結,照理說在 A1 的 backlinks 會出現 B1,在 B1 的 backlinks 會出現 A1,結果居然只有 A1 的有出現,B1的沒有出現!!
因為 A1、B1 兩頁在我的網站中正好屬於兩個不同的 content type ,所以我很自然地就想到是不是 views 那邊的設定沒有勾選到其中一個 content type。在那邊看了很久之後還是搞不定。我又做了另外的兩個網頁來測試。結果 A1 和 A2 互連沒有問題,B1 和 B2 互連也沒有問題,A2 和 B2 互連則是 A1、B1 同樣的狀況:A2 的有出現、B2 的沒有。不管怎麼測試、怎麼改設定、怎麼拜 google 大神都沒有用。(不過對 views 摸得比較熟了,也算是有收穫。)。後來看到某一篇文章說,可以去看看資料庫裡 search 建立的索引。我從來沒有想過可以去看資料庫(其實我懂一點資料庫,但裝 drupal 之後就覺得資料庫部分 drupal 會搞定,我不需要去看),看了之後發現沒有想像中複雜,雖然表格很多,但還是很快就照名稱找到 search 建立的索引了。果然在資料表中很明顯:B1 連 A1、B2 連 A2 的連結都有出現在資料表中,A1 連 B1、A2 連 B2 的連結並沒有被索引到。所以問題就比較明確了,不是 views 的問題,而是 search 建立索引的時候的問題。那要怎麼修改呢?因為時間已晚,同事都要下班了,我只能放下找到一半的資料收拾下班。
回家的路上,突然想到資料表裡的資料呈現方式,不禁在車上大呼:『不會是這種白痴問題吧!!!』捱到今天早上上班的時候試了一下,果然就是這個白痴問題。
在資料表裡頭,有幾個欄位記載哪個 node id 連到哪個 node id ,最後還有一欄是記載超連結的文字,但文字並不是原始的文字,而是被拆成三個字、三個字的詞。我昨天回家路上突然想到,我在 A1、A2 做連結用的文字都剛好是兩個字的,會不會是因為字數太短沒有被抓進去呢?結果果然就是這個問題。比方說我在 A1 裡寫下「堆肥」做超連結到 B1,就不會發揮作用。如果用「堆肥原理」、「測試堆肥」、甚至「堆肥的」來做超連結,backlinks 就運作很正常。(所以其實跟 content type 也是一點關係都沒有。)知道問題之後就很簡單,把超連結文字修改一下就好了。不過這樣治標不治本,怎麼知道以後寫文章的人不會用兩個字來做連結呢?
再搜尋了一下,發現許多文章都說『drupal 要能夠正常搜尋中文,請把最小索引字詞長度從3調成2』,這個建議果然是歷久彌新,在 drupal 7 的現在還是適用。而且其實不只是 search,backlinks 也會被這個設定影響喔! ^_^