在drupal中创建.csv/文本文件


Create .csv / text file in drupal

我想做的是将SQL查询导出到.csv文件,以便用户可以下载。查询或多或少是这样的:

SELECT * FROM {registered} WHERE pending = 'Y'

我希望将该查询的结果放在.csv文件中,还希望将问题中的行更新为pending='N'和completed_time=NOW()。

我还希望页眉包含在顶部。

是否应该使用任何标准的drupal函数,或者我应该简单地使用file_create_filename函数,然后以正常的php方式创建文件?

我试着这样做:

// Save query data
$result = db_query("SELECT *
                    INTO OUTFILE '/tmp/myfile-raw'
                    FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY ''"'
                    LINES TERMINATED BY ''n'
                    FROM {plan_tax_red_registered}");
if (!$result) {
  echo 'Failed saving query'n';
  return ;
}
$file = fopen("/tmp/myfile-raw","rw+");
if (!$file) {
  echo 'Failed opening again'n';
  return ;
}
// Might be uneccessary but database fields can change
$columns = db_query("SHOW FIELDS FROM {plan_tax_red_registered}");
$list_of_columns = array();
while ($res = db_fetch_array($columns)) {
  $list_of_columns[] = $res['Field'];
}
$header = implode(";", $list_of_columns);
// Get the contents from the raw file
$old_content = file_get_contents($file);
// Save result
$csv_file = fopen("/tmp/result.csv","rw+");
if (!$csv_file) {
  echo "Failed opening csv file'n";
  return;
}
fwrite($csv_file, $header . "'n" . $old_content);
fclose($file);
fclose($csv_file);

不幸的是,我无法打开csv文件:(

我知道我可以简单地这样做来显示文件:

function plan_tax_red_export_to_excel($result,  $filename = 'myfile.csv'){
  drupal_set_header('Content-Type: text/csv');
  drupal_set_header('Content-Disposition: attachment; filename=' . $filename);
  $count = mysql_num_fields($result);
  for($i = 0; $i < $count; $i++){
    $header[] = mysql_field_name($result, $i);
  }
  print implode(';', $header) ."'r'n";
  while($row = db_fetch_array($result)){
    foreach($row as $value){
      $values[] = '"' . str_replace('"', '""', decode_entities(strip_tags($value))) . '"';
    }
    print implode(';', $values) ."'r'n";
    unset($values);
  }
}

但我也想更新内容(将is_pending字段设置为'N',将completed_time设置为NOW())。

你的想法是什么?感谢您的帮助:)

谨致问候,Samuel

您是否考虑过使用现有模块?您可以使用Views与Views Bonus Pack或Views Data export组合创建CSV导出。