欢迎各位兄弟 发布技术文章
这里的技术是共享的
节点导入的时候 创建节点 对象时 有额外的动作 其实我们不需要在这时(node import和hook) 进行做什么 我们所要做的 其实就是在节点保存时 hook一下 这里的node import 的hook 用不到
这是平忠经过实践得来的 excel的要用utf-8的格式 ,同时在drupal的后台配置导入时(admin/content/node_import/add)
我们的格式 其实是指配置excel里面的格式,而不是drupal里面的格式
1) PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
项目主页:https://github.com/PHPOffice/PHPExcel
将PHPExcel 下载后,上传到Drupal目录:sites/all/libraries/PHPExcel
如果你的项目中安装了libraries模块,可以通过libraries_load($name);来调用。
libraries_load('PHPExcel');
如果没有安装libraries模块,可以简单的使用下列代码来调用:
require("sites/all/libraries/PHPExcel/PHPExcel/IOFactory.php");
注意为了确保Excel全部导入,程序可以会话很长的时间来进行。
所以在代码开头部分加入:
set_time_limit(0);
来确保运行时间不受限制。
來源:http://blog.pixnet.net/HACGIS/post/19002887
Node Import 模組是個非常好用的模組,可以把各種類型的 Node 資料先用打好,存成 csv 檔然後匯入。
不過對於自設的 CCK 欄位有個缺憾,就是在匯入之前必須先把 widget 的型態,由 option (select list / checkbox / radio) 改成 text,這樣才能匯入,實在是不太方便。
我修改了一點程式,讓它可以不用轉換 widget 的型態也能匯入,不過有個限制,目前修改的方式,只支援 Allowed values list 為下列形式:
value1
value2
vaule3
不支援 Allowed values list 為下列形式:
key1|value1
key2|value2
key3|value3
這是要注意的地方。
修改方式:
找出 node_import/supported/cck/content.inc 中的 function content_node_import_prepare
在該函數接近結尾的地方找到:
// Unset the dummy column value.
unset($node->$dummy_name);
$option_type = array('options_select' => true, 'options_onoff' => true, 'options_buttons' => true);
if (isset($option_type[$field['widget']['type']])) {
$keys = array();
foreach($node->$field_name as $value_list) {
$keys[] = $value_list['value'];
}
if ($field['multiple'] || $field['widget']['type'] == 'options_onoff') {
$node->$field_name += array('keys' => $keys);
} else {
$node->$field_name += array('key' => reset($keys));
}
}
// Unset the dummy column value.
unset($node->$dummy_name);
node_import 模块里面 node_import.api.php 下面是 node_import 的 hook函数
node_import
Name | Description |
---|---|
hook_node_import_defaults | List the FAPI elements to set the default values for each field. |
hook_node_import_defaults_alter | Change the FAPI elements to set the default values for each field. |
hook_node_import_fields | List the available fields for given content type. |
hook_node_import_fields_alter | Change the list of available fields for given content type. |
hook_node_import_format_options | This hook allows users to change some of the options the user is presented with on the wizard form. |
hook_node_import_format_options_alter | Change the format options. |
hook_node_import_options | List the FAPI elements to set the options for each field. |
hook_node_import_options_alter | Change the FAPI elements to set the options for each field. |
hook_node_import_postprocess | This hook is invoked after the form to create the $type has been submitted. You can use this hook to do stuff after the node has (or has not) been created, eg use the nid to store some additional information in the db tables. |
hook_node_import_task | This hook is invoked when a task is loaded, inserted, deleted, resumed or suspended. |
hook_node_import_types | List the available content types. |
hook_node_import_types_alter | Change the list of available content types. |
hook_node_import_values | List the (static) values to use to create the content type. |
hook_node_import_values_alter | Change the list of values to use to create the content type. |
node_import_defaults | Returns a list of default (form elements). |
node_import_fields | Returns a list of available content fields for given node_import type. |
node_import_format_options | Get a list of options for different stuff presented to the user in the wizard form such as 'record separators', ... |
node_import_options | Returns a list of options (form elements). |
node_import_types | Returns a list of available content types. |
node_import_values | Create an array of values to submit to the form. |
./
点上面的链接 可以进到 hook的 详细页面
来自 http://api.drupalhelp.net/api/node_import/node_import.inc/group/node_import_hooks/6
hook_node_import_values_alter() 例子
<?php
/**
* Implementation of hook_node_import_fields_alter().
*/
function yourmodule_node_import_fields_alter(&$fields, $type) {
// Check if the type is a node content type.
if (($node_type = node_import_type_is_node($type)) !== FALSE) {
// Now you would need to alter the field. Let's say the Drupal vocabulary has
// ID 42. What you want to do is add a new 'preprocess' function to the
// array of already present 'preprocess' functions. This function would
// convert the input value from the CSV to a tid that taxonomy can use.
if (isset($fields['taxonomy:42']) {
$fields['taxonomy:42']['preprocess'] = array_unshift('yourmodule_business_logic', (array) $fields['taxonomy:42']['preprocess']);
}
// If you would want to add the same business logic preprocess function
// to all taxonomy forms, you could do a:
// foreach ($fields as $fieldname => $fieldinfo) {
// if ($fieldinfo['input_format'] = 'taxonomy_term') {
// // same thing
// }
// }
// Note that yourmodule would need to run after the taxonomy
// module currently. That's because supported/taxonomy.inc
// does more or less the same thing in taxonomy_node_import_fields_alter().
// I'll change that because it can do it just as well in
// taxonomy_node_import_fields().
}
}
// What you have done now is told node_import that before submitting
// the value from the CSV file, you would first like to run a
// "yourmodule_business_logic" function on the value.
// See from the hook_node_import_docs.php:
/**
* ...
* - \b "preprocess" : Array of callback functions. Each of the functions
* can preprocess the mapped value. This is a way to validate and
* preprocess the input. These preprocess functions can
* be used in companion with the hook_node_import_values_alter().
*
* The signature of the callback is:
* @code
* $return = $function(&$value, $field, $options, $preview);
* @endcode
* and it should alter the $value passed. Note that if the field
* "has_hierachy", the value passed will be an array (grandparent,
* parent, child).
*
* The $return value should be FALSE if there is an input error,
* NULL if there was not, but not a valid value could be found or
* TRUE if a valid value could be found and so other preprocess
* functions can be skipped.
*
* See @ref node_import_preprocess for examples.
*
* Defaults to array().
*/
/**
* A preprocess function that converts a value to the correct
* taxonomy term.
*/
function yourmodule_business_logic(&$value, $field, $options, $preview) {
// The function is given the $value (from CSV file or from a previous
// executed preprocess function) for the given $field (as returned by
// node_import_fields()). It also passes some options for the field if
// you have implemented hook_node_import_options().
// The $field includes $fields['vocabulary'] which is the vocabulary
// object by the way.
// Now you need to lookup the $value in your "category source 1"
// and convert it to a "drupal taxonomy term tid".
$value = yourmodule_lookup_source1($value);
// You could give some errors if the value does not appear to be
// valid in source 1. Look at some the other examples such as
// node_import_check_user_reference, etc (all *_check_* functions).
// If you have succesfully looked up the value you can return
// TRUE here. If you still want the builtin preprocess functions
// to run (which convert a term name to a term tid) you would
// return NULL. If there was an error, you would return FALSE.
return TRUE;
}
?>
Re: 讓 Drupal 的 Node Import 模組支援 option widget
感謝分享~~~
真是感動
--
from open mind to open source~
--
from open mind to open source~
如果想要發表回應,請先登入 或 註冊。
来自 http://drupaltaiwan.org/forum/20080622/2274
下面是导入帮助文档 http://my.wangruo.com/help/node_import/introduction?popup=1 (http://my.wangruo.com/ 是自己的drupal网站)
介绍
为Drupal 6.x的节点导入模块允许您导入从表格的文本文件,如CSV或TSV文件的内容。可能的用途包括从其他系统导入内容到您的网站或导入联系人或用户的大名单。
有什么可以进口?
节点模块为Drupal 6.x的进口不仅限于导入 节点的内容(任何内容类型),但它可以导入 分类词汇表,的分类条款 和用户。
此功能是没有提供在Drupal 5.x或更早版本,是仍处于发展阶段。
进口并不限于管理员的网页,但是可以将权限deligated以及向其他用户。但是请注意,用户只能导入内容,如果他们能够创建内容。这意味着,例如,用户将需要创建页面内容 的权限导入页面内容或管理用户权限的用户导入。
文件格式
节点导入模块接受CSV,TSV或任何 分隔符分隔值文件作为输入。这些文件可以使用最OpenOffice.org Calc的或Microsoft Excel 电子表格程序,如产生 。
准备进口文件,是一个重要的任务:
为每列的第一行应包含字段名,
确保您的文件保存在UTF8字符集,
一些领域可能需要一个特殊的格式。
你可以找到更多的信息内容领域上的支持,以及他们是否需要一些特殊格式的文档中。
您可以
管理进口管理»内容»导入内容,
导入内容管理»内容»导入新内容进口,
管理权限的管理用户管理权限。进口许可管理的用户可以将模块配置和管理所有用户的进口,而与进口内容权限的用户 只能管理自己的进口,
文件的问题,阅读有关已知的bug,以及节点导入项目页面上下载最新的版本。