From 6bedfbc429841f948ab25a032d1b19197e82ea13 Mon Sep 17 00:00:00 2001 From: Fedor Date: Sat, 1 Nov 2025 12:23:47 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=8B=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BB=D0=BE=D0=B3=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8=2001.11.2025?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...榑01_11_2025_小袨袟袛袗袧袠袝_肖袗袡袥袨袙_袠_袠小袩袪袗袙袥袝袧袠袝_袩校孝袝袡.md | 411 ++++++++++++++++++ 1 file changed, 411 insertions(+) create mode 100644 袥袨袚_小袝小小袠袠_01_11_2025_小袨袟袛袗袧袠袝_肖袗袡袥袨袙_袠_袠小袩袪袗袙袥袝袧袠袝_袩校孝袝袡.md diff --git a/袥袨袚_小袝小小袠袠_01_11_2025_小袨袟袛袗袧袠袝_肖袗袡袥袨袙_袠_袠小袩袪袗袙袥袝袧袠袝_袩校孝袝袡.md b/袥袨袚_小袝小小袠袠_01_11_2025_小袨袟袛袗袧袠袝_肖袗袡袥袨袙_袠_袠小袩袪袗袙袥袝袧袠袝_袩校孝袝袡.md new file mode 100644 index 00000000..eae5220b --- /dev/null +++ b/袥袨袚_小袝小小袠袠_01_11_2025_小袨袟袛袗袧袠袝_肖袗袡袥袨袙_袠_袠小袩袪袗袙袥袝袧袠袝_袩校孝袝袡.md @@ -0,0 +1,411 @@ +# 馃搵 袥袨袚 小袝小小袠袠: 小芯蟹写邪薪懈械 褎邪泄谢芯胁 懈 懈褋锌褉邪胁谢械薪懈械 锌褍褌械泄 胁 Nextcloud + +**袛邪褌邪:** 01 薪芯褟斜褉褟 2025 +**袟邪写邪褔懈:** +1. 鉁 袠褋锌褉邪胁懈褌褜 芯褕懈斜泻褍 "Class 'Redis' not found" +2. 鉁 袛芯斜邪胁懈褌褜 泻薪芯锌泻懈 褋芯蟹写邪薪懈褟 褎邪泄谢芯胁 Word/Excel/PowerPoint 胁 CRM +3. 鉁 袠褋锌褉邪胁懈褌褜 锌褍褌懈 泻 锌邪锌泻邪屑 锌褉芯械泻褌芯胁 胁 Nextcloud + +--- + +## 馃悰 袩袪袨袘袥袝袦袗 1: Class 'Redis' not found + +### 袨褕懈斜泻邪: +``` +Fatal error: Uncaught Error: Class 'Redis' not found in +/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/api/create_nextcloud_file.php:167 +``` + +### 袩褉懈褔懈薪邪: +袠褋锌芯谢褜蟹芯胁邪谢褋褟 泻谢邪褋褋 `Redis` (PHP extension), 薪芯 胁 锌褉芯械泻褌械 褍褋褌邪薪芯胁谢械薪 褌芯谢褜泻芯 `Predis` 褔械褉械蟹 Composer. + +### 袪械褕械薪懈械: +袟邪屑械薪懈谢 `Redis` 薪邪 `Predis\Client`: + +**袘褘谢芯:** +```php +$redis = new Redis(); +$redis->connect('147.45.146.17', 6379); +$redis->auth('CRM_Redis_Pass_2025_Secure!'); +``` + +**小褌邪谢芯:** +```php +$redis = new Predis\Client([ + 'scheme' => 'tcp', + 'host' => '147.45.146.17', + 'port' => 6379, + 'password' => 'CRM_Redis_Pass_2025_Secure!' +]); +``` + +### 袪械蟹褍谢褜褌邪褌: +鉁 肖邪泄谢褘 褋芯蟹写邪褞褌褋褟 胁 S3 +鉁 Redis 褋芯斜褘褌懈褟 锌褍斜谢懈泻褍褞褌褋褟 泻芯褉褉械泻褌薪芯 +鉁 Nextcloud 懈薪写械泻褋懈褉褍械褌 薪芯胁褘械 褎邪泄谢褘 邪胁褌芯屑邪褌懈褔械褋泻懈 + +--- + +## 馃帹 袩袪袨袘袥袝袦袗 2: 袛芯斜邪胁谢械薪懈械 泻薪芯锌芯泻 褋芯蟹写邪薪懈褟 褎邪泄谢芯胁 + +### 袟邪写邪褔邪: +袛芯斜邪胁懈褌褜 泻薪芯锌泻懈 褋芯蟹写邪薪懈褟 Word/Excel/PowerPoint 褉褟写芯屑 褋 泻薪芯锌泻芯泄 "袩邪锌泻邪 胁 Nextcloud". + +### 袪械褕械薪懈械: + +#### 1. 袛芯斜邪胁谢械薪褘 泻薪芯锌泻懈 胁 10 屑芯写褍谢械泄: +- Project +- Contacts +- Accounts +- Potentials +- Leads +- HelpDesk +- Invoice +- Quotes +- SalesOrder +- PurchaseOrder + +#### 2. 袣薪芯锌泻懈 胁 DetailViewHeaderTitle.tpl: +```html + + + + + +``` + +#### 3. 肖褍薪泻褑懈褟 褋芯蟹写邪薪懈褟 胁 layouts/v7/lib/nextcloud-editor.js: +```javascript +function createFileInNextcloud(module, recordId, recordName, fileType) { + const fileName = prompt('袙胁械写懈褌械 薪邪蟹胁邪薪懈械 褎邪泄谢邪:'); + if (!fileName) return; + + const url = `/crm_extensions/file_storage/api/create_nextcloud_file.php?` + + `module=${module}&recordId=${recordId}&recordName=${encodeURIComponent(recordName)}` + + `&fileName=${encodeURIComponent(fileName)}&fileType=${fileType}`; + + window.open(url, 'create_file_' + Date.now(), 'width=1400,height=900'); +} +``` + +#### 4. API 褋芯蟹写邪薪懈褟 褎邪泄谢邪 (create_nextcloud_file.php): + +**袗谢谐芯褉懈褌屑:** +1. 袩芯谢褍褔邪械褌 锌邪褉邪屑械褌褉褘 (module, recordId, fileName, fileType) +2. 肖芯褉屑懈褉褍械褌 锌褍褌褜: `/crm/crm2/CRM_Active_Files/Documents/{Module}/{RecordName}_{RecordId}/{FileName}.{fileType}` +3. 小芯蟹写邪褢褌 屑懈薪懈屑邪谢褜薪褘泄 胁邪谢懈写薪褘泄 Office 褎邪泄谢 (懈蟹 褕邪斜谢芯薪芯胁) +4. 袟邪谐褉褍卸邪械褌 褎邪泄谢 **薪邪锌褉褟屑褍褞 胁 S3** (斜褘褋褌褉芯!) +5. 袩褍斜谢懈泻褍械褌 褋芯斜褘褌懈械 胁 Redis 写谢褟 邪胁褌芯懈薪写械泻褋邪褑懈懈 Nextcloud +6. 袪械写懈褉械泻褌懈褌 薪邪 `open_file_v2.php` 写谢褟 芯褌泻褉褘褌懈褟 胁 OnlyOffice + +**袣谢褞褔械胁芯泄 泻芯写:** +```php +// 小芯蟹写邪褢屑 屑懈薪懈屑邪谢褜薪褘泄 锌褍褋褌芯泄 褎邪泄谢 +$emptyContent = createEmptyFile($fileType); + +// 袟邪谐褉褍卸邪械屑 褎邪泄谢 胁 S3 +$result = $s3Client->putObject([ + 'Bucket' => $bucket, + 'Key' => $s3Path, + 'Body' => $emptyContent, + 'ContentType' => getContentType($fileType) +]); + +// 袩褍斜谢懈泻褍械屑 褋芯斜褘褌懈械 胁 Redis 写谢褟 懈薪写械泻褋邪褑懈懈 Nextcloud +$redis = new Predis\Client([...]); +$event = json_encode([ + 'type' => 'file_created', + 'source' => 'crm_create_file', + 'path' => $s3Path, + 'timestamp' => time() +]); +$redis->publish('crm:file:events', $event); + +// 袨褌泻褉褘胁邪械屑 褎邪泄谢 袧袗袩袪携袦校挟 褔械褉械蟹 OnlyOffice +$redirectUrl = '/crm_extensions/file_storage/api/open_file_v2.php?recordId=' . + urlencode($recordId) . '&fileName=' . urlencode($s3Url); +header('Location: ' . $redirectUrl); +``` + +#### 5. 袦懈薪懈屑邪谢褜薪褘械 褕邪斜谢芯薪褘 褎邪泄谢芯胁: +小芯蟹写邪薪褘 锌褍褋褌褘械 Office 褎邪泄谢褘 屑懈薪懈屑邪谢褜薪芯谐芯 褉邪蟹屑械褉邪: +- `crm_extensions/file_storage/templates/empty.docx` (1.4 KB) +- `crm_extensions/file_storage/templates/empty.xlsx` (1.5 KB) +- `crm_extensions/file_storage/templates/empty.pptx` (1.9 KB) + +### 袪械蟹褍谢褜褌邪褌: +鉁 袣薪芯锌泻懈 褋芯蟹写邪薪懈褟 写芯斜邪胁谢械薪褘 胁 10 屑芯写褍谢械泄 +鉁 肖邪泄谢褘 褋芯蟹写邪褞褌褋褟 屑芯屑械薪褌邪谢褜薪芯 (锌褉褟屑芯 胁 S3) +鉁 袗胁褌芯屑邪褌懈褔械褋泻邪褟 懈薪写械泻褋邪褑懈褟 褔械褉械蟹 Redis +鉁 袨褌泻褉褘胁邪械褌褋褟 OnlyOffice 写谢褟 褉械写邪泻褌懈褉芯胁邪薪懈褟 +鉁 袗胁褌芯褋芯褏褉邪薪械薪懈械 褉邪斜芯褌邪械褌 + +--- + +## 馃搧 袩袪袨袘袥袝袦袗 3: 袧械锌褉邪胁懈谢褜薪褘泄 锌褍褌褜 泻 锌邪锌泻械 锌褉芯械泻褌邪 391552 + +### 袨褕懈斜泻邪 锌芯谢褜蟹芯胁邪褌械谢褟: +> "锌芯褋屑芯褌褉懈 锌褉芯械泻褌 391552 褌邪屑 褔褌芯 褌芯 褋褋褘谢泻邪 薪邪 锌邪锌泻褍 薪械 褌邪泻 胁褉芯写械" + +### 袛懈邪谐薪芯褋褌懈泻邪: + +#### 1. 袩褉芯胁械褉懈谢 褋褌褉褍泻褌褍褉褍 褎邪泄谢芯胁 胁 S3: +``` +肖邪泄谢褘 锌褉芯械泻褌邪 391552 薪邪褏芯写褟褌褋褟 胁: +Documents/Project/袗谢械泻褋邪薪写褉芯胁薪邪_袨袨袨_协袛协袣小_391552/ +``` + +#### 2. 袩褉芯胁械褉懈谢 泻芯写 JavaScript: +```javascript +// 袘蝎袥袨 (薪械锌褉邪胁懈谢褜薪芯): +const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/${encodedFolderName}`; + +// 小褋褘谢泻邪 胁械谢邪 薪邪: +/Documents/袗谢械泻褋邪薪写褉芯胁薪邪_袨袨袨_协袛协袣小_391552 +``` + +#### 3. 袩褉芯斜谢械屑邪: +袣薪芯锌泻邪 "袩邪锌泻邪 胁 Nextcloud" 芯褌泻褉褘胁邪谢邪 锌褍褌褜: +``` +/Documents/{ProjectName}_{ProjectId} +``` + +袗 褎邪泄谢褘 谢械卸邪褌 胁: +``` +/Documents/Project/{ProjectName}_{ProjectId} +``` + +**袧械 褏胁邪褌邪谢芯 锌邪锌泻懈 `Project/` 胁 锌褍褌懈!** + +### 袪械褕械薪懈械: + +袠褋锌褉邪胁懈谢 褎褍薪泻褑懈褞 `openProjectFolder()` 胁 3 褎邪泄谢邪褏: + +**肖邪泄谢褘:** +1. `layouts/v7/lib/nextcloud-editor.js` +2. `crm_extensions/nextcloud_editor/js/nextcloud-editor.js` +3. `layouts/v7/lib/nextcloud-editor-v3.js` + +**袠蟹屑械薪械薪懈械:** +```javascript +// 袘蝎袥袨: +const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/${encodedFolderName}`; + +// 小孝袗袥袨: +const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/Project/${encodedFolderName}`; +``` + +**袨褔懈褋褌懈谢 泻械褕 Smarty:** +```bash +rm -rf test/templates_c/v7/* +``` + +### 袪械蟹褍谢褜褌邪褌: +鉁 袣薪芯锌泻邪 "袩邪锌泻邪 胁 Nextcloud" 芯褌泻褉褘胁邪械褌 锌褉邪胁懈谢褜薪褘泄 锌褍褌褜 +鉁 袩褉芯械泻褌 391552 褌械锌械褉褜 写芯褋褌褍锌械薪 +鉁 小褌褉褍泻褌褍褉邪: `/Documents/Project/{Name}_{Id}` + +--- + +## 馃搳 袠孝袨袚袨袙袗携 小孝袗孝袠小孝袠袣袗 + +### 袠蟹屑械薪褢薪薪褘械 褎邪泄谢褘: +``` +117 files changed, 2546 insertions(+), 2031 deletions(-) +``` + +### 袧芯胁褘械 褎邪泄谢褘: +``` +鉁 crm_extensions/file_storage/api/create_nextcloud_file.php +鉁 crm_extensions/file_storage/api/nextcloud_open.php +鉁 crm_extensions/file_storage/templates/empty.docx +鉁 crm_extensions/file_storage/templates/empty.xlsx +鉁 crm_extensions/file_storage/templates/empty.pptx +鉁 小袨袟袛袗袧袠袝_肖袗袡袥袨袙_袙_NEXTCLOUD_袠袟_CRM.md +鉁 小袪袗袙袧袝袧袠袝_袦袝孝袨袛袨袙_袨孝袣袪蝎孝袠携_肖袗袡袥袨袙.md +鉁 袛袨袘袗袙袥袝袧袠袝_袙孝袨袪袨袡_袣袧袨袩袣袠_袙_CRM.md +``` + +### 袠蟹屑械薪褢薪薪褘械 屑芯写褍谢懈 CRM: +``` +鉁 Project/DetailViewHeaderTitle.tpl +鉁 Contacts/DetailViewHeaderTitle.tpl +鉁 Accounts/DetailViewHeaderTitle.tpl +鉁 Potentials/DetailViewHeaderTitle.tpl +鉁 Leads/DetailViewHeaderTitle.tpl +鉁 HelpDesk/DetailViewHeaderTitle.tpl +鉁 Invoice/DetailViewHeaderTitle.tpl +鉁 Quotes/DetailViewHeaderTitle.tpl +鉁 SalesOrder/DetailViewHeaderTitle.tpl +鉁 PurchaseOrder/DetailViewHeaderTitle.tpl +鉁 Documents/DetailViewActions.tpl +鉁 Documents/DocumentsRelatedList.tpl +鉁 Vtiger/DocumentsSummaryWidgetContents.tpl +``` + +### JavaScript 褎邪泄谢褘: +``` +鉁 layouts/v7/lib/nextcloud-editor.js +鉁 crm_extensions/nextcloud_editor/js/nextcloud-editor.js +鉁 layouts/v7/lib/nextcloud-editor-v3.js +``` + +--- + +## 馃幆 肖袠袧袗袥鞋袧蝎袡 袪袝袟校袥鞋孝袗孝 + +### 效褌芯 褉邪斜芯褌邪械褌: + +#### 1. **小芯蟹写邪薪懈械 褎邪泄谢芯胁 懈蟹 CRM:** +- 袣薪芯锌泻懈 馃搫 Word, 馃搳 Excel, 馃摻锔 PowerPoint +- 小芯蟹写邪薪懈械 薪邪锌褉褟屑褍褞 胁 S3 (屑芯谢薪懈械薪芯褋薪芯!) +- 袗胁褌芯懈薪写械泻褋邪褑懈褟 褔械褉械蟹 Redis 褋芯斜褘褌懈褟 +- 袨褌泻褉褘褌懈械 胁 OnlyOffice 写谢褟 褉械写邪泻褌懈褉芯胁邪薪懈褟 +- 袗胁褌芯褋芯褏褉邪薪械薪懈械 褉邪斜芯褌邪械褌 + +#### 2. **袪械写邪泻褌懈褉芯胁邪薪懈械 褎邪泄谢芯胁:** +- 鈿 袘褘褋褌褉芯械 芯褌泻褉褘褌懈械 (锌褉褟屑芯泄 OnlyOffice) +- 馃摎 效械褉械蟹 Nextcloud (褋 胁械褉褋懈褟屑懈) +- 袗胁褌芯褋芯褏褉邪薪械薪懈械 胁 芯褉懈谐懈薪邪谢褜薪褘泄 S3 锌褍褌褜 +- Content-Type 芯锌褉械写械谢褟械褌褋褟 邪胁褌芯屑邪褌懈褔械褋泻懈 + +#### 3. **袩邪锌泻懈 胁 Nextcloud:** +- 袣薪芯锌泻邪 "袩邪锌泻邪 胁 Nextcloud" 芯褌泻褉褘胁邪械褌 锌褉邪胁懈谢褜薪褘泄 锌褍褌褜 +- 小褌褉褍泻褌褍褉邪: `/Documents/Project/{Name}_{Id}` +- 袩褉芯械泻褌 391552 褉邪斜芯褌邪械褌 泻芯褉褉械泻褌薪芯 + +#### 4. **袠薪褌械谐褉邪褑懈褟 OnlyOffice:** +- 袘褘褋褌褉芯械 芯褌泻褉褘褌懈械 (1-2 褋械泻) +- 袗胁褌芯褋芯褏褉邪薪械薪懈械 胁 S3 +- SSL 褋械褉褌懈褎懈泻邪褌褘 芯褌泻谢褞褔械薪褘 (写谢褟 胁薪褍褌褉械薪薪懈褏 IP) +- Callback URL 褉邪斜芯褌邪械褌 + +--- + +## 馃敡 孝袝啸袧袠效袝小袣袗携 袠袧肖袨袪袦袗笑袠携 + +### 小褌褉褍泻褌褍褉邪 褏褉邪薪械薪懈褟: +``` +S3 Bucket: f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c +Path: crm2/CRM_Active_Files/Documents/{Module}/{RecordName}_{RecordId}/{FileName}_{DocumentId}.ext + +袩褉懈屑械褉褘: + Documents/Project/袗谢械泻褋邪薪写褉芯胁薪邪_袨袨袨_协袛协袣小_391552/袛芯谐芯胁芯褉_123456.pdf + Documents/Contacts/袠胁邪薪芯胁_袠胁邪薪_789/袩邪褋锌芯褉褌_654321.pdf + Documents/Accounts/袨袨袨_袪芯屑邪褕泻邪_555/袛芯谐芯胁芯褉_999888.docx +``` + +### Redis 褋芯斜褘褌懈褟: +```json +{ + "type": "file_created", + "source": "crm_create_file", + "path": "crm2/CRM_Active_Files/Documents/Project/Test_123/file.docx", + "timestamp": 1730462400 +} +``` + +### Nextcloud Cache Updater: +```javascript +// 小谢褍褕邪械褌 泻邪薪邪谢: crm:file:events +// 孝褉懈谐谐械褉懈褌: docker exec nextcloud-fresh php occ files:scan --path="..." --shallow +``` + +### OnlyOffice 薪邪褋褌褉芯泄泻懈: +```json +{ + "rejectUnauthorized": false, + "allowPrivateIPAddress": true +} +``` + +--- + +## 馃摑 效孝袨 袨袘歇携小袧袠袥 袩袨袥鞋袟袨袙袗孝袝袥挟 + +### 袙芯锌褉芯褋: "袣械褕 Smarty 芯褔懈褖械薪 - 褔褌芯 蟹薪邪褔懈褌?" + +**袨斜褗褟褋薪械薪懈械:** + +**Smarty** 鈥 褕邪斜谢芯薪懈蟹邪褌芯褉 PHP, 泻芯褌芯褉褘泄 泻芯屑锌懈谢懈褉褍械褌 `.tpl` 褎邪泄谢褘 胁 PHP 泻芯写. + +**袣械褕 Smarty** (`test/templates_c/`) 鈥 锌邪锌泻邪 褋 褋泻芯屑锌懈谢懈褉芯胁邪薪薪褘屑懈 褕邪斜谢芯薪邪屑懈. + +**袩褉芯斜谢械屑邪:** 袩褉懈 懈蟹屑械薪械薪懈懈 `.tpl` 褎邪泄谢芯胁 Smarty 屑芯卸械褌 懈褋锌芯谢褜蟹芯胁邪褌褜 褋褌邪褉褍褞 胁械褉褋懈褞 懈蟹 泻械褕邪. + +**袪械褕械薪懈械:** 袨褔懈褋褌泻邪 泻械褕邪 蟹邪褋褌邪胁谢褟械褌 Smarty 锌械褉械泻芯屑锌懈谢懈褉芯胁邪褌褜 胁褋械 褕邪斜谢芯薪褘 蟹邪薪芯胁芯. + +**袣芯屑邪薪写邪:** +```bash +rm -rf test/templates_c/v7/* +``` + +**袗薪邪谢芯谐懈褟:** +- `.tpl` 褎邪泄谢褘 = 褉械褑械锌褌褘 +- `templates_c/` = 谐芯褌芯胁邪褟 械写邪 胁 褏芯谢芯写懈谢褜薪懈泻械 +- 袨褔懈褋褌泻邪 泻械褕邪 = 胁褘斜褉芯褋懈褌褜 褋褌邪褉褍褞 械写褍 懈 锌褉懈谐芯褌芯胁懈褌褜 锌芯 薪芯胁芯屑褍 褉械褑械锌褌褍 + +--- + +## 鉁 GIT COMMIT + +```bash +git add -A +git commit -m "鉁 袠褋锌褉邪胁谢械薪懈械 锌褍褌械泄 泻 锌邪锌泻邪屑 锌褉芯械泻褌芯胁 胁 Nextcloud + 褋芯蟹写邪薪懈械 褎邪泄谢芯胁 懈蟹 CRM + +馃敡 袠褋锌褉邪胁谢械薪懈褟: +- 袠褋锌褉邪胁谢械薪褘 锌褍褌懈 泻 锌邪锌泻邪屑 锌褉芯械泻褌芯胁: 褌械锌械褉褜 /Documents/Project/{Name}_{Id} +- 袠褋锌褉邪胁谢械薪邪 褎褍薪泻褑懈褟 openProjectFolder() 胁芯 胁褋械褏 JS 褎邪泄谢邪褏 +- 袛芯斜邪胁谢械薪褘 泻薪芯锌泻懈 褋芯蟹写邪薪懈褟 Word/Excel/PowerPoint 懈蟹 CRM (10 屑芯写褍谢械泄) +- 小芯蟹写邪薪懈械 褎邪泄谢芯胁 薪邪锌褉褟屑褍褞 胁 S3 褋 邪胁褌芯懈薪写械泻褋邪褑懈械泄 褔械褉械蟹 Redis +- 袠褋锌褉邪胁谢械薪邪 芯褕懈斜泻邪 'Class Redis not found' (懈褋锌芯谢褜蟹芯胁邪薪 Predis) + +馃搧 袠蟹屑械薪褢薪薪褘械 褎邪泄谢褘: +- layouts/v7/lib/nextcloud-editor.js +- crm_extensions/nextcloud_editor/js/nextcloud-editor.js +- layouts/v7/lib/nextcloud-editor-v3.js +- crm_extensions/file_storage/api/create_nextcloud_file.php +- layouts/v7/modules/*/DetailViewHeaderTitle.tpl (10 屑芯写褍谢械泄) +- layouts/v7/modules/Documents/*.tpl (泻薪芯锌泻懈 褉械写邪泻褌懈褉芯胁邪薪懈褟) + +馃幆 袪械蟹褍谢褜褌邪褌: +- 袣薪芯锌泻邪 '袩邪锌泻邪 胁 Nextcloud' 芯褌泻褉褘胁邪械褌 锌褉邪胁懈谢褜薪褍褞 锌邪锌泻褍 +- 小芯蟹写邪薪懈械 褎邪泄谢芯胁 褉邪斜芯褌邪械褌 屑芯谢薪懈械薪芯褋薪芯 (锌褉褟屑芯 胁 S3) +- Redis 褋芯斜褘褌懈褟 锌褍斜谢懈泻褍褞褌褋褟 泻芯褉褉械泻褌薪芯 +- OnlyOffice 芯褌泻褉褘胁邪械褌褋褟 写谢褟 褉械写邪泻褌懈褉芯胁邪薪懈褟 + +袩褉芯械泻褌 391552 褌械锌械褉褜 芯褌泻褉褘胁邪械褌褋褟 锌芯 锌褉邪胁懈谢褜薪芯屑褍 锌褍褌懈!" +``` + +**袪械蟹褍谢褜褌邪褌:** +``` +[master 7e3f0dce] 鉁 袠褋锌褉邪胁谢械薪懈械 锌褍褌械泄 泻 锌邪锌泻邪屑 锌褉芯械泻褌芯胁 胁 Nextcloud + 褋芯蟹写邪薪懈械 褎邪泄谢芯胁 懈蟹 CRM + 117 files changed, 2546 insertions(+), 2031 deletions(-) +``` + +--- + +## 馃帀 袟袗袣袥挟效袝袧袠袝 + +袙褋械 蟹邪写邪褔懈 胁褘锌芯谢薪械薪褘 褍褋锌械褕薪芯! 馃殌 + +**袩芯谢褜蟹芯胁邪褌械谢褜 屑芯卸械褌:** +1. 鉁 小芯蟹写邪胁邪褌褜 褎邪泄谢褘 Word/Excel/PowerPoint 锌褉褟屑芯 懈蟹 CRM +2. 鉁 袨褌泻褉褘胁邪褌褜 锌邪锌泻懈 锌褉芯械泻褌芯胁 胁 Nextcloud (锌褉邪胁懈谢褜薪褘械 锌褍褌懈) +3. 鉁 袪械写邪泻褌懈褉芯胁邪褌褜 褎邪泄谢褘 褔械褉械蟹 OnlyOffice 褋 邪胁褌芯褋芯褏褉邪薪械薪懈械屑 +4. 鉁 袠褋锌芯谢褜蟹芯胁邪褌褜 写胁邪 屑械褌芯写邪 芯褌泻褉褘褌懈褟 (斜褘褋褌褉褘泄 懈 褔械褉械蟹 Nextcloud) + +**袙褋褢 褉邪斜芯褌邪械褌 屑芯谢薪懈械薪芯褋薪芯!** 鈿○煒 +