如何使用Feeds模块导入CSV文件
Feeds模块的灵活使用会起到事半功倍的作用,特别是当需要输入大量有规律的数据时,是否能正确使用Feeds模块直接决定你的生产力!由于Drupal的数据库结构比较复杂,很多情况下一个实体的字段不像其他系统,分散在多个数据库表,单纯的直接通过数据库导入某个实体的数据是不大可能的。本文介绍如何通过Feeds的界面和Feeds模块提供的API实现批量导入某个分类下的词汇。
【场景】
例如我们需要实现以下内容
居委会(用于物流)------------ 分类名
某区名A ------------ 术语名
居委会A ------------ 子术语名 (同时这个子术语具有以下字段)
(居委会的自定义字段:详细地址,电话,联系人)
步骤1:如图创建分类名称
步骤2:如图创建自定义字段
这样我们就创建了我们需要导入的分类和其所属的术语实体结构。
【Feeds的导入功能】
如果我们现在有几百个居委会的联系方式,按照Drupal的术语创建界面一一输入的话,估计要花费一些时间才能完成,这个时候就需要利用feeds模块的导入功能创建我们自己自定义的模块来实现,当你看完这篇文章后,你基本上就可以在10分钟之内完成Drupal程序芳年的准备工作了。(准备CSV数据不算在内)
步骤3:Feed界面的相关准备工作
通过地址栏admin/structure/feeds如图打开Feeds的设置界面。单击【Add importer】
步骤4:通过前一个步骤我们假设创建了一个名称为【import community】的Feeds。如图进入它的配置界面。
在左侧第一个的基本设置中我们需要对它进行本次实现场景的必要设置。图中红色标识是要点。
步骤5:feeds-提取器的设置。
由于我们是通过上传CSV文件实现导入的功能,如图进行设置
步骤6:feeds-文件上传的设置。如图,标识为要点。
步骤7:feeds-解析器的设置
由于我们要上传的文件是CSV格式的,其解析器如图进行设置。
步骤8:feeds-CSV parser定界符
如果CSV文件中每个字段的值是以逗号分隔,如图进行设置。
步骤9:feeds-Processor的设置
这里是选择我们导入的CSV是Drupal中我们定义的哪个实体,feeds默认提供了这三种。
很显然我们要选择Taxonomy term processor。
步骤10:feeds-Taxonomy term processor的设置
根据前一步骤的设置,对Taxonomy term processor进行必要设置。
如图,词汇表中下拉框选择我们目标导入的分类名。
其他设置如图所示即可,其中更新已有的分类可根据你的需要进行选择。
步骤11:feeds-CSV的映射
这一步是最重要的设置。我们要针对CSV中的字段值和Drupal中的目标术语进行关联。
图中A区域是CSV中的字段名,B区域就是drupal中术语中的字段名。
下图为准备的CSV数据示范。我们通过输入CSV字段的名称和C区域的选项来配置他们的映射关系。
箭头所指行为CSV中的字段名称,这一行被称为head。
其他的行均为对应的值。(示例中第二行为0的相当于区的名称,其仅有名称而已)
CSV中 术语中
Area ----------------》 父术语名
Index ----------------》 权重(即术语中的上下顺序)
Name ----------------》 术语名(本例为居委会名)
Address ----------------》 地址字段
Tel ----------------》 联系电话字段
Contact ----------------》 联系人字段
步骤11:生成feeds的代码
如图所示复制所有生成的代码,我们需要利用Feeds的API创建一个自定义模块。
步骤12:撰写模块
自定义模块的流程,请参考Drupal官方的规定。
即创建模块名称的文件夹到/sites.all/module/下,并创建info和module文件。
假设我们的模块名为custom,其路径为sites/all/module/custom,文件为custom.info和custom.module.
下面主要描述custom.module.的写法。
需要用到2个hook,
hook_feeds_importer_default()和hook_ctools_plugin_api()。
代码如下,图中$export['import_community'] = $feeds_importer;中的import_community需要替换成你自己的feed id。他的值可以生成代码的第4行$feeds_importer->id = 'XXXXXXXX';中可确认到。
function custom_feeds_importer_default() {
//此处粘贴生成的代码
...........................
..........................
//在上图代码之外添加以下两行
$export['import_community'] = $feeds_importer;
return $export;
}
function custom_ctools_plugin_api($owner, $api) {
if ($owner == 'feeds' && $api == 'feeds_importer_default') {
return array('version' => 1);
}
}
自定义模块编写OK!就这么简单,让我们看看Feed后台的界面吧。(别忘了清除drupal的缓存)
如图我们自定义的feed名称已经生成,点击上图的import连接,开始执行导入。
步骤12:执行导入
如图单击我们自定义的Feed名称。
下图是选择导入文件的界面,图中还给出了根据我们的设置自动生成的CSV模板文件,此文件便于我们交给数据准备人员。其他的操作基本上很简单了,上传CSV文件执行导入!完工。
最终效果图
辛苦了 不错的案例,