当前位置

用Feeds导入csv数据到Drupal 7中

James Qi 在 2012年3月1日 - 23:57 提交
内容摘要:在Drupal 6网站搭建中,我一直用Node import来导入已有数据,感觉还不错。但近期在搭建Drupal 7网站的时候,发现Node import这个模块已经停止开发for Drupal 7的......

  在Drupal 6网站搭建中,我一直用Node import来导入已有数据,感觉还不错。但近期在搭建Drupal 7网站的时候,发现Node import这个模块已经停止开发for Drupal 7的版本了,看到推荐的替代工具是Feeds,于是这几天摸索了一番,现在基本上可以正常使用了。有几个地方需要注意的记录下来:

  • 提交的用户不要使用默认的Anonymous,否则可能因为权限问题而报错;
  • 可以用浏览器界面查看实时导入进展情况,也可以改为后台运行cron来每次50页提交需要导入的数据;
  • 提交的文件应该设置为UTF-8 UNIX格式,否则遇到非英文字母、数字的时候,可能报错;
  • 可以把字段设置为自动完成的分类,用feeds导入文字后变成新的分类,这个功能很方便,减少了以前用node_import导入完成后用用php程序分类的环节;
  • 一个奇怪的Bug:纯数字导入字段时消失了,要在数字后面加一个空格,这是在drupal官方网站上搜索到的解决办法;
  • 当导入一个大文件而中途中断后,按钮变成了灰色,无法继续,从官方网站上查到需要进入数据库修改feeds_source表中某个字段,真是太不完善了

 

自由标签:

评论

-- 发自IP地址: 111.174.198.74 (位置 | 谁是)

Drupal 7下feeds-7.x-2.0-alpha8导入csv文件时,为0的值不能导入文本字段,修改modules/feeds/mappers/text.inc:

function text_feeds_set_target($source, $entity, $target, $value) {
//jamesqi2013-11-15 if (empty($value)) {
if (empty($value) && $value!=='0') {
return;
}
这样0就不会被跳过了,可以导入。

James Qi / 祁劲松

-- 发自IP地址: 137.248.75.11 (位置 | 谁是)

Drupal 7.26+Feeds 7.x-2.0-alpha8导入后发现一些页面字段明显不对,详细核查后发现一些本来为空的字段变成了不相关的其他页面的内容,网上查到据说是Feeds的Bug,下载最新的feeds 7.x-2.x-dev(2014-Feb-11版)后,重新导入可以覆盖以前的错误。

James Qi / 祁劲松

-- 发自IP地址: 111.174.198.74 (位置 | 谁是)

geonamebase.com系列站2013年8月导入时遇到无head的csv文件字段对应的问题,通过搜索资料修改sites/all/modules/feeds/feeds_ui.admin.inc 可以解决:

/**
* Validation handler for feeds_ui_mapping_form().
*/
function feeds_ui_mapping_form_validate($form, &$form_state) {
//jamesqi2013-8-9 if (empty($form_state['values']['source']) xor empty($form_state['values']['target'])) {
if ((empty($form_state['values']['source']) && !is_numeric($form_state['values']['source'])) xor empty($form_state['values']['target'])) {
// Check triggering_element here so we can react differently for ajax
// submissions.
switch ($form_state['triggering_element']['#name']) {

// Regular form submission.
case 'op':
//jamesqi2013-8-9 if (empty($form_state['values']['source'])) {
if (empty($form_state['values']['source']) && !is_numeric($form_state['values']['source'])) {
form_error($form['source'], t('You must select a mapping source.'));
}
else {
form_error($form['target'], t('You must select a mapping target.'));
}
break;

$processor->addConfig(array('mappings' => $mappings));

//jamesqi2013-8-9 if (!empty($form_state['values']['source']) && !empty($form_state['values']['target'])) {
if ((!empty($form_state['values']['source']) || is_numeric($form_state['values']['source'])) && !empty($form_state['values']['target'])) {
try {
$mappings = $processor->getMappings();
$mappings[] = array(
'source' => $form_state['values']['source'],
'target' => $form_state['values']['target'],
'unique' => FALSE,
);
 

James Qi / 祁劲松

-- 发自IP地址: 111.194.94.208 (位置 | 谁是)

“当导入一个大文件而中途中断后,按钮变成了灰色,无法继续,从官方网站上查到需要进入数据库修改feeds_source表中某个字段,真是太不完善了”

我也遇到了,怎么办?寻求帮助。

-- 发自IP地址: 171.113.164.61 (位置 | 谁是)

请将drupal 7配套的feeds升级到最新版本,有一个unlock解锁的功能,遇到中断、按钮变灰色的时候,就可以点击菜单中的这个功能来解决。

James Qi / 祁劲松

-- 发自IP地址: 221.226.84.218 (位置 | 谁是)

Drupal和Feeds都是7.x版本,当导入多个tags时(比如:"标签1,标签2,标签3"),Feeds把这些标签当作一个标签导入,无法导入3个标签。请求你的帮助,谢谢!

-- 发自IP地址: 49.95.13.172 (位置 | 谁是)

又在你的网站上看到这个插件Feeds Tamper,安装后自己捣鼓了一番,居然成功导入多值字段。
后来又从Drupal官网上看到详细介绍:/node/2287473(你的博客不让发链接,只有这个不完整格式的网址了,有需要的朋友自己补全网址去看吧,呵呵),和我测试的方法一致,看来学习无止境啊!
也感谢劲松兄的博客给我的帮助,谢谢!

-- 发自IP地址: 221.226.84.218 (位置 | 谁是)

劲松兄,不好意思,在使用Feeds导入数据时,又遇到一个问题,向你请教。当我用Feeds多次导入数据、累计达到2000多条Node时,出现以下错误提示:

发生一个AJAX HTTP错误。 HTTP返回代码:200 调试信息如下。 路径:/batch?render=overlay&id=32&op=do 状态文本: OK 响应文本: Fatal error: Allowed memory size of 103809024 bytes exhausted (tried to allocate 262144 bytes) in /……/html/modules/taxonomy/taxonomy.module on line 1658

我在网上找了方法,都是让修改php.ini中的memory_limit,但是这并不能解决问题。我想这可能是因为:每次导入php脚本都会请求更大的内存空间,不管以后将memory_limit设置成多大,以后肯定出问题。

我又查看了一下taxonomy.module的第1658行代码:$options[$term->tid] = str_repeat('-', $term->depth) . $term->name;

这行代码包含在下面这段代码中:
function taxonomy_allowed_values($field) {
$options = array();
foreach ($field['settings']['allowed_values'] as $tree) {
if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary'])) {
if ($terms = taxonomy_get_tree($vocabulary->vid, $tree['parent'])) {
foreach ($terms as $term) {
$options[$term->tid] = str_repeat('-', $term->depth) . $term->name;
}
}
}
}
return $options;
}

我搞不懂到底哪里出了问题。不知道,劲松兄在使用Feeds导入数据过程中是否遇到过此类问题,烦请不吝赐教,谢谢!

-- 发自IP地址: 119.103.138.132 (位置 | 谁是)

你好!我在feeds导入中没有遇到你说的Fatal error: Allowed memory size of xxx bytes exhausted报错,但在其它操作中也多次遇到内存不足的问题,一般也都是修改php.ini的内存限制来解决的,也有需要修改Drupal模块中部分PHP程序来解决的,从你贴上的taxonomy.module中的部分片段来看,还看不出明显问题,所以我建议你修改php.ini的memory_limit来试一试。我们一般都至少设置为512M,甚至临时设置成几个G来运行。

James Qi / 祁劲松

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符