2011-03-29 57 views
1

我正在尋找關於如何在PHP中進行報告的建議。具體來說,我需要PDF渲染,並且我想盡可能地將代碼與代碼分開(某種類型的模板?)。PHP Reporting With Templates

我最近收到了一份關於PHP4的代碼庫,並負責升級到PHP5。這些報告目前是通過TCPDF創建的,這些都是直接從PHP生成的HTML驅動的。升級過程證明極具挑戰性。我遇到了TCPDF的多個問題,它只會進入一個無限循環,永遠不會返回。通過一些故障排除和論壇帖子,似乎我們正在做一些東西,使用PHP4的TCPDF4沒有問題,但TCPDF5和PHP5。不幸的是,無論我們違規的規則是什麼,我都會無限掛斷。我們的內部代碼可能會使用一些重構,並且我認爲重寫可以緩解許多這些問題,但是我並不反對現在超越TCPDF。

我們的代碼還有很多HTML代與其他報表功能混合在一起。我真的很想分開這一點,以便在編輯或創建報告時不需要PHP代碼。報告中我不需要任何太花哨的東西。需要在單個選項卡上支持基本數據表和多個水平窗格。有圖表,但它們目前由單獨的軟件包生成,並直接作爲圖像讀取。關於重新做這些報告的最佳方式的建議?謝謝。

回答

1

您可以使用PHP作爲模板引擎,並且可以將HTML輸出轉換爲PDF。

下面是PHP模板選項:

  • 使用Smarty,這是很容易和有它自己的模板語言,但我認爲這是你的用法有點overhad。
  • 或者您可以使用普通的PHP,只需將模板代碼放入一個分離的目錄並創建一個函數render_template('template_name.php')或類似的東西。

就你而言,我認爲你可以編寫自己的類來處理報告。這裏只是一個簡單的使用草圖:

<?php 
$report = new Report(1234); // report id 
$report->template = 'default'; // or something different 
$report->addField('Users', array('Claire', 'Fred', 'Kevin'), array('renderArray' => true)); 
$report->addField('Note', '<p>This report was generated automatically.'); 

因此,最終你可以使用這個簡單的草圖背後的一些簡單的想法。

我希望我正確理解你的問題,並且我可以幫你解答這個問題。

+0

是的,我認爲你理解它很好。我會看看Smarty,謝謝。 – 2011-03-29 16:04:45

0

我已經使用多類創建一些動態PDF:分離PDF和PDF的設計,從數據訪問和管理

我有,您可以使用您的所有報告一個抽象類。此類處理PDF生成(所有設置),並且您可以設計一些樣式(「writeTitle1()」)或輔助方法來呈現數據。 ex「writeReportTable()」 如果你打算保留一個轉換html2pdf的系統,這個類也可以生成一些html,或者調用任何模板引擎。 在我的設計中,這個類通常包裝PDF引擎。 (我經常使用Cezpdf)

然後對於每個報告,一個專注於數據管理的子類:獲取和格式化數據,然後調用渲染方法。

這是獲得一些可見性的第一步:獨立層。