当前位置

Drupal网站中多值字段的预处理和Feeds导入

James Qi 在 2015年11月23日 - 17:26 提交
内容摘要:以前导入数据的Drupal网站中字段基本上都是唯一值的,设置、处理、导入都很简单,只要有需要导入的csv文件,在Feeds模块中设置对应关系,然后导入就可以。 也曾经在少数某些网站考虑过多值数据......

  以前导入数据的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标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符