跳转到主要内容
phpartisan 提交于 8 April 2015

如何使用Feeds模块导入CSV文件

 

Feeds模块的灵活使用会起到事半功倍的作用,特别是当需要输入大量有规律的数据时,是否能正确使用Feeds模块直接决定你的生产力!由于Drupal的数据库结构比较复杂,很多情况下一个实体的字段不像其他系统,分散在多个数据库表,单纯的直接通过数据库导入某个实体的数据是不大可能的。本文介绍如何通过Feeds的界面和Feeds模块提供的API实现批量导入某个分类下的词汇。

 

【场景】

例如我们需要实现以下内容

居委会(用于物流)------------ 分类名

   某区名A       ------------ 术语名  

     居委会A     ------------ 子术语名 (同时这个子术语具有以下字段)

     (居委会的自定义字段:详细地址,电话,联系人)

 

步骤1:如图创建分类名称

tu_pian_1.png

步骤2:如图创建自定义字段

tu_pian_2.png

 

 

这样我们就创建了我们需要导入的分类和其所属的术语实体结构。

 

【Feeds的导入功能】

如果我们现在有几百个居委会的联系方式,按照Drupal的术语创建界面一一输入的话,估计要花费一些时间才能完成,这个时候就需要利用feeds模块的导入功能创建我们自己自定义的模块来实现,当你看完这篇文章后,你基本上就可以在10分钟之内完成Drupal程序芳年的准备工作了。(准备CSV数据不算在内)

步骤3:Feed界面的相关准备工作

通过地址栏admin/structure/feeds如图打开Feeds的设置界面。单击【Add importer】

tu_pian_3.png

步骤4:通过前一个步骤我们假设创建了一个名称为【import community】的Feeds。如图进入它的配置界面。

在左侧第一个的基本设置中我们需要对它进行本次实现场景的必要设置。图中红色标识是要点。

tu_pian_4.jpg

 

步骤5:feeds-提取器的设置。

由于我们是通过上传CSV文件实现导入的功能,如图进行设置

tu_pian_5.png

步骤6:feeds-文件上传的设置。如图,标识为要点。

tu_pian_6.png

 

步骤7:feeds-解析器的设置

由于我们要上传的文件是CSV格式的,其解析器如图进行设置。

tu_pian_7.png

 

步骤8:feeds-CSV parser定界符

如果CSV文件中每个字段的值是以逗号分隔,如图进行设置。

tu_pian_8.png

步骤9:feeds-Processor的设置

这里是选择我们导入的CSV是Drupal中我们定义的哪个实体,feeds默认提供了这三种。

很显然我们要选择Taxonomy term processor。

tu_pian_9.png

 

步骤10:feeds-Taxonomy term processor的设置

根据前一步骤的设置,对Taxonomy term processor进行必要设置。

如图,词汇表中下拉框选择我们目标导入的分类名。

其他设置如图所示即可,其中更新已有的分类可根据你的需要进行选择。

tu_pian_11.png

步骤11:feeds-CSV的映射

这一步是最重要的设置。我们要针对CSV中的字段值和Drupal中的目标术语进行关联。

图中A区域是CSV中的字段名,B区域就是drupal中术语中的字段名。

tu_pian_12.png

 

下图为准备的CSV数据示范。我们通过输入CSV字段的名称和C区域的选项来配置他们的映射关系。

tu_pian_13.png

 

箭头所指行为CSV中的字段名称,这一行被称为head。

其他的行均为对应的值。(示例中第二行为0的相当于区的名称,其仅有名称而已)

CSV中                术语中

Area   ----------------》  父术语名

Index  ----------------》   权重(即术语中的上下顺序)

Name  ----------------》  术语名(本例为居委会名)

Address ----------------》  地址字段

Tel    ----------------》  联系电话字段

Contact ----------------》  联系人字段

 

步骤11:生成feeds的代码

如图所示复制所有生成的代码,我们需要利用Feeds的API创建一个自定义模块。

tu_pian_14.png

 

 

步骤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连接,开始执行导入。

tu_pian_15.png

 

步骤12:执行导入

如图单击我们自定义的Feed名称。

tu_pian_16.png

 

下图是选择导入文件的界面,图中还给出了根据我们的设置自动生成的CSV模板文件,此文件便于我们交给数据准备人员。其他的操作基本上很简单了,上传CSV文件执行导入!完工。

tu_pian_17.png

 

最终效果图

tu_pian_18.png

tu_pian_19.png

 

 

标签
Drupal 版本