Создать .csv / текстовый файл в drupal - PullRequest
0 голосов
/ 03 февраля 2012

Я хочу экспортировать запрос SQL в файл .csv, чтобы он мог быть загружен пользователем. Запрос более или менее похож на этот:

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

Я хочу, чтобы результат этого запроса был помещен в файл .csv, и я также хочу, чтобы строки в вопросах обновлялись с помощью pending = 'N' и complete_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' и для параметра complete_time значение NOW ()).

Какие у вас идеи? Любая помощь приветствуется:)

С уважением, Samuel

1 Ответ

1 голос
/ 03 февраля 2012

Рассматривали ли вы использование существующих модулей?Вы можете создать экспорт в CSV, используя Просмотры в сочетании с Бонус за просмотр просмотров или Экспорт данных просмотров .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...