HTML-шаблон admin.structure.tpl в Cotonti
предназначен для работы с административными интерфейсами, где администратор может изменять, добавлять или удалять элементы структуры сайта
Файл admin.structure.tpl в движке Cotonti CMF является HTML-шаблоном для отображения структуры сайта в административной панели. Он предназначен для работы с административными интерфейсами, где управляющий контентом может изменять, добавлять или удалять элементы структуры сайта (например, страницы, разделы или категории). Шаблон содержит элементы для работы с конфигурациями, правами доступа, языковыми настройками и различными настройками страниц.
Основное назначение файла и его место в системе
Этот шаблон является частью административной панели Cotonti CMF, отвечающей за работу с структурой сайта. Он отображает информацию о существующих элементах структуры (например, разделах, страницах, шаблонах), а также предоставляет возможности для добавления новых элементов или изменения существующих. Шаблон работает в тесной связи с движком Cotonti, который находит и обрабатывает данные через различные внутренние механизмы (например, через функции в admin.users.php, admin.structure.php и другие части системы).
Возможности шаблона:
-
Отображение структуры сайта:
- С помощью таблиц и динамически заполняемых полей отображаются данные о структуре сайта, такие как путь, код, название, количество страниц, шаблон.
- Данный шаблон позволяет администраторам легко управлять страницами, изменять их настройки или удалять их.
-
Добавление нового элемента:
- Шаблон позволяет добавить новые элементы структуры, такие как страницы или разделы.
- Для этого предусмотрена форма, где заполняются поля с описанием, кодом, названием, иконкой и другими характеристиками элемента структуры.
-
Редактирование и управление элементами:
- Для каждого элемента структуры предусмотрены кнопки управления: изменения конфигурации, прав доступа, удаления.
- Реализована система прав доступа, где администратор может задать настройки для определенных пользователей.
-
Конфигурация дополнительных полей:
- В шаблоне предусмотрены дополнительные поля для конфигурации, например, дополнительные текстовые поля, которые могут быть специфичными для каждого элемента структуры.
-
Поддержка международной локализации:
- Если включена поддержка многоязычности, то шаблон позволяет просматривать и изменять структуру для разных языков.
-
Пагинация:
- В случае большого количества элементов структуры, предусмотрена пагинация, чтобы страницы не перегружались слишком большим объемом данных.
Описание и задачи кода:
-
Блоки с элементами структуры: В шаблоне используются такие конструкции как
<!-- BEGIN: ADMIN_STRUCTURE_EXT -->и<!-- END: ADMIN_STRUCTURE_EXT -->, которые указывают на начало и конец блока вывода для каждого элемента структуры. Каждому элементу отображается иконка, название, описание, а также ссылка на его редактирование. -
Управление пустыми состояниями: Когда структура пуста (например, нет элементов), отображается специальное сообщение, информирующее администратора, что список пуст.
-
Форма для добавления и редактирования структуры: Для каждого элемента структуры предусмотрены формы с полями для ввода информации. Это включает такие данные, как путь, код, описание, иконка, шаблон. В шаблоне используются как стандартные поля ввода, так и специфичные элементы для загрузки файлов или выбора значений.
-
Управление правами доступа и конфигурацией: Каждому элементу структуры можно назначать различные права доступа и конфигурации. Шаблон включает ссылки для доступа к настройкам конфигурации и прав пользователей, которые могут редактировать или удалять элементы.
-
Пагинация: Пагинация используется для того, чтобы облегчить навигацию по длинным спискам. В шаблоне предусмотрены элементы для вывода предыдущих, текущих и следующих страниц.
Важные условия, выполняемые шаблоном:
-
Административные права: Шаблон используется только в административной панели, и доступ к данным возможен только у авторизованных пользователей с правами администратора.
-
Многоязычность: В шаблоне учитывается возможность многоязычности, и есть блоки, связанные с языковыми настройками, что дает возможность управлять страницами на разных языках.
-
Поддержка файлов и иконок: Шаблон включает возможность загрузки и отображения иконок для страниц, а также других файлов, что позволяет более гибко настраивать внешний вид элементов.
Резюме:
Шаблон admin.structure.tpl играет ключевую роль в административной панели Cotonti CMF, предоставляя удобный интерфейс для управления структурой сайта, добавления новых элементов, редактирования существующих и работы с их конфигурациями. Основные возможности включают добавление, удаление, редактирование элементов структуры, работу с правами доступа и многоязычностью, а также поддержку расширенных полей и иконок.
находится по адресу: /system/admin/tpl/admin.structure.tpl движка php-фреймворка Cotonti
<!-- BEGIN: LIST -->
<div class="container">
<table class="table">
<tbody>
<!-- BEGIN: ADMIN_STRUCTURE_EXT -->
<tr>
<td>
<figure>{ADMIN_STRUCTURE_EXT_ICON}</figure>
<div>
<a href="{ADMIN_STRUCTURE_EXT_URL}">{ADMIN_STRUCTURE_EXT_NAME}</a>
<!-- IF {ADMIN_STRUCTURE_EXT_DESC} --><p>{ADMIN_STRUCTURE_EXT_DESC}</p><!-- ENDIF -->
</div>
</td>
</tr>
<!-- END: ADMIN_STRUCTURE_EXT -->
<!-- BEGIN: ADMIN_STRUCTURE_EMPTY -->
<tr>
<td colspan="2" class="text-center">{PHP.L.adm_listisempty}</td>
</tr>
<!-- END: ADMIN_STRUCTURE_EMPTY -->
</tbody>
</table>
</div>
<!-- END: LIST -->
<!-- BEGIN: MAIN -->
<div class="btn-toolbar">
<a href="{ADMIN_STRUCTURE_URL_EXTRAFIELDS}" class="btn btn-primary">{PHP.L.adm_extrafields}</a>
<a href="{ADMIN_PAGE_STRUCTURE_RESYNCALL}" class="btn btn-warning ajax" title="{PHP.L.adm_tpl_resyncalltitle}">{PHP.L.Resync}</a>
<!-- IF {ADMIN_STRUCTURE_I18N_URL} -->
<a href="{ADMIN_STRUCTURE_I18N_URL}" class="btn btn-info">{PHP.L.i18n_structure}</a>
<!-- ENDIF -->
</div>
{FILE "{PHP.cfg.system_dir}/admin/tpl/warnings.tpl"}
<!-- BEGIN: DEFAULT -->
<!-- IF {ADMIN_STRUCTURE_TOTALITEMS} > 0 -->
<div class="container">
<form name="savestructure" id="savestructure" action="{ADMIN_STRUCTURE_UPDATE_FORM_URL}" method="post" class="ajax" enctype="multipart/form-data">
<table class="table">
<tr>
<th>{PHP.L.Path}</th>
<th class="w-10">{PHP.L.Code}</th>
<th class="w-25">{PHP.L.Title}</th>
<th>{PHP.L.TPL}</th>
<th class="w-5">{PHP.L.Pages}</th>
<th class="w-25">{PHP.L.Action}</th>
</tr>
<!-- BEGIN: ROW -->
<tr>
<td>{ADMIN_STRUCTURE_PATH}</td>
<td>{ADMIN_STRUCTURE_CODE}</td>
<td>{ADMIN_STRUCTURE_TITLE}</td>
<td>{ADMIN_STRUCTURE_TPL_CODE}</td>
<td class="text-center">{ADMIN_STRUCTURE_COUNT}</td>
<td>
<a href="{ADMIN_STRUCTURE_OPTIONS_URL}" class="btn btn-secondary" title="{PHP.L.Options}">{PHP.L.Config}</a>
<!-- IF {ADMIN_STRUCTURE_RIGHTS_URL} -->
<a href="{ADMIN_STRUCTURE_RIGHTS_URL}" class="btn btn-success">{PHP.L.Rights}</a>
<!-- ENDIF -->
<!-- IF {ADMIN_STRUCTURE_CAN_DELETE} -->
<a href="{ADMIN_STRUCTURE_DELETE_CONFIRM_URL}" class="btn btn-danger confirmLink">{PHP.L.Delete}</a>
<!-- ENDIF -->
<a href="{ADMIN_STRUCTURE_JUMPTO_URL}" class="btn btn-info" title="{PHP.L.Pages}">{PHP.L.Open}</a>
</td>
</tr>
<!-- END: ROW -->
<tr>
<td colspan="8" class="text-center">
<input type="submit" class="btn btn-primary" value="{PHP.L.Update}" />
</td>
</tr>
</table>
</form>
<!-- IF {ADMIN_STRUCTURE_TOTALITEMS} -->
<p class="paging">
{ADMIN_STRUCTURE_PAGINATION_PREV}{ADMIN_STRUCTURE_PAGNAV}{ADMIN_STRUCTURE_PAGINATION_NEXT}
<span>{PHP.L.Total}: {ADMIN_STRUCTURE_TOTALITEMS}, {PHP.L.Onpage}: {ADMIN_STRUCTURE_COUNTER_ROW}</span>
</p>
<!-- ENDIF -->
</div>
<!-- ENDIF -->
<!-- END: DEFAULT -->
<!-- BEGIN: OPTIONS -->
<form name="savestructure" id="savestructure" action="{ADMIN_STRUCTURE_UPDATE_FORM_URL}" method="post" enctype="multipart/form-data">
<div class="container">
<h2>{PHP.L.Configuration}</h2>
<div class="wrapper">
<table class="table">
<tr>
<td>{PHP.L.Path}:</td>
<td>{ADMIN_STRUCTURE_PATH}</td>
</tr>
<tr>
<td>{PHP.L.Code}:</td>
<td>{ADMIN_STRUCTURE_CODE}</td>
</tr>
<tr>
<td>{PHP.L.Title}:</td>
<td>{ADMIN_STRUCTURE_TITLE}</td>
</tr>
<tr>
<td>{PHP.L.Description}:</td>
<td>{ADMIN_STRUCTURE_DESC}</td>
</tr>
<tr>
<td>{PHP.L.Icon}:</td>
<td>{ADMIN_STRUCTURE_ICON}</td>
</tr>
<tr>
<td>{PHP.L.Locked}:</td>
<td>{ADMIN_STRUCTURE_LOCKED}</td>
</tr>
<tr>
<td>{PHP.L.adm_tpl_mode}:</td>
<td>{ADMIN_STRUCTURE_TPL}</td>
</tr>
<!-- BEGIN: EXTRAFLD -->
<tr>
<td>{ADMIN_STRUCTURE_EXTRAFLD_TITLE}:</td>
<td>{ADMIN_STRUCTURE_EXTRAFLD}</td>
</tr>
<!-- END: EXTRAFLD -->
</table>
</div>
</div>
<!-- BEGIN: CONFIG -->
<div class="container">
<h2>{PHP.L.Options}</h2>
{CONFIG_HIDDEN}
{ADMIN_CONFIG_EDIT_CUSTOM}
<div class="wrapper">
<table class="table">
<tr>
<th>{PHP.L.Parameter}</th>
<th>{PHP.L.Value}</th>
<th>{PHP.L.Reset}</th>
</tr>
<!-- BEGIN: ADMIN_CONFIG_ROW -->
<!-- BEGIN: ADMIN_CONFIG_FIELDSET_BEGIN -->
<tr>
<td colspan="3">
<h4>{ADMIN_CONFIG_FIELDSET_TITLE}</h4>
</td>
</tr>
<!-- END: ADMIN_CONFIG_FIELDSET_BEGIN -->
<!-- BEGIN: ADMIN_CONFIG_ROW_OPTION -->
<tr>
<td>{ADMIN_CONFIG_ROW_CONFIG_TITLE}:</td>
<td>{ADMIN_CONFIG_ROW_CONFIG}</td>
<td class="text-center">
<a href="{ADMIN_CONFIG_ROW_CONFIG_MORE_URL}" class="ajax btn btn-warning">{PHP.L.Reset}</a>
</td>
</tr>
<!-- END: ADMIN_CONFIG_ROW_OPTION -->
<!-- END: ADMIN_CONFIG_ROW -->
</table>
</div>
</div>
<!-- END: CONFIG -->
<div class="btn-toolbar">
<input type="submit" class="btn btn-primary" value="{PHP.L.Update}" />
</div>
</form>
<!-- END: OPTIONS -->
<!-- BEGIN: NEWCAT -->
<div class="container">
<h2>{PHP.L.Add}:</h2>
<div class="wrapper">
<form name="addstructure" id="addstructure" action="{ADMIN_STRUCTURE_URL_FORM_ADD}" method="post" class="ajax" enctype="multipart/form-data">
<table class="table">
<tfoot>
<tr>
<td colspan="2" class="text-center">
<input type="submit" class="btn btn-primary" value="{PHP.L.Add}" />
</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>{PHP.L.Path}:</td>
<td>{ADMIN_STRUCTURE_PATH} {PHP.L.adm_required}</td>
</tr>
<tr>
<td>{PHP.L.Code}:</td>
<td>{ADMIN_STRUCTURE_CODE} {PHP.L.adm_required}</td>
</tr>
<tr>
<td>{PHP.L.Title}:</td>
<td>{ADMIN_STRUCTURE_TITLE} {PHP.L.adm_required}</td>
</tr>
<tr>
<td>{PHP.L.Description}:</td>
<td>{ADMIN_STRUCTURE_DESC}</td>
</tr>
<tr>
<td>{PHP.L.Icon}:</td>
<td>{ADMIN_STRUCTURE_ICON}</td>
</tr>
<!-- IF {ADMIN_STRUCTURE_TPL} -->
<tr>
<td>{PHP.L.adm_tpl_mode}:</td>
<td>{ADMIN_STRUCTURE_TPL}</td>
</tr>
<!-- ENDIF -->
<tr>
<td>{PHP.L.Locked}:</td>
<td>{ADMIN_STRUCTURE_LOCKED}</td>
</tr>
<!-- BEGIN: EXTRAFLD -->
<tr>
<td>{ADMIN_STRUCTURE_EXTRAFLD_TITLE}:</td>
<td>{ADMIN_STRUCTURE_EXTRAFLD}</td>
</tr>
<!-- END: EXTRAFLD -->
</tbody>
</table>
</form>
</div>
</div>
<!-- END: NEWCAT -->
<!-- END: MAIN -->
HTML-шаблон admin.structure.tpl в Cotonti с построчным комментарием
<!-- BEGIN: LIST --> <!-- Начало блока для вывода списка элементов структуры -->
<div class="block"> <!-- Открытие блока для структуры -->
<table class="cells"> <!-- Открытие таблицы для отображения данных элементов -->
<tbody> <!-- Начало тела таблицы -->
<!-- BEGIN: ADMIN_STRUCTURE_EXT --> <!-- Начало блока для дополнительной структуры -->
<tr> <!-- Открытие строки для отображения элемента -->
<td class="start"> <!-- Открытие ячейки с классом "start" -->
<figure>{ADMIN_STRUCTURE_EXT_ICON}</figure> <!-- Отображение иконки элемента -->
<div> <!-- Открытие div для текста элемента -->
<a href="{ADMIN_STRUCTURE_EXT_URL}">{ADMIN_STRUCTURE_EXT_NAME}</a> <!-- Ссылка на элемент -->
<!-- IF {ADMIN_STRUCTURE_EXT_DESC} --> <!-- Проверка на наличие описания элемента -->
<p>{ADMIN_STRUCTURE_EXT_DESC}</p> <!-- Отображение описания элемента -->
<!-- ENDIF --> <!-- Конец проверки на описание -->
</div> <!-- Закрытие div -->
</td> <!-- Закрытие ячейки -->
</tr> <!-- Закрытие строки -->
<!-- END: ADMIN_STRUCTURE_EXT --> <!-- Конец блока для дополнительной структуры -->
<!-- BEGIN: ADMIN_STRUCTURE_EMPTY --> <!-- Начало блока для отображения, если структура пуста -->
<tr> <!-- Открытие строки -->
<td colspan="2">{PHP.L.adm_listisempty}</td> <!-- Сообщение о пустой структуре -->
</tr> <!-- Закрытие строки -->
<!-- END: ADMIN_STRUCTURE_EMPTY --> <!-- Конец блока для пустой структуры -->
</tbody> <!-- Закрытие тела таблицы -->
</table> <!-- Закрытие таблицы -->
</div> <!-- Закрытие блока -->
<!-- END: LIST --> <!-- Конец блока списка -->
<!-- BEGIN: MAIN --> <!-- Начало основного блока -->
<div class="button-toolbar"> <!-- Открытие панели инструментов с кнопками -->
<a href="{ADMIN_STRUCTURE_URL_EXTRAFIELDS}" class="button">{PHP.L.adm_extrafields}</a> <!-- Кнопка для дополнительных полей -->
<a href="{ADMIN_PAGE_STRUCTURE_RESYNCALL}" class="button ajax special" title="{PHP.L.adm_tpl_resyncalltitle}">{PHP.L.Resync}</a> <!-- Кнопка для синхронизации структуры -->
<!-- IF {ADMIN_STRUCTURE_I18N_URL} --> <!-- Проверка на наличие URL для многоязычности -->
<a href="{ADMIN_STRUCTURE_I18N_URL}" class="button">{PHP.L.i18n_structure}</a> <!-- Кнопка для изменения структуры на разных языках -->
<!-- ENDIF --> <!-- Конец проверки на многоязычность -->
</div> <!-- Закрытие панели инструментов -->
{FILE "{PHP.cfg.system_dir}/admin/tpl/warnings.tpl"} <!-- Подключение шаблона с предупреждениями -->
<!-- BEGIN: DEFAULT --> <!-- Начало блока для стандартной структуры -->
<!-- IF {ADMIN_STRUCTURE_TOTALITEMS} > 0 --> <!-- Проверка на наличие элементов структуры -->
<div class="block"> <!-- Открытие блока для отображения элементов -->
<form name="savestructure" id="savestructure" action="{ADMIN_STRUCTURE_UPDATE_FORM_URL}" method="post" class="ajax" enctype="multipart/form-data" > <!-- Открытие формы для обновления структуры -->
<table class="cells"> <!-- Открытие таблицы для вывода данных -->
<tr> <!-- Открытие строки с заголовками -->
<td class="coltop">{PHP.L.Path}</td> <!-- Заголовок столбца для пути -->
<td class="coltop w-10">{PHP.L.Code}</td> <!-- Заголовок столбца для кода -->
<td class="coltop w-25">{PHP.L.Title}</td> <!-- Заголовок столбца для названия -->
<td class="coltop">{PHP.L.TPL}</td> <!-- Заголовок столбца для шаблона -->
<td class="coltop w-5">{PHP.L.Pages}</td> <!-- Заголовок столбца для количества страниц -->
<td class="coltop w-25">{PHP.L.Action}</td> <!-- Заголовок столбца для действий -->
</tr> <!-- Закрытие строки заголовков -->
<!-- BEGIN: ROW --> <!-- Начало блока для отображения каждого элемента -->
<tr> <!-- Открытие строки для данных элемента -->
<td class="{ADMIN_STRUCTURE_ODDEVEN}">{ADMIN_STRUCTURE_PATH}</td> <!-- Путь элемента -->
<td class="{ADMIN_STRUCTURE_ODDEVEN}">{ADMIN_STRUCTURE_CODE}</td> <!-- Код элемента -->
<td class="{ADMIN_STRUCTURE_ODDEVEN}">{ADMIN_STRUCTURE_TITLE}</td> <!-- Название элемента -->
<td class="{ADMIN_STRUCTURE_ODDEVEN}">{ADMIN_STRUCTURE_TPL_CODE}</td> <!-- Шаблон элемента -->
<td class="{ADMIN_STRUCTURE_ODDEVEN} text-center">{ADMIN_STRUCTURE_COUNT}</td> <!-- Количество страниц элемента -->
<td class="action {ADMIN_STRUCTURE_ODDEVEN}"> <!-- Блок действий с элементом -->
<a href="{ADMIN_STRUCTURE_OPTIONS_URL}" class="button ajax" title="{PHP.L.Options}">{PHP.L.Config}</a> <!-- Кнопка для конфигурации -->
<!-- IF {ADMIN_STRUCTURE_RIGHTS_URL} --> <!-- Проверка на права доступа -->
<a href="{ADMIN_STRUCTURE_RIGHTS_URL}" class="button">{PHP.L.Rights}</a> <!-- Кнопка для изменения прав доступа -->
<!-- ENDIF --> <!-- Конец проверки на права доступа -->
<!-- IF {ADMIN_STRUCTURE_CAN_DELETE} --> <!-- Проверка на возможность удаления -->
<a href="{ADMIN_STRUCTURE_DELETE_CONFIRM_URL}" class="button confirmLink">{PHP.L.Delete}</a> <!-- Кнопка для удаления элемента -->
<!-- ENDIF --> <!-- Конец проверки на возможность удаления -->
<a href="{ADMIN_STRUCTURE_JUMPTO_URL}" class="button special" title="{PHP.L.Pages}">{PHP.L.Open}</a> <!-- Кнопка для открытия страницы -->
</td> <!-- Закрытие ячейки с действиями -->
</tr> <!-- Закрытие строки элемента -->
<!-- END: ROW --> <!-- Конец блока элемента -->
<tr> <!-- Открытие строки с кнопкой для отправки формы -->
<td colspan="8"> <!-- Ячейка на весь ширину таблицы -->
<input type="submit" class="submit" value="{PHP.L.Update}" /> <!-- Кнопка для обновления структуры -->
</td> <!-- Закрытие ячейки -->
</tr> <!-- Закрытие строки -->
</table> <!-- Закрытие таблицы -->
</form> <!-- Закрытие формы -->
<!-- IF {ADMIN_STRUCTURE_TOTALITEMS} --> <!-- Проверка на наличие элементов для пагинации -->
<p class="paging"> <!-- Открытие блока пагинации -->
{ADMIN_STRUCTURE_PAGINATION_PREV}{ADMIN_STRUCTURE_PAGNAV}{ADMIN_STRUCTURE_PAGINATION_NEXT} <!-- Пагинация: предыдущая, текущая, следующая страница -->
<span>{PHP.L.Total}: {ADMIN_STRUCTURE_TOTALITEMS}, {PHP.L.Onpage}: {ADMIN_STRUCTURE_COUNTER_ROW}</span> <!-- Информация о количестве элементов на странице -->
</p> <!-- Закрытие блока пагинации -->
<!-- ENDIF --> <!-- Конец проверки на пагинацию -->
</div> <!-- Закрытие блока для стандартной структуры -->
<!-- ENDIF --> <!-- Конец проверки на наличие элементов -->
<!-- END: DEFAULT --> <!-- Конец основного блока -->
<!-- BEGIN: OPTIONS --> <!-- Начало блока для опций редактирования -->
<form name="savestructure" id="savestructure" action="{ADMIN_STRUCTURE_UPDATE_FORM_URL}" method="post" enctype="multipart/form-data"> <!-- Открытие формы для редактирования -->
<div class="block"> <!-- Открытие блока для опций -->
<h2>{PHP.L.Configuration}</h2> <!-- Заголовок раздела для конфигурации -->
<div class="wrapper"> <!-- Открытие обертки для таблицы -->
<table class="cells"> <!-- Открытие таблицы для ввода данных -->
<tr> <!-- Открытие строки -->
<td class="w-20">{PHP.L.Path}:</td> <!-- Путь элемента -->
<td class="w-80">{ADMIN_STRUCTURE_PATH}</td> <!-- Ввод для пути элемента -->
</tr> <!-- Закрытие строки -->
<tr> <!-- Открытие строки -->
<td>{PHP.L.Code}:</td> <!-- Код элемента -->
<td>{ADMIN_STRUCTURE_CODE}</td> <!-- Ввод для кода элемента -->
</tr> <!-- Закрытие строки -->
<tr> <!-- Открытие строки -->
<td>{PHP.L.Title}:</td> <!-- Название элемента -->
<td>{ADMIN_STRUCTURE_TITLE}</td> <!-- Ввод для названия элемента -->
</tr> <!-- Закрытие строки -->
<tr> <!-- Открытие строки -->
<td>{PHP.L.TPL}:</td> <!-- Шаблон элемента -->
<td>{ADMIN_STRUCTURE_TPL}</td> <!-- Ввод для шаблона элемента -->
</tr> <!-- Закрытие строки -->
</table> <!-- Закрытие таблицы -->
</div> <!-- Закрытие обертки -->
<input type="submit" class="submit" value="{PHP.L.Update}" /> <!-- Кнопка для обновления конфигурации -->
</div> <!-- Закрытие блока для опций -->
</form> <!-- Закрытие формы -->
<!-- END: OPTIONS --> <!-- Конец блока опций -->
<!-- END: MAIN --> <!-- Закрытие основного блока -->
Подведение итогов:
Этот шаблон представляет собой интерфейс для отображения и управления структурой сайта в административной панели Cotonti CMF. Он включает функционал для отображения и редактирования элементов структуры, их конфигурации, прав доступа и дополнительных полей. Шаблон также поддерживает многоязычность, пагинацию и различные действия с элементами структуры, такие как их удаление или редактирование.
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-28 21:26
- Last update: 2025-01-29 21:56