当前位置

用Feeds导入csv数据到Drupal 7中

James Qi 在 2012年3月1日 - 23:57 提交

  在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表中某个字段,真是太不完善了

 

自由标签:

评论

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 / 祁劲松

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 / 祁劲松

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

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

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

James Qi / 祁劲松

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

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

劲松兄,不好意思,在使用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导入数据过程中是否遇到过此类问题,烦请不吝赐教,谢谢!

你好!我在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标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。