Генерация документа с табличными данными
Мы еще обновляем эту страницу
Тут может не хватать некоторых данных — дополним в ближайшее время
В нашем тестовом шаблоне есть таблица, куда надо вставить картинку, название и цену товара. Модификаторы для цен нельзя использовать в ресте генератора документов, поэтому цену придётся передавать в виде сформированной строки.
Ниже рабочий пример кода, после него подробности.
$data = [
'templateId' => 203,
'providerClassName' => '\\Bitrix\\DocumentGenerator\\DataProvider\\Rest',
'value' => 1,
'values' => [
'Table' => [
[
'Name' => 'Item name 1',
'Price' => '$111.23',
'Image' => 'http://myrestapp.com/upload/stamp.png'
],
[
'Name' => 'Item name 2',
'Price' => '$222.34',
'Image' => 'http://myrestapp.com/upload/stamp.png'
],
],
'TableItemName' => 'Table.Item.Name',
'TableItemImage' => 'Table.Item.Image',
'TableItemPrice' => 'Table.Item.Price',
'TableIndex' => 'Table.INDEX',
],
'fields' => [
'Table' => [
'PROVIDER' => 'Bitrix\\DocumentGenerator\\DataProvider\\ArrayDataProvider',
'OPTIONS' => [
'ITEM_NAME' => 'Item',
'ITEM_PROVIDER' => 'Bitrix\\DocumentGenerator\\DataProvider\\HashDataProvider',
],
],
'TableItemImage' => ['TYPE' => 'IMAGE'],
],
];
$url = $webHookUrl.$prefix.'.document.add/';
Напоминаем, что в шаблон вставлена таблица, в таблице три поля {TableItemName}, {TableItemImage}, {TableItemPrice}. Для начала посмотрим, как заполняется массив полей fields.
- Передаем настройки поля Table. Такого поля в явном виде нет в шаблоне, но оно нам нужно, чтобы передать по этому ключу массив значений для таблицы.
- Для этого поля нужно обязательно указать провайдера
fields['Table']['PROVIDER'] = 'Bitrix\\DocumentGenerator\\DataProvider\\ArrayDataProvider'. Таким образом мы указываем, что по этому ключу придёт массив значений. - Надо заполнить массив настроек провайдера.
fields['Table']['OPTIONS']['ITEM_NAME'] = 'Item'. Здесь мы передали внутренний ключ, по которому провайдер будет обращаться к элементам массива. - Здесь указывается, что каждый элемент массива поля
Tableпо ключуItem- это простой хеш.
fields['Table']['OPTIONS']['ITEM_PROVIDER'] = 'Bitrix\\DocumentGenerator\\DataProvider\\HashDataProvider'
- Указываем, что поле
TableItemImageявляется изображением - здесь всё как обычно.
Теперь про массив values.
- По ключу
Tableпередаем простой массив (с индексными последовательными ключами). Каждый элемент массива - это ассоциативный массив, где ключ - это правая часть поля, за исключениемTable(название поля-массива) иItem(название внутреннего ключа). - В качестве значения для самих полей таблицы передаем цепочку получения значения из провайдера. Строится она как последовательные коды провайдеров, разделенные точкой. В нашем случае это будет
Table- название поля-массива, откуда получаются значения. Потом точка. ДальшеItem- название внутреннего ключа провайдераTable, по которому провайдер отдает элементы массива. Потом точка. Дальше идёт ключ внутреннего ассоциативного массива из элементовTable. - У провайдера
ArrayDataProviderесть внутренняя переменнаяINDEX, которая указывает на текущий номер элемента (начиная с 1). Чтобы в поле{TableIndex}внутри таблицы подставился порядковый номер, было указаноvalues['TableIndex'] = 'Table.INDEX'.
Если указать в качестве значения поля обычную строку, то она вставится в таблицу как есть во все строки.
Скопировано