Как экспортировать 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 плагин.

Если есть сомнения, пожалуйста, прокомментируйте.

Другие вопросы по тегам