Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
10 KiB
📋 Руководство по работе с шаблонами в Nextcloud
🎯 Что это такое?
Шаблоны — это готовые документы (DOCX, XLSX, PPTX) с переменными, которые можно автоматически заполнять данными из CRM.
Пример: Шаблон претензии с переменными {CLIENT_NAME}, {DATE}, {AMOUNT} → автоматически заполняется → готовый документ сохраняется в папку проекта.
📁 Где хранятся шаблоны?
1. Папка /Templates/ в Nextcloud
Путь: /admin/Templates/ (в корне пользователя admin)
WebDAV URL:
https://office.clientright.ru:8443/remote.php/dav/files/admin/Templates/
Что там есть:
- Стандартные шаблоны Nextcloud (ODT, ODS, ODP)
- Ваши кастомные шаблоны (DOCX, XLSX, PPTX)
2. Папка OnlyOffice (для общих шаблонов)
Путь: /var/www/html/data/appdata_*/onlyoffice/template/
Что там:
- Общие шаблоны OnlyOffice (например, "Соглашение_№_71...")
🔧 Как работать с шаблонами?
1. Получить список шаблонов
API Endpoint:
GET /crm_extensions/file_storage/api/list_templates.php
Пример запроса:
curl "https://crm.clientright.ru/crm_extensions/file_storage/api/list_templates.php"
Ответ:
{
"success": true,
"templates": [
{
"name": "pretenziya.docx",
"fileName": "pretenziya.docx",
"path": "/remote.php/dav/files/admin/Templates/pretenziya.docx",
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"size": 22931,
"modified": "Tue, 21 Oct 2025 08:53:54 GMT"
}
],
"count": 1
}
2. Создать документ из шаблона
API Endpoint:
GET /crm_extensions/file_storage/api/create_from_template.php
Параметры:
module- модуль CRM (Project, Contacts, HelpDesk, etc.)recordId- ID записи (например, ID проекта)recordName- название записи (например, "Проект_1")fileName- имя создаваемого файла (без расширения)templateName- имя шаблона из Nextcloud (например,pretenziya.docx)variables- JSON объект с переменными для заполнения
Пример запроса:
const url = `/crm_extensions/file_storage/api/create_from_template.php?` +
`module=Project&` +
`recordId=400264&` +
`recordName=Проект_1&` +
`fileName=Претензия_УК&` +
`templateName=pretenziya.docx&` +
`variables=${encodeURIComponent(JSON.stringify({
CLIENT_NAME: 'Иванов Иван Иванович',
DATE: '15.01.2025',
AMOUNT: '400000',
RESPONDENT_NAME: 'УК "Жилищник"',
CLAIM_TEXT: 'УК отказывается возмещать ущерб...',
OTHER_REQUIREMENTS: 'Провести экспертизу'
}))}`;
window.location.href = url;
Что происходит:
- ✅ Скачивается шаблон из Nextcloud через WebDAV
- ✅ Заполняются переменные через PHPWord (для DOCX) или простая замена (для других)
- ✅ Готовый документ сохраняется в S3 в папку проекта
- ✅ Документ открывается в OnlyOffice для редактирования
📝 Формат переменных в шаблонах
Вариант 1: Простые переменные
{CLIENT_NAME}
{DATE}
{AMOUNT}
Вариант 2: Двойные фигурные скобки
{{CLIENT_NAME}}
{{DATE}}
{{AMOUNT}}
Пример шаблона претензии:
ПРЕТЕНЗИЯ
Кому: {RESPONDENT_NAME}
От: {CLIENT_NAME}
Дата: {DATE}
Текст претензии:
{CLAIM_TEXT}
Требования:
1. Возместить ущерб в размере {AMOUNT} рублей
2. {OTHER_REQUIREMENTS}
С уважением,
{CLIENT_NAME}
🚀 Как добавить новый шаблон?
Способ 1: Через веб-интерфейс Nextcloud
- Зайди в Nextcloud:
https://office.clientright.ru:8443 - Перейди в папку
/Templates/(или создай её, если нет) - Загрузи DOCX файл с переменными
- Готово! Шаблон доступен через API
Способ 2: Через WebDAV
# Загрузить шаблон через WebDAV
curl -u admin:office \
-T "pretenziya.docx" \
"https://office.clientright.ru:8443/remote.php/dav/files/admin/Templates/pretenziya.docx" \
-k
Способ 3: Через OnlyOffice (для общих шаблонов)
- Зайди в настройки OnlyOffice в Nextcloud
- Раздел "Общие шаблоны"
- Загрузи шаблон
- Он сохранится в
/var/www/html/data/appdata_*/onlyoffice/template/
🎨 Рекомендации по созданию шаблонов
1. Названия шаблонов:
pretenziya.docx- Претензияiskovoe_zayavlenie.docx- Исковое заявлениеzhaloba.docx- Жалобаhodataystvo.docx- Ходатайствоsoglashenie.docx- Соглашение
2. Структура документа:
- Шапка (кому, от кого, дата)
- Фабула (описание ситуации)
- Требования
- Ссылки на право
- Приложения
3. Переменные:
- ✅ Используй понятные названия:
CLIENT_NAME,AMOUNT,DATE - ✅ Все переменные в верхнем регистре
- ✅ Обрамляй фигурными скобками:
{VAR}или{{VAR}} - ✅ Избегай пробелов:
{CLIENT_NAME}✅,{CLIENT NAME}❌
🔍 Отладка
Проверить наличие шаблона:
curl -u admin:office \
"https://office.clientright.ru:8443/remote.php/dav/files/admin/Templates/pretenziya.docx" \
-k -I
Ожидаемый ответ: HTTP/1.1 200 OK
Посмотреть логи:
tail -f /var/log/apache2/error.log | grep "CREATE FROM TEMPLATE"
Проверить список шаблонов:
curl "https://crm.clientright.ru/crm_extensions/file_storage/api/list_templates.php" | jq
⚠️ Ограничения
-
PHPWord работает только с DOCX файлами
- Для XLSX и PPTX используется простая замена текста
- Сложное форматирование (таблицы, изображения) может не сохраниться
-
Переменные должны быть в тексте
- Не работают переменные в заголовках/колонтитулах (ограничение PHPWord)
- Не работают переменные в таблицах (частично)
-
Размер шаблона
- Большие шаблоны (>10MB) могут загружаться медленно
🎯 Примеры использования
Пример 1: Создать претензию из шаблона
// В JavaScript (например, в CRM)
function createClaimFromTemplate(projectId, projectName, claimData) {
const url = `/crm_extensions/file_storage/api/create_from_template.php?` +
`module=Project&` +
`recordId=${projectId}&` +
`recordName=${encodeURIComponent(projectName)}&` +
`fileName=Претензия_${new Date().getTime()}&` +
`templateName=pretenziya.docx&` +
`variables=${encodeURIComponent(JSON.stringify({
CLIENT_NAME: claimData.clientName,
DATE: new Date().toLocaleDateString('ru-RU'),
AMOUNT: claimData.amount,
RESPONDENT_NAME: claimData.respondentName,
CLAIM_TEXT: claimData.text,
OTHER_REQUIREMENTS: claimData.requirements || ''
}))}`;
window.open(url, '_blank');
}
Пример 2: Получить список шаблонов и показать в UI
async function loadTemplates() {
const response = await fetch('/crm_extensions/file_storage/api/list_templates.php');
const data = await response.json();
if (data.success) {
const templateSelect = document.getElementById('templateSelect');
data.templates.forEach(template => {
const option = document.createElement('option');
option.value = template.fileName;
option.textContent = template.name;
templateSelect.appendChild(option);
});
}
}
📚 Полезные ссылки
❓ FAQ
Q: Можно ли использовать шаблоны из папки /crm/Templates/?
A: Да, но нужно изменить путь в list_templates.php и create_from_template.php с /Templates/ на /crm/Templates/.
Q: Как обновить шаблон?
A: Просто загрузи новый файл с тем же именем в Nextcloud через веб-интерфейс или WebDAV.
Q: Можно ли использовать шаблоны OnlyOffice напрямую?
A: Да, но они хранятся в специальной папке. Лучше скопировать их в /Templates/ для единообразия.
Q: Работают ли переменные в таблицах?
A: Частично. PHPWord может заменить переменные в ячейках таблиц, но сложное форматирование может потеряться.
Готово! Теперь ты знаешь, как работать с шаблонами в Nextcloud! 🎉