您在這裡

Drupal網站中多值字段的預處理和Feeds導入

James Qi 在 2015年11月23日 - 17:26 發表

  以前導入數據的Drupal網站中字段基本上都是唯一值的,設置、處理、導入都很簡單,隻要有需要導入的csv文件,在Feeds模塊中設置對應關系,然後導入就可以。

  也曾經在少數某些網站考慮過多值數據的導入,不僅僅是某一個字段的多值,而是一組多值,例如下面的field_x_y:

title
body
field_1 這裡面隻有一個值,類似一個數字
field_n 這裡面有多個值,類似一個一維數組
field_x_y 這裡面有x個子字段,每個子字段有y個值,類似一個二維數組

  這種二維數組的總字段是沒有對應的類型可以設置的,可以考慮兩種方式來實現:

  1. 安裝一個field collect模塊,可以在一個内容類型中添加多個collection的字段(每個這種字段可以定義為隻有一個值或者n個值、無限值),然後每個這種字段可以關聯n個“子字段”(每個子字段也可以定義為隻有一個值或者n個值、無限值),子字段可以是各種數字、文本等類型甚至還可以嵌套collection類型的字段,非常靈活,但也容易把人搞糊塗
  2. 設置多個字段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數組,達成希望的顯示效果。

回應

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。