Изменения документа Создание разделов по шаблону

Редактировал(а) Alexey Semenihin 24.06.2025

От версии 6.1
отредактировано Alexey Semenihin
на 23.04.2025
Изменить комментарий: К данной версии нет комментариев
К версии 5.1
отредактировано Alexey Semenihin
на 23.04.2025
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -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}}