2011-12-17 7 views
3

誰かがTinyButStrongをCakePHPと一緒に使ってみましたか? 私はTinyButStrongに関する事前知識は持っていませんが、テンプレートからWord文書を生成する良い方法と思われます。しかし、私はこれをCakePHPアプリケーションとどのように統合するかはわかりません。CakePHP + TinyButStrong

ありがとうございます。アイデアやご提案ありがとうございます。

お礼、 トニー。

答えて

7

OpenTBSプラグインを使用してTinyButStrongを意味するものとします。このプラグインは、テンプレートを使用してDOCX(および他のMs OfficeとOpenOfficeドキュメント)をマージすることができます。

アクションを、ダウンロードするDocxを生成することを目的としたCakePHPコントローラに追加する方法です。

次のコードはCakePHPバージョン1.3で利用できますが、バージョン2.0ではテストされていません。

ステップ:

1)サブディレクトリの下に、ベンダーのディレクトリにTBSとOpenTBSクラスを追加します。

ベンダー/ TBS/tbs_class.php
ベンダー/ TBS/tbs_plugin_opentbs.php

アプリ/ V:

2)TBS + OpenTBSの準備を簡素化しますCakePHPのヘルパーを作成します。 iews /ヘルパー/ tbs.php

<?php 

class TbsHelper extends AppHelper { 

    function getOpenTbs() { 
     App::import('Vendor', 'tbs/tbs_class'); 
     App::import('Vendor', 'tbs/tbs_plugin_opentbs'); 

     $tbs = new clsTinyButStrong; // new instance of TBS 
     $tbs->Plugin(TBS_INSTALL, OPENTBS_PLUGIN); // load OpenTBS plugin 
     return $tbs; 
    } 

} 

3)今docxファイルを生成する必要がありますコントローラの新 "輸出" アクションを追加します。

アプリ/コントローラ/ example_controller.php

<?php 

class ExamplesController extends AppController { 

    var $name = 'Examples'; 

    function export() { 

     // Stop Cake from displaying action's execution time, this can corrupt the exported file 
     // Re-ativate in order to see bugs 
     Configure::write('debug',0); 

     // Make the Tbs helper available in the view 
     $this->helpers[] = 'Tbs'; 

     // Set available data in the view 
     $this->set('records', $this->Example->find('all')); 

    } 

} 

4)最後に、対応するビューを作成します。ビューと同じフォルダにDOCXテンプレートを配置することを忘れないでください。 (MS Officeに構築する)

(以下)APP /ビュー/例/ export.ctp
アプリ/ビュー/例/ export_template1.docx

<?php 

ob_end_clean(); // Just in case, to be sure 

// Get a new instance of TBS with the OpenTBS plug-in 
$otbs = $tbs->getOpenTbs(); 

// Load the DOCX template which is supposed to be placed in the same folder 
$otbs->LoadTemplate(dirname(__FILE__).'/export_template1.docx'); 

// Merge data in the template 
$otbs->MergeBlock('r', $records); 

// End the merge and export 
$file_name = 'export.docx'; 
$otbs->Show(OPENTBS_DOWNLOAD, $file_name); 

exit; // Just in case, to be sure 

TinyButStrong PHPのグローバル変数をマージする機能を提供しますが、CakePHPではそのような機能を使用しないことをお勧めします。代わりに、MergeBlock()とMergeField()を、ViewのControllerによって設定されたデータで使用する必要があります。

あなたがバグを満たしている場合、

Configure::write('debug', 0); 

ラインを無効にすることを忘れないでください、これはあなたにCakePHPのエラーが表示されます。それ以外の場合、CakePHPはPHPエラーを含むすべてのエラーを隠します。

OpenTBSにもデバッグモードがあることを忘れないでください。必要に応じてmanualを参照してください。

これをlibにすることもできます(アプリケーション内のどこでも使用できます)。

+0

Hello Skrol29、ありがとうございました。はい、プラグインは正しいです。しかし、私はモデルでこれを使用する必要があります。プロジェクト全体はさまざまな種類の文書を生成してアーカイブするためです。ビューを使用してすぐに表示/出力しないでください。 –

+0

Hello Tony、出力のタイプを変更するには、OpenTBSの単なる選択肢です。 Show(OPENTBS_DOWNLOAD、...)をShow(OPENTBS_FILE、...)に置き換えます。ビューでこれを必要としない場合は、上記のTBSコードを1つのスニペットに集めるだけです。 – Skrol29

+0

こんにちはSkrol29、ありがとうございました。これは私が必要とするものです:-) –