Как экспортировать PDF из внутреннего списка с помощью плагина DynamicPDF в OctoberCMS
Я собираюсь использовать плагин DynamicPDF для экспорта pdf из внутреннего списка в OctoberCMS. Но я не знаю, как использовать этот плагин с кнопкой экспорта в бэкэнд-списке. Поэтому я надеюсь на вашу помощь. Спасибо.
1 ответ
Да, вы можете, просто следуйте этим шагам.
1. Добавить ссылку на экспорт
добавьте этот код в свой _list_toolbar.htm
[ вы можете найти этот файл внутри вашего плагина и файлов просмотра контроллера )
<div data-control="toolbar">
<!-- ..some default code... -->
<a href="<?= Backend::url('hardiksatasiya/timetracker/timelog/export') ?>"
class="btn btn-primary oc-icon-sign-out">export</a>
</div>
примечание: заменить
link Url
с вашим автором / плагином / контроллером, затем оставьте имя действия экспорта как есть
2. Создание шаблона для нашего файла PDF в
DynamicPDF Plugin
Создать новый шаблон
Установить код: export-data-pdf
[Я использую это, но вы можете использовать свой собственный]
(убедитесь, что этот код мы будем использовать позже для создания PDF)
Установить это HTML
<table border="1" style="border-collapse: collapse;">
<tr>
{% for header in headers %}
<th>{{ header }}</th>
{% endfor %}
</tr>
{% for record in records %}
<tr>
{% for data in record %}
<td>{{ data }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Сохрани это.
3. Добавить
export
именованное действие внутри вашего контроллера[As you said DynamicPDF is installed so we can use \Renatio\DynamicPDF\Classes\PDF in it]
, Это действие сгенерирует ваш PDF-файл, и мы называем это действие ссылкой STEP-1.
public function export()
{
$lists = $this->makeLists();
$widget = reset($lists);
/* Add headers */
$headers = [];
$columns = $widget->getVisibleColumns();
foreach ($columns as $column) {
$headers[] = \Lang::get($column->label);
}
/* Add records */
$getter = $this->getConfig('export[useList][raw]', false)
? 'getColumnValueRaw'
: 'getColumnValue';
$model = $widget->prepareModel();
$results = $model->get();
$records = [];
foreach ($results as $result) {
$record = [];
foreach ($columns as $column) {
$value = $widget->$getter($result, $column);
if (is_array($value)) {
$value = implode('|', $value);
}
$record[] = $value;
}
$records[] = $record;
}
return \Renatio\DynamicPDF\Classes\PDF::loadTemplate('export-data-pdf',
['headers' => $headers, 'records' => $records])->stream('export.pdf');
}
4. Настройка
Как этот код будет читать ваши list-config
и генерировать PDF в соответствии с ним, но если вы хотите customize
это вы можете редактировать данные export
действовать и генерировать ваш набор данных в соответствии с этим. А также PDF template changes
вы можете сделать из DynamicPDF
плагин.
Если есть сомнения, пожалуйста, прокомментируйте.