Изменения документа Создание разделов по шаблону
Редактировал(а) Alexey Semenihin 24.06.2025
От версии 6.1
отредактировано Alexey Semenihin
на 23.04.2025
на 23.04.2025
Изменить комментарий:
К данной версии нет комментариев
К версии 5.1
отредактировано Alexey Semenihin
на 23.04.2025
на 23.04.2025
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,90 +1,212 @@ 1 1 {{velocity}} 2 +=== Прикрепите вложения и используйте кнопки для навигации === 3 +#set($spaceRef = $doc.documentReference.lastSpaceReference.name) 4 +#set($pageName = $doc.documentReference.name) 5 +#set($docFullName = "${spaceRef}.${pageName}") 6 +#set($attachments = $doc.getAttachmentList()) 7 +#set($itemsPerPage = 1) 8 +#set($totalPages = ($attachments.size() + $itemsPerPage - 1) / $itemsPerPage) 9 +#set($currentPage = 1) 10 +#if("$!request.page" != "") 11 + #set($currentPage = $mathtool.toInteger($request.page)) 12 +#end 13 +#set($startIndex = ($currentPage - 1) * $itemsPerPage) 14 +#set($endIndex = $startIndex + $itemsPerPage - 1) 15 +#if($endIndex >= $attachments.size()) 16 + #set($endIndex = $attachments.size() - 1) 17 +#end 2 2 3 -## Подключаем необходимые JS/CSS для работы вкладок 4 -$xwiki.jsfx.use('uicomponents/widgets/tabView.js', {'forceSkinAction': true, 'language': 'xwiki/2.1'}) 5 -$xwiki.ssfx.use('uicomponents/widgets/tabView.css', true) 6 6 {{html}} 7 -<script> 8 -// Ждём загрузки DOM 9 -document.observe("dom:loaded", function() { 10 - // Находим ссылку на вкладку "Вложения" (по ID или тексту) 11 - var attachmentsTab = $('Attachmentslink'); 12 - 13 - // Если вкладка найдена, имитируем клик 14 - if (attachmentsTab) { 15 - attachmentsTab.click(); 16 - } 17 - // Альтернативный вариант (если не сработал ID): 18 - else { 19 - var tabs = $$('.tab-menu a').find(function(tab) { 20 - return tab.textContent.trim().includes('Вложения'); 21 - }); 22 - if (tabs && tabs.length > 0) tabs[0].click(); 23 - } 24 -}); 25 -</script> 20 +<div class="navigation-controls"> 21 + #if($attachments && !$attachments.isEmpty()) 22 + <!-- Выпадающий список для выбора вложения --> 23 + <div class="attachment-selector"> 24 + <label for="attachment-select">Выберите вложение:</label> 25 + <select id="attachment-select"> 26 + #foreach($attachment in $attachments) 27 + <option value="$attachment.filename" #if($velocityCount == $currentPage)selected#end> 28 + $attachment.filename 29 + </option> 30 + #end 31 + </select> 32 + </div> 33 + <!-- Пагинация --> 34 + <div class="pagination-controls"> 35 + #if($currentPage > 1) 36 + #set($prevPage = $currentPage - 1) 37 + <a href="$doc.getURL('view', "page=${prevPage}")" class="btn btn-primary">Назад</a> 38 + #else 39 + <span class="btn btn-disabled">Назад</span> 40 + #end 41 + 42 + <span class="page-info">Страница $currentPage из $totalPages</span> 43 + 44 + #if($currentPage < $totalPages) 45 + #set($nextPage = $currentPage + 1) 46 + <a href="$doc.getURL('view', "page=${nextPage}")" class="btn btn-primary">Далее</a> 47 + #else 48 + <span class="btn btn-disabled">Далее</span> 49 + #end 50 + </div> 51 + #else 52 + <div class="no-attachments-message"> 53 + Нет прикрепленных вложений. Пожалуйста, добавьте файлы для просмотра. 54 + </div> 55 + #end 56 +</div> 26 26 {{/html}} 27 -{{/velocity}} 28 28 29 -{{velocity}} 30 -#set($attachments = $doc.getAttachmentList()) 31 -#foreach($attachment in $attachments) 32 - #set($filename = $attachment.filename) 33 - #set($fileurl = $doc.getAttachmentURL($filename)) 34 - #set($fileExt = $filename.substring($filename.lastIndexOf('.') + 1).toLowerCase()) 35 - 36 - ## Определяем тип файла 37 - #set($isPdf = $fileExt == 'pdf') 38 - #set($isImage = $fileExt == 'png' || $fileExt == 'jpg' || $fileExt == 'jpeg' || $fileExt == 'gif' || $fileExt == 'bmp' || $fileExt == 'svg') 39 - #set($isOffice = $fileExt == 'doc' || $fileExt == 'docx' || $fileExt == 'xls' || $fileExt == 'xlsx' || $fileExt == 'ppt' || $fileExt == 'pptx' || $fileExt == 'odt' || $fileExt == 'ods' || $fileExt == 'odp') 40 - 41 - ## Обрабатываем только поддерживаемые форматы 42 - #if($isPdf || $isImage || $isOffice) 43 - 44 - ===Документ: ${attachment.filename}=== 45 - 46 - #if($isPdf) 59 +#if($attachments && !$attachments.isEmpty()) 60 + #foreach($i in [$startIndex..$endIndex]) 61 + #set($attachment = $attachments.get($i)) 62 + #set($filename = $attachment.filename) 63 + #set($fileurl = $doc.getAttachmentURL($filename, "download")) 64 + #set($fileExtension = $filename.substring($filename.lastIndexOf('.') + 1).toLowerCase()) 65 + 66 + === Документ: $filename === 67 + 47 47 {{html}} 48 - <div class="pdf-viewer-container"> 49 - <iframe 50 - src="/resources/pdfjs/web/viewer.html?file=${fileurl}" 51 - width="100%" 52 - height="600px"> 53 - </iframe> 69 + <div class="document-viewer-container" id="document-viewer"> 70 + #if($fileExtension == 'pdf') 71 + <!-- PDF Viewer --> 72 + <iframe 73 + id="document-frame" 74 + src="/resources/pdfjs/web/viewer.html?file=${escapetool.url($fileurl)}" 75 + width="1200px" 76 + height="600px"> 77 + </iframe> 78 + #elseif($fileExtension == 'doc' || $fileExtension == 'docx' || $fileExtension == 'ppt' || $fileExtension == 'pptx' || $fileExtension == 'xls' || $fileExtension == 'xlsx') 79 + <!-- Office Viewer --> 80 + #set($officeViewerUrl = "${doc.getURL('view')}?xpage=office&attachment=${escapetool.url($filename)}") 81 + <iframe 82 + id="document-frame" 83 + src="$officeViewerUrl" 84 + width="1200px" 85 + height="600px"> 86 + </iframe> 87 + #else 88 + <div class="unsupported-format"> 89 + Формат файла (${fileExtension}) не поддерживается для просмотра. 90 + <a href="${fileurl}">Скачать файл</a> 91 + </div> 92 + #end 54 54 </div> 55 55 {{/html}} 56 - 57 - #elseif($isImage) 58 - [[image:${attachment.filename}]] 59 - 60 - #elseif($isOffice) 61 - {{office attachment="${attachment.filename}" filterStyles="false"/}} 62 - 63 63 #end 64 - #end 96 +#else 97 + 98 + {{html}} 99 + <div class="no-attachments-message"> 100 + Нет доступных вложений для отображения. 101 + </div> 102 + {{/html}} 103 + 65 65 #end 66 66 67 67 {{html}} 68 68 <style> 69 - .pdf-viewer-container { 108 + .navigation-controls { 109 + display: flex; 110 + flex-direction: column; 111 + gap: 15px; 112 + margin-bottom: 20px; 113 + } 114 + .attachment-selector { 115 + display: flex; 116 + align-items: center; 117 + gap: 10px; 118 + } 119 + .attachment-selector select { 120 + padding: 8px; 121 + border-radius: 4px; 122 + min-width: 300px; 123 + } 124 + .document-viewer-container { 70 70 margin: 20px 0; 71 71 border: 1px solid #eee; 72 72 padding: 10px; 73 73 background: #f9f9f9; 74 74 } 75 - 76 - /* Стили для изображений */ 77 - .image-wrapper { 78 - max-width: 100%; 79 - margin: 10px 0; 130 + .pagination-controls { 131 + margin: 20px 0; 132 + display: flex; 133 + justify-content: center; 134 + align-items: center; 135 + gap: 20px; 80 80 } 81 - 82 - /* Стили для офисных документов */ 83 - .office-document { 84 - border: 1px solid #ddd; 85 - margin: 15px 0; 86 - min-height: 500px; 137 + .btn { 138 + padding: 8px 16px; 139 + border-radius: 4px; 140 + text-decoration: none; 87 87 } 142 + .btn-primary { 143 + background-color: #3366cc; 144 + color: white; 145 + } 146 + .btn-disabled { 147 + background-color: #eee; 148 + color: #999; 149 + cursor: not-allowed; 150 + } 151 + .page-info { 152 + font-weight: bold; 153 + } 154 + .unsupported-format { 155 + padding: 20px; 156 + text-align: center; 157 + color: #666; 158 + } 159 + .no-attachments-message { 160 + padding: 20px; 161 + text-align: center; 162 + color: #666; 163 + font-style: italic; 164 + border: 1px dashed #ccc; 165 + background-color: #f5f5f5; 166 + } 88 88 </style> 168 +<script> 169 +//<![CDATA[ 170 +document.addEventListener('DOMContentLoaded', function() { 171 + const select = document.getElementById('attachment-select'); 172 + const viewerContainer = document.getElementById('document-viewer'); 173 + 174 + if (select && viewerContainer) { 175 + select.addEventListener('change', function() { 176 + const filename = this.value; 177 + const fileExtension = filename.split('.').pop().toLowerCase(); 178 + const fileurl = "${doc.getURL('download')}" + "/" + encodeURIComponent(filename); 179 + const pdfViewerUrl = "/resources/pdfjs/web/viewer.html?file=" + encodeURIComponent(fileurl); 180 + const baseUrl = "${doc.getURL('view')}"; 181 + 182 + let viewerHtml = ''; 183 + 184 + if (fileExtension === 'pdf') { 185 + viewerHtml = '<iframe id="document-frame" ' + 186 + 'src="' + pdfViewerUrl + '" ' + 187 + 'width="100%" height="600px"></iframe>'; 188 + } else if (['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx'].indexOf(fileExtension) >= 0) { 189 + viewerHtml = '<iframe id="document-frame" ' + 190 + 'src="' + baseUrl + '?xpage=office&attachment=' + encodeURIComponent(filename) + '" ' + 191 + 'width="100%" height="600px"></iframe>'; 192 + } else { 193 + viewerHtml = '<div class="unsupported-format">' + 194 + 'Формат файла (' + fileExtension + ') не поддерживается для просмотра. ' + 195 + '<a href="' + fileurl + '">Скачать файл</a></div>'; 196 + } 197 + 198 + viewerContainer.innerHTML = viewerHtml; 199 + 200 + // Обновляем заголовок документа 201 + const titleElement = viewerContainer.previousElementSibling; 202 + if (titleElement && titleElement.tagName === 'H3') { 203 + titleElement.textContent = 'Документ: ' + filename; 204 + } 205 + }); 206 + } 207 +}); 208 +//]]> 209 +</script> 89 89 {{/html}} 211 + 90 90 {{/velocity}}