Изменения документа Создание разделов по шаблону
Редактировал(а) Alexey Semenihin 24.06.2025
От версии 5.1
отредактировано Alexey Semenihin
на 23.04.2025
на 23.04.2025
Изменить комментарий:
К данной версии нет комментариев
К версии 6.1
отредактировано Alexey Semenihin
на 23.04.2025
на 23.04.2025
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,212 +1,90 @@ 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 18 18 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) 19 19 {{html}} 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> 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> 57 57 {{/html}} 27 +{{/velocity}} 58 58 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 - 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) 68 68 {{html}} 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 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> 93 93 </div> 94 94 {{/html}} 95 - #end 96 -#else 97 - 98 - {{html}} 99 - <div class="no-attachments-message"> 100 - Нет доступных вложений для отображения. 101 - </div> 102 - {{/html}} 103 103 57 + #elseif($isImage) 58 + [[image:${attachment.filename}]] 59 + 60 + #elseif($isOffice) 61 + {{office attachment="${attachment.filename}" filterStyles="false"/}} 62 + 63 + #end 64 + #end 104 104 #end 105 105 106 106 {{html}} 107 107 <style> 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 { 69 + .pdf-viewer-container { 125 125 margin: 20px 0; 126 126 border: 1px solid #eee; 127 127 padding: 10px; 128 128 background: #f9f9f9; 129 129 } 130 - .pagination-controls { 131 - margin: 20px 0; 132 - display: flex; 133 - justify-content: center; 134 - align-items: center; 135 - gap: 20px; 75 + 76 + /* Стили для изображений */ 77 + .image-wrapper { 78 + max-width: 100%; 79 + margin: 10px 0; 136 136 } 137 - .btn { 138 - padding: 8px 16px; 139 - border-radius: 4px; 140 - text-decoration: none; 141 - } 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 - } 167 -</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 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 - }); 82 + /* Стили для офисных документов */ 83 + .office-document { 84 + border: 1px solid #ddd; 85 + margin: 15px 0; 86 + min-height: 500px; 206 206 } 207 -}); 208 -//]]> 209 -</script> 88 +</style> 210 210 {{/html}} 211 - 212 212 {{/velocity}}