Кто-нибудь пытался использовать TinyButStrong вместе с CakePHP? У меня нет предварительного знания TinyButStrong, но, похоже, это хороший способ генерировать документы Word из шаблонов. Но я не уверен, как интегрировать это с приложением CakePHP.
Спасибо за любые идеи / предложения.
С наилучшими пожеланиями, Тони.
Я предполагаю, что вы имеете в виду TinyButStrong с плагином OpenTBS, который может объединять DOCX (и другие документы Ms Office и OpenOffice) с использованием шаблонов.
Ниже приведен способ добавления действия экспорта в CakePHP-контроллер, который предназначен для создания Docx для загрузки.
Следующий код доступен для CakePHP версии 1.3, он не протестирован с версией 2.0.
Шаги:
1) Добавьте классы TBS и OpenTBS в каталог поставщика под подкаталог:
поставщики / TBS / tbs_class.php
поставщики / TBS / tbs_plugin_opentbs.php
2) Создайте помощник CakePHP, который упростит подготовку TBS + OpenTBS:
приложение / просмотров / помощники / 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 в той же папке, что и представление.
app / views / examples / export.ctp (ниже)
app / views / examples / export_template1.docx (для сборки с помощью Ms Office)
<?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 () с данными, заданными контроллером для представления.
Если вы встретили ошибки, не забудьте отключить строку
Configure::write('debug', 0);
и это покажет вам ошибки CakePHP. В противном случае CakePHP скроет все ошибки, включая ошибки PHP.
Не забывайте, что OpenTBS также имеет режим отладки. Если необходимо, обратитесь к руководству .
Вы также можете сделать это lib (для использования в любом месте вашего приложения).