2014-05-12 2 views
0

Я использую следующее решение для преобразования таблиц 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 /> 

Я пробовал некоторые обходной путь, но никто не работал. Поэтому я надеюсь, что кто-то там может помочь мне еще раз и объяснить мне, что я делаю неправильно. (:

Большого спасибо заранее

ответ

1

Проблема, вероятно, ваш $_SESSION['table'] не установлен При запуске MODx, он начинает свой собственная сессия, которая не может получить доступ к автоматически из-за пределы Вы можете проверить это быстро.. var_dump($_SESSION) в вашем html2csv.php. Я не совсем уверен в вашем решении в целом и почему вы не генерируете CSV прямо из базы данных? Но если вы не можете изменить решение, я бы попробовал включить mod_ index.php и установите MODX_API_MODE = true для доступа к функциям без загрузки запроса. (Предположим, вы где-то в одном веб-корне!)

//In html2csv.php 
define('MODX_API_MODE', true); 
require_once('..path/to/index.php'); 

//You should now be able to access $_SESSION['table'] 
var_dump($_SESSION['table']); 
+0

Спасибо за ваш ответ @Kristian! К сожалению, это не сработало. Но я теперь следую предложению создать csv direct из mysql select. Я довольно близок к решению, но все еще получаю некоторые ошибки. Может быть, вы могли бы помочь мне пойти дальше. Здесь новая тема: http://stackoverflow.com/questions/23642362/csv-file-from-mysql-using-php-with-a-oop-aproach-mysqli-connect-etc –

 Смежные вопросы

  • Нет связанных вопросов^_^