drupal 7:使用视图批量操作创建xls文件

时间:2018-03-26 17:10:07

标签: php drupal-7 phpexcel xls vbo

我正在尝试使用以下代码在action_info函数中使用PHPExcel模块生成excel文件:

function mymodule_export_data_action(&$object, $context = array()) {
if (isset($object->uid)) {
    $uid = $object->uid;
}
elseif (isset($context['uid'])) {
    $uid = $context['uid'];
}
if ($uid) {
    module_load_include('inc', 'phpexcel');
    $filename = 'mymodule--download-' . uniqid() . '.xls';
    $filepath = variable_get('file_public_path', conf_path() . '/files') . '/' . $filename;
    $result = phpexcel_export(
            array('Nom', 'Prenom', 'Date de naissance', 'Adresse email'), 
                    array(
                    array('A1', 'B1'),
                    array('A2', 'B2'),
                  ), $filepath);
    if ($result === PHPEXCEL_SUCCESS) {
        drupal_set_message(l('Click to download', $filepath));
    }
    else {

    }
}

}

当只有一个节点时,这工作正常,但是当有多个节点时,它会为每个节点生成一个新文件,这也很好,但我的目的是为所有节点提供一个文件。已经好几天了,我真的希望有人能把我放在正确的方向上。

提前谢谢

1 个答案:

答案 0 :(得分:0)

这是使用views模块,views_data_export模块,2行PHP代码和一些jQuery行的解决方案。

请按以下步骤操作:

第一次安装viewsviews_data_export个模块

第二次(a)创建视图页面和数据导出this video   将帮助您根据数据导出数据     过滤器(S)

第二个(b)请勿忘记在用于获取NID的views page中添加 nid字段

第二个(c)现在,再创建一个视图数据导出(如果需要,再创建starts here)并创建不同于第一个的导出PATH数据导出(第2步(a)中已创建请记住,您不必更新DATA EXPORT SETTINGS下的Attach to选项部分,看起来应该是Attach to: none

第二(d)现在,在视图中添加 nid 作为上下文过滤器,然后选择提供默认值 = 来自网址的内容ID like this并选中Allow multiple values like this

复选框

第3次如果您有视图页,请在template.php OR 顶部的某处添加两行PHP代码已经创建(顺便说一下,我用名为views-view--export-multiple-rows--page.tpl.php的tpl完成了它。)

if($_SERVER['REQUEST_METHOD'] == 'POST') {                 
    drupal_goto("export_selected/".implode(',', $_POST['export']));
}

第4次在JS文件中添加以下jQuery代码,该文件将在此页面上呈现,如custom.js和**更改类**

jQuery(function($){
    jQuery('.feed-icon a:first-child').text('Export All');

    jQuery('td.views-field-nid').each(function() { //class of NID added in step 2nd (b)
        var t = jQuery(this);
        var id = jQuery.trim(t.text());
        t.html('<input type="checkbox" name="export[]" value="" />');
        t.find('input').val(id);
    });
    //Below .view-export-multiple-rows class is of views class (main views page)
    $('.view-export-multiple-rows').wrap('<form method="POST" class="export-form"></form>');
    $('.export-form .view-content').append('<input type="submit" value="Export Selected" name="submit" />');
});

如果你正确地遵循了所有这些步骤,我相信你已经完成了:

  • 导出所有行
  • 导出已过滤的行
  • 导出特定行

我希望这会对你有帮助,或者至少可以给你一个想法。

由于