以前導入數據的Drupal網站中字段基本上都是唯一值的,設置、處理、導入都很簡單,隻要有需要導入的csv文件,在Feeds模塊中設置對應關系,然後導入就可以。
也曾經在少數某些網站考慮過多值數據的導入,不僅僅是某一個字段的多值,而是一組多值,例如下面的field_x_y:
title body field_1 這裡面隻有一個值,類似一個數字 field_n 這裡面有多個值,類似一個一維數組 field_x_y 這裡面有x個子字段,每個子字段有y個值,類似一個二維數組
這種二維數組的總字段是沒有對應的類型可以設置的,可以考慮兩種方式來實現:
- 安裝一個field collect模塊,可以在一個内容類型中添加多個collection的字段(每個這種字段可以定義為隻有一個值或者n個值、無限值),然後每個這種字段可以關聯n個“子字段”(每個子字段也可以定義為隻有一個值或者n個值、無限值),子字段可以是各種數字、文本等類型甚至還可以嵌套collection類型的字段,非常靈活,但也容易把人搞糊塗
- 設置多個字段field_x1,field_x2...field_xn,每個字段可以有多值value_y1, value_y2... value_yn,這樣來實現x_y組合的二維數組,如果是我們這樣數據是一次性導入、以後改動也不多的話,就用普通字段輸入多個值,是最簡單易行的辦法
後來把找到的field collection方式基本上否決了,那個模塊産生的數據結構不了解,數據導入都還不知道如何編寫php程序,顯示模闆也不知都如何修改。确定上面的方式後,還要解決數據導入的問題,去網上搜索“drupal import multi value”,找到一個叫Feeds Tamper的插件,可以對導入的數據在保存前做各種邏輯定義的預處理,這裡面的多值導入對我們正合适,可以免除自己編寫程序調用API來創建node的工作。
但原始數據還不能直接導入,需要自己編寫一個PHP小程序進行預先處理,把分别放在多行的多值根據共同的特征合并到一行中,因為每個網站的需求不同、來源數據不同,這裡就不寫具體程序了,隻寫幾個步驟:
- 程序初始化、數據定義
- 第一步:讀入輸入文件,保存到一個帶有唯一特征字段的中間數組
- 第二步:對中間數組進行排序,讓帶有同一特征字段的内容放在一起以便進一步處理
- 第三步:對中間數組循環讀取,把帶有同一特征字段的内容合并成一行,并輸出保存
- 程序結束
導入後可以根據需要修改node-xxx.tpl.php顯示模闆來展開保存的x_y數組,達成希望的顯示效果。
评论2
我最近導入單一值時也無法導入
我最近導入單一值時也無法導入,其它都沒問題了隻有這個日期值導入的時候有問題,問下有什麼經驗可以指點下不。你存儲日期是專門的格式還是普通的文本格式字段?
我這裡以前導入日期都是在字段設置中設成最簡單的文本字段,導入是沒有問題的,不知道你是設置的什麼樣子的字段?原始數據是什麼樣的?報的錯是什麼?