以前导入数据的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
我最近导入单一值时也无法导入
我最近导入单一值时也无法导入,其它都没问题了只有这个日期值导入的时候有问题,问下有什么经验可以指点下不。你存储日期是专门的格式还是普通的文本格式字段?
我这里以前导入日期都是在字段设置中设成最简单的文本字段,导入是没有问题的,不知道你是设置的什么样子的字段?原始数据是什么样的?报的错是什么?