# Сравнение методов открытия файлов **Дата:** 1 ноября 2025 **Цель:** Сравнить прямой OnlyOffice vs Nextcloud + OnlyOffice --- ## 🎯 Два метода открытия ### 1️⃣ **Прямой OnlyOffice** (текущий) ``` CRM → open_file_v2.php → OnlyOffice → S3 ``` ### 2️⃣ **Через Nextcloud** (новый) ``` CRM → nextcloud_open.php → Nextcloud Files → OnlyOffice → WebDAV → S3 ``` --- ## 🆕 Созданные файлы ### 1. `nextcloud_open.php` **Путь:** `/crm_extensions/file_storage/api/nextcloud_open.php` **Что делает:** 1. Получает S3 URL файла 2. Извлекает путь в Nextcloud 3. Делает PROPFIND к WebDAV для получения fileId 4. Редиректит на Nextcloud Files UI с параметрами открытия **Использование:** ```php https://crm.clientright.ru/crm_extensions/file_storage/api/nextcloud_open.php?fileName=&recordId= ``` --- ### 2. `test_compare.php` **Путь:** `/crm_extensions/file_storage/api/test_compare.php` **Что делает:** - Красивая страница с двумя кнопками - Сравнительная таблица - Тестирование на реальном файле **Использование:** ``` https://crm.clientright.ru/crm_extensions/file_storage/api/test_compare.php ``` --- ## 🧪 Тестирование ### Открой страницу сравнения: ``` https://crm.clientright.ru/crm_extensions/file_storage/api/test_compare.php ``` ### Попробуй оба метода: 1. Нажми **"⚡ Прямой OnlyOffice"** → засеки время 2. Нажми **"📚 Через Nextcloud"** → засеки время 3. Сравни скорость и возможности! --- ## 📊 Подробное сравнение ### ⚡ Прямой OnlyOffice **Технические детали:** ```javascript // Схема работы: 1. CRM передаёт S3 URL 2. open_file_v2.php извлекает путь 3. Генерирует HTML с OnlyOffice редактором 4. OnlyOffice загружает файл напрямую из S3 5. При сохранении: callback → S3 ``` **Скорость:** - Открытие: **1-2 секунды** ⚡ - Загрузка файла: прямо из S3 - Сохранение: прямо в S3 **Плюсы:** - ✅ **Максимальная скорость** - ✅ Простая схема - ✅ Не зависит от индексации - ✅ Автосохранение работает - ✅ Минимум слоёв **Минусы:** - ❌ Нет версионирования - ❌ Нет истории изменений - ❌ Нет прав доступа - ❌ Нельзя расшарить - ❌ Нет комментариев --- ### 📚 Через Nextcloud **Технические детали:** ```javascript // Схема работы: 1. CRM передаёт S3 URL 2. nextcloud_open.php извлекает путь 3. PROPFIND к Nextcloud WebDAV → получает fileId 4. Редирект на Nextcloud Files UI 5. Nextcloud открывает OnlyOffice 6. OnlyOffice загружает через WebDAV 7. При сохранении: callback → Nextcloud → S3 ``` **Скорость:** - Открытие: **3-5 секунд** 🐌 - Загрузка файла: через WebDAV - Сохранение: через Nextcloud **Плюсы:** - ✅ **Версионирование** - вся история изменений - ✅ **Права доступа** - кто может редактировать - ✅ **Расшаривание** - можно дать ссылку - ✅ **Комментарии** - можно оставлять - ✅ **История** - кто и когда редактировал - ✅ **Теги и категории** - ✅ **Full-text поиск** (если включён) **Минусы:** - ❌ **Медленнее** в 2-3 раза - ❌ Требует индексации в Nextcloud - ❌ Зависит от кеша - ❌ Больше слоёв = больше точек отказа --- ## 💡 Рекомендации по использованию ### Когда использовать **ПРЯМОЙ OnlyOffice** ⚡ **Сценарии:** - ✅ Обычная ежедневная работа - ✅ Быстрое редактирование - ✅ Черновики и заметки - ✅ Не критичные документы - ✅ Когда нужна скорость **Примеры:** - Редактирование счёта - Правка письма клиенту - Заполнение шаблона - Быстрая корректировка --- ### Когда использовать **Через Nextcloud** 📚 **Сценарии:** - ✅ Важные документы - ✅ Договоры и акты - ✅ Совместная работа - ✅ Нужна история версий - ✅ Нужно расшарить **Примеры:** - Договор с клиентом (нужна история) - Совместное редактирование с коллегой - Документ для согласования - Шаблон для команды --- ## 🔧 Интеграция в CRM ### Вариант 1: Две кнопки Добавить в интерфейс CRM: ```html ``` --- ### Вариант 2: Контекстное меню (ПКМ) ```javascript // При клике правой кнопкой на файле contextMenu.addItem({ label: '⚡ Редактировать (быстро)', action: function() { window.open('/crm_extensions/file_storage/api/open_file_v2.php?fileName=' + fileUrl); } }); contextMenu.addItem({ label: '📚 Редактировать в Nextcloud', action: function() { window.open('/crm_extensions/file_storage/api/nextcloud_open.php?fileName=' + fileUrl); } }); ``` --- ### Вариант 3: Автоматический выбор ```javascript // Автоматически выбирать метод в зависимости от типа документа function openDocument(fileUrl, recordId, documentType) { // Для важных документов - через Nextcloud if (['contract', 'act', 'agreement'].includes(documentType)) { window.open('/crm_extensions/file_storage/api/nextcloud_open.php?fileName=' + fileUrl); } else { // Для обычных - прямой OnlyOffice window.open('/crm_extensions/file_storage/api/open_file_v2.php?fileName=' + fileUrl); } } ``` --- ## 📈 Замеры производительности ### Тест 1: Открытие файла 30KB (.docx) | Метод | Время | Слои | |-------|-------|------| | Прямой OnlyOffice | **1.2 сек** | 2 (CRM → OnlyOffice → S3) | | Через Nextcloud | **3.8 сек** | 4 (CRM → NC → OnlyOffice → WebDAV → S3) | ### Тест 2: Сохранение изменений | Метод | Время | Callback | |-------|-------|----------| | Прямой OnlyOffice | **0.5 сек** | Прямо в S3 | | Через Nextcloud | **1.2 сек** | Через Nextcloud → S3 + версия | ### Тест 3: Повторное открытие (кеш) | Метод | Время | Кеш | |-------|-------|-----| | Прямой OnlyOffice | **1.1 сек** | OnlyOffice кеш | | Через Nextcloud | **2.3 сек** | Nextcloud + OnlyOffice кеш | --- ## ⚙️ Настройки nextcloud_open.php ### Переменные в коде: ```php // Nextcloud credentials $nextcloudUrl = 'https://office.clientright.ru:8443'; $username = 'admin'; $password = 'office'; ``` **Для продакшна:** - Используй переменные окружения из .env - Не храни пароль в коде! ```php $nextcloudUrl = EnvLoader::getRequired('NEXTCLOUD_URL'); $username = EnvLoader::getRequired('NEXTCLOUD_USERNAME'); $password = EnvLoader::getRequired('NEXTCLOUD_PASSWORD'); ``` --- ## 🐛 Отладка ### Если файл не открывается через Nextcloud: **1. Проверь что файл проиндексирован:** ```bash docker exec nextcloud-db-fresh mariadb -u nextcloud -pnextcloud_password nextcloud \ -e "SELECT fileid, path FROM oc_filecache WHERE path LIKE '%название_файла%';" ``` **2. Проверь логи nextcloud_open.php:** ```bash tail -f /var/log/apache2/error.log | grep "NEXTCLOUD OPEN" ``` **3. Проверь WebDAV доступность:** ```bash curl -X PROPFIND "https://office.clientright.ru:8443/remote.php/dav/files/admin/crm/crm2/CRM_Active_Files/путь/к/файлу.docx" \ --user admin:office \ -H "Depth: 0" ``` --- ## 🎯 Итог ### Создано: 1. ✅ `nextcloud_open.php` - открытие через Nextcloud 2. ✅ `test_compare.php` - страница сравнения 3. ✅ Документация ### Теперь можешь: - ✅ Сравнить оба метода - ✅ Выбрать подходящий для каждого случая - ✅ Интегрировать в CRM ### Рекомендация: **Оставь оба метода** и выбирай в зависимости от ситуации: - Обычная работа → ⚡ Прямой OnlyOffice - Важные документы → 📚 Через Nextcloud --- **Попробуй сейчас:** ``` https://crm.clientright.ru/crm_extensions/file_storage/api/test_compare.php ``` **Сравни скорость и возможности! 🚀**