相信很多人都遇到了這件事情,從 TC 把資料匯出之後,再匯入其他(或是原來)的 TC 的時候,鏈結全部都不見了,只剩下一個鏈結而已。這件事情,從 TC 1.7 推出之後就已經存在,而,這個錯誤並不單純只是程序上的錯誤,而是整個資料結構上的錯誤,老實說,我覺得 TC 團隊會出這樣的錯誤實在是該打屁股了。

我們先來看看 tc_Links 這個資料表:
[code]
/// setup.php Line 1319

CREATE TABLE {$_POST['dbPrefix']}Links (
  pid int(11) NOT NULL default '0',
  blogid int(11) NOT NULL default '0',
  id int(11) NOT NULL default '0',
  category int(11) NOT NULL default '0',
  name varchar(255) NOT NULL default '',
  url varchar(255) NOT NULL default '',
  rss varchar(255) NOT NULL default '',
  written int(11) NOT NULL default '0',
  visibility tinyint(4) NOT NULL default '2',
  xfn varchar(128) NOT NULL default '',
  PRIMARY KEY (pid),
  UNIQUE KEY blogid (blogid,url)
) $charset;
[/code]
眼尖的人可以看到,有兩個關鍵欄位,pid 與 id,而這兩組關鍵欄位,pid 是主鍵,兩欄位都沒有設定 auto_increment,至於為什麼不設定,這一點我也不知道。既然他沒有設定 auto_increment 這個附加條件,那麼,我們再來看看當資料轉出(匯出)時,他的格式:
[code]
/// 僅節錄 Links 匯出的部分

<link><url>http://nzma.ushiisland.net/</url><title>NZMA::STUDIO VOICE R&amp;W</title><feed></feed><registered>1212398140</registered></link>
<link><url>http://fusionism.blogspot.com/</url><title>Fusionism Art</title><feed>http://fusionism.blogspot.com/feeds/posts/default</feed><registered>1212398085</registered></link>
<link><url>http://blog.xuite.net/nzma/diary</url><title>在草原的中心‧不存在的騎士</title><feed>http://blog.xuite.net/nzma/diary/rss.xml</feed><registered>1212560707</registered></link>

/// 後略...
[/code]
由這樣的匯出資料,我們可以猜到 id 與 pid 並沒有在他的匯出清單中,也就是說,這兩項值將來可以在匯入的時候,依照 migrational 的設定(true or false)來決定是否覆寫原來的資料。這種情況在分類的部分也可以看出端倪,分類匯出時,也沒有帶入 id 這項設定:
[code]
/// 僅節錄 Category 匯出的部分

<category><name>Chats</name><priority>1</priority>
    <category><name>Moblog</name><priority>39</priority></category>
    <category><name>blahblah</name><priority>40</priority></category>
    <category><name>nothing else</name><priority>41</priority></category>
    <category><name>funny</name><priority>42</priority></category>
    <category><name>note note note</name><priority>43</priority></category>
    <category><name>dark cooking</name><priority>44</priority></category>
</category>
<category><name>Life</name><priority>2</priority></category>
<category><name>Photography</name><priority>3</priority></category>

/// 後略...
[/code]
所以,在匯入與匯出這個部分,其實在程序上並沒有太大的問題。接著我們轉向 TC 的核心原件(Components)來看看。當 TC 在做匯入與匯出時,使用的原件是以 Data 為命名規則的所有原件庫,所以,在調用資料庫的動作時,全部都是以個別的原件庫去完成。那,我們就來看看 Textcube.Data.Link.php 到底做了甚麼事:

展開 Textcube.Data.Link.php 原始碼...

我在這裡簡單的說明一下,當使用者匯出資料時,會使用到 Link->open()、Link->shift() 與 Link->close() 把每一筆資料都寫成 TTXML 格式並寫入匯出檔案裡。這裡有一個問題:

早在 TC 1.7 就有鏈結分類功能,匯出時並未將分類匯出。

再來,第二個就是匯入。我剛剛已經說過,他應該會仿造 Category 的模式,將鏈結匯入,但是,仔細拆解 Link 類別之後,發現了兩個嚴重問題:

整個類別功能沒有因為資料結構修改而做修正,缺了 pid、id 以及 category 檢查。
在 add() 時,因為結構與匯出資料結構不符,導致匯入資料的 pid 以及 id 永遠為 0。

這也就是為什麼,鏈結匯入時,永遠只有一個鏈結的主因。我目前依照這個狀況修改了這個類別檔案,這個檔案可以用在 TC 1.7.x 版本上,請直接覆蓋掉原來的檔案。檔案請到 Google Code 下載。


http://code.google.com/p/tczh/downloads/list
Writer profile
author image

Posted by hina

2009/03/05 16:40 2009/03/05 16:40
, , Keyword Textcube, , , , ,
Response
No Trackback , 3 Comments
RSS :
http://textcube.tw/rss/response/42

Trackback URL : 無法向此文章發送引用

Comments List

  1. SODA 2009/03/11 18:10 # M/D Reply Permalink

    谢谢 已经用到.

  2. 三洋服務站 2010/07/22 16:34 # M/D Reply Permalink

    挺複雜的耶!我都不會用啦。

  3. 蘇梅島旅遊 2010/07/24 14:41 # M/D Reply Permalink

    我也遇到過這樣的問題,解決了啦!

Leave a comment
[登入][OpenID是?]

블로그 이미지

Textcube 非官方 正體中文部落格 2009年!社群大改造! 「本站所有正體中文化之相關程式,歡迎大家使用或重製,但請註明來源處,Thanks !」

- Chieh™

使用者插入圖像

Calendar

«   2010/07   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Site Stats

Total hits:
207275
Today:
187
Yesterday:
341

ジャンパチ会館 パチンコ パチスロ オンラインカジノ
BlackBet.Jp 日本語オンラインスポーツブック 日本野球 NBA バスケットボール MLB メジャーリーグプロ野球