Я использую следующее решение для преобразования таблиц HTML в CSV: Converting HTML Table to a CSV automatically using PHP?, и он отлично работает, когда я использую только два файла на своем сервере.Проблемы при попытке конвертировать HTML-таблицу в CSV в MODx Revolution
Здесь вы можете увидеть адаптацию моего кода:
Файл 01: Table.php
<?php
session_start();
$query_select = 'SELECT id, name, department, year FROM table WHERE year = 2000 ORDER BY name DESC';
$query_result = mysqli_query($link, $query_select) or die ("Couldn't execute query: ".mysqli_error());
$table = '
<table id="result-table" class="table table-bordered table-hover">
<thead>
<tr>
<td>ID</td>
<td>NAME</td>
<td>DEPARTMENT</td>
<td>YEAR</td>
<td>Check</td>
</tr>
</thead>';
while($row = mysqli_fetch_array($query_result)) {
$table .= "
<tbody>
<tr>
"<td>".$row['id']."</td>".
"<td>".$row['name']."</td>".
"<td>".$row['department']."</td>".
"<td>".$row['year']."</td>".
"<td><input type='checkbox' name=".$row['id']." value=".$row['id']."></td>".
</tr>";
}
$table .= '
</tbody>
</table>';
$_SESSION['table'] = $table;
echo $table;
echo '<a href=html2csv.php>Export to CSV</a>';
?>
Файл 02: HTML2CSV.php
<?php
session_start();
include 'simple_html_dom.php'; // Which is in http://www.example.com/simple_html.php as well.
$table = $_SESSION['table'];
$html = str_get_html($table);
header('Content-type: application/ms-excel');
header('Content-Disposition: attachment; filename=file.csv');
$fp = fopen("php://output", "w");
foreach($html->find('tr') as $element) {
$td = array();
foreach($element->find('th') as $row) {
$td [] = $row->plaintext;
}
fputcsv($fp, $td);
$td = array();
foreach($element->find('td') as $row) {
$td [] = $row->plaintext;
}
fputcsv($fp, $td);
}
fclose($fp);
?>
Как я уже говорил выше, эти файлы вместе дайте мне результат, который я ожидаю: красивый CSV-файл. (: Проблема возникает, когда я пытаюсь адаптировать ее к MODx Revolution. Я делаю так:
В MODx Revolution У меня есть ресурс, называемый Result Table, который имеет фрагмент [[resultTable]] и ссылку в файл html2csv.php здесь источник ресурсов:.
<p>[[!resultTable]]</p>
<p><a href="http://example.com/html2csv.php">Export to CSV</a></p>
А вот фрагмент resultTable:
<?php
$query_select = 'SELECT id, name, department, year FROM table WHERE year = 2000 ORDER BY name DESC';
$query_result = mysqli_query($link, $query_select) or die ("Couldn't execute query: ".mysqli_error());
$table = '
<table id="result-table" class="table table-bordered table-hover">
<thead>
<tr>
<td>ID</td>
<td>NAME</td>
<td>DEPARTMENT</td>
<td>YEAR</td>
<td>Check</td>
</tr>
</thead>';
while($row = mysqli_fetch_array($query_result)) {
$table .= "
<tbody>
<tr>
"<td>".$row['id']."</td>".
"<td>".$row['name']."</td>".
"<td>".$row['department']."</td>".
"<td>".$row['year']."</td>".
"<td><input type='checkbox' name=".$row['id']." value=".$row['id']."></td>".
</tr>";
}
$table .= '
</tbody>
</table>';
$_SESSION['table'] = $table;
return $table;
?>
Единственное существенное изменение на последних строках, где я не использовал эхо , но возвращайтесь, так же, как советуется MODX Tutorial. пока он не работает, и я смогу увидеть таблицу результатов. Когда я нажимаю на ссылку, которая загружает файл html2csv.php Я могу загрузить файл CSV, но, к сожалению, он имеет следующее сообщение об ошибке:
<b>Fatal error</b>: Call to a member function find() on a non-object in <b>/home/aloysia/www/html2csv.php</b> on line <b>13</b><br />
Я пробовал некоторые обходной путь, но никто не работал. Поэтому я надеюсь, что кто-то там может помочь мне еще раз и объяснить мне, что я делаю неправильно. (:
Большого спасибо заранее
Спасибо за ваш ответ @Kristian! К сожалению, это не сработало. Но я теперь следую предложению создать csv direct из mysql select. Я довольно близок к решению, но все еще получаю некоторые ошибки. Может быть, вы могли бы помочь мне пойти дальше. Здесь новая тема: http://stackoverflow.com/questions/23642362/csv-file-from-mysql-using-php-with-a-oop-aproach-mysqli-connect-etc –