在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和Feeds升级后,对于中断导入的处理
补充:Drupal 7从7.12升级到7.15并且feeds也升级后,数据库结构发生了变化,以前的text可以直接编辑,现在的blob无法直接编辑,可以直接把feeds_source中的中断的项整个删除,然后重新添加导入就可以。
文本字段为0不能输入的问题
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就不会被跳过了,可以导入。
原始文件中文本字段为空,导入可能成了上一次的值
Drupal 7.26+Feeds 7.x-2.0-alpha8导入后发现一些页面字段明显不对,详细核查后发现一些本来为空的字段变成了不相关的其他页面的内容,网上查到据说是Feeds的Bug,下载最新的feeds 7.x-2.x-dev(2014-Feb-11版)后,重新导入可以覆盖以前的错误。
无head的csv文件导入
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,
);
feeds导入大CSV文件,中断
“当导入一个大文件而中途中断后,按钮变成了灰色,无法继续,从官方网站上查到需要进入数据库修改feeds_source表中某个字段,真是太不完善了”
我也遇到了,怎么办?寻求帮助。
改用feeds新版本来解决
请将drupal 7配套的feeds升级到最新版本,有一个unlock解锁的功能,遇到中断、按钮变灰色的时候,就可以点击菜单中的这个功能来解决。
Feeds无法导入多个tags
Drupal和Feeds都是7.x版本,当导入多个tags时(比如:"标签1,标签2,标签3"),Feeds把这些标签当作一个标签导入,无法导入3个标签。请求你的帮助,谢谢!
问题已解决
又在你的网站上看到这个插件Feeds Tamper,安装后自己捣鼓了一番,居然成功导入多值字段。
后来又从Drupal官网上看到详细介绍:/node/2287473(你的博客不让发链接,只有这个不完整格式的网址了,有需要的朋友自己补全网址去看吧,呵呵),和我测试的方法一致,看来学习无止境啊!
也感谢劲松兄的博客给我的帮助,谢谢!
解决了就好!
别客气,大家互相交流学习!不让发链接是怕垃圾太多,没有办法的举措,望谅解。
Fatal error : Allowed memory size of 103809024 bytes exhausted
劲松兄,不好意思,在使用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来运行。
感谢指导,问题暂时解决
感谢劲松兄,按照你的建议,先增加memory_limit,问题暂时解决。如果今后还出现,就再增加,谢谢!
添加新评论