---
title: "Схема данных для собственного сервера обновлений цифрового продукта - WebTolk"
description: "Как создать сервер обновлений для цифрового проекта в компоненте SW JProjects для Joomla? Как создать собственную схему данных для non-Joomla проектов? Создать JSON сервера обновлений с помощью плагина."
url: "https://web-tolk.ru/dev/components/sw-jprojects/documentation/data-scheme-for-update-server-creating-custom-plugin"
date: "2026-06-09T15:18:14+00:00"
language: "ru-RU"
---

# Схема данных для сервера обновлений

SW JProjects - Документация

**Категория:** [Компоненты](https://web-tolk.ru/dev/components)

[Проект](https://web-tolk.ru/dev/components/sw-jprojects)[Версии](https://web-tolk.ru/dev/components/sw-jprojects/versions)[Документация](https://web-tolk.ru/dev/components/sw-jprojects/documentation)[GitHub](https://github.com/WebTolk/SWJProjects)[JED](https://extensions.joomla.org/extensions/extension/authoring-a-content/content-construction/swjprojects/)

Схема данных Joomla CMS по умолчанию. Создание плагина пользовательской схемы данных для сервера обновлений.

## Что такое сервер обновлений для программного обеспечения?

При разработке вашего программного обеспечения (если вы используете SW JProjects для каталога ПО) вы исправляете ошибки, добавляете новые функции: ваше приложение (компонент, плагин, модуль, библиотека) начинает жить своей жизнью. В течение жизненного цикла вашего приложения вы выпускаете новые версии. В мире разработки очень часто пользуются [SemVer](https://semver.org) (статья [Семантическое версионирование (semver) в Joomla и её расширениях](https://web-tolk.ru/dev/components/sw-jprojects/documentation/index.php?option=com_content&view=article&id=93&catid=10&lang=ru-RU)). Вашим предыдущим версиям, работающим у ваших пользователей, нужно каким-то образом узнать о выходе новой версии, а затем получить ссылку на скачивание файлов и произвести обновление. Для этого на стороне разработчика поднимают сервер обновлений, который предоставляет программе всю необходимую информацию.

## Видео

Также это видео на [YouTube](https://www.youtube.com/watch?v=F0KsqfBP7AU) и [RuTube](https://rutube.ru/video/41f32d11c4ea5dcb00296bacde1f8ad6/).

## Собственный сервер обновлений для Joomla расширений

Исторически компонент SW JProejcts создавался как каталог расширений для Joomla. Согласно официальной документации Joomla ([старая на docs.joomla.org](https://docs.joomla.org/Deploying_an_Update_Server), [новая на manual.joomla.org](https://manual.joomla.org/docs/next/building-extensions/install-update/update-server/)) для обновления CMS со стороны разработчика нужно предоставить URL для информации:

- списка расширений (extensionset, не обязательно)
- для конкретного расширения (updates)
- для списка изменений (changelog, не обязательно)

По запросам на эти URL сервер обновлений отдаёт XML определенной для Joomla структуры. Joomla-компонент SW JProjects позволяет сформировать все нужные данные автоматически и ваши расширения на сайтах ваших клиентов всегда будут знать о выходе новых версий плагина или модуля. Нужные URL для вставки в XML-манифест вашего расширения вы узнаёте при создании и настройке проекта.

## Сервер обновлений для НЕ расширения Joomla

Однако, что делать, если у вас не расширение Joomla, а любой другой тип файла или плагин для WordPress (или любой другой CMS) или программный модуль не для веб-разработки, а для Windows приложения? Или (например) вы производитель станков с ЧПУ и предлагаете клиентам периодически обновлять прошивки станков? В таком случае вам будет мешать специфичная для Joomla структура данных в сервере обновлений и вам захочется создать свою собственную, может быть более простую схему данных. Также вам может потребоваться другой формат, отличный от XML (JSON, SOAP или что-то другое). Для этих случаев вам может пригодится создание собственной схемы данных для сервера обновлений.

## Схемы данных для сервера обновлений

Начиная с версии SW JProejects 2.5.0 вы можете создавать сервер обновлений не только для расширений Joomla, но и свои собственные. Формирование структуры данных для сервера обновлений расширений Joomla вынесено в отдельный плагин. Вы можете создать свой собственный плагин и реализовать в нём нужную вам структуру данных, добавив или наоборот исключив отображаемые данные. Сервер обновлений в компоненте по-прежнему отображает информацию о списке проектов и их версиях, о конкретном проекте и его changelog.
Можно выбрать схему данных сервера обновлений глобально для всего компонента, выбрать другую схему данных для категории проектов, а так же выбрать схему в каждом проекте.

## Создание плагина схемы данных для сервера обновлений

Если вы разработчик - изучите плагин Joomlaserverscheme группы плагинов swjprojects, который входит в состав компонента. Этот плагин генерирует XML манифесты обновлений по спецификации Joomla. Также изучите [плагин-образец на GitHub](https://github.com/WebTolk/SW-JProjects-Sample-Custom-Update-server-data-scheme-), который реализует ту же структуру с небольшими изменениями, но в формате JSON.

Ваш плагин расширяет не **CMSPlugin**, а `Joomla\Component\SWJProjects\Administrator\Serverscheme\ServerschemePlugin` (файл **administrator/com_swjprojects/src/Serverscheme/ServerschemePlugin.php**), который наследует **CMSPLugin** ядра Joomla. В нём вы можете посмотреть добавленные дополнительные методы, необходимые для работы плагина схемы данных.

### Необходимые свойства класса

Основной файл плагина находится в папке src/Extension. В нём для вас важны свойства:

 $mimeTypeMIME тип данных, который будет установлен для ваших данных в заголовок сервера Content-Type. Его можно проверять на стороне программы-клиента, получающей обновления.$charsetКодировка отдаваемых данных.$nameИмя вашей схемы данных, отображаемое в списках в интерфейса компонента.$typeУникальное "системное" имя вашей схемы данных. Именно оно сохраняется в параметрах компонента, категорий и проектов.

```
/**
 * @var string
 * @since 2.5.0
 */
protected string $mimeType = 'application/json';

/**
 * @var string
 * @since 2.5.0
 */
protected string $charset = 'utf-8';

/**
 * @var string
 * @since 2.5.0
 */
protected string $name = 'Custom Sample JSON';

/**
 * @var string
 * @since 2.5.0
 */
protected string $type = 'customsample';
```

Рекомендуем использовать в названии плагинов (в том числе названиях классов), а также свойства $type брендированные префиксы для максимальной унификации класса. Например, не "wordpressServerScheme", а "VendorWordpressServerScheme", где "Vendor" - это ваш бренд.

### Метод renderOutput

Это метод, создающий структуру данных в нужном вам формате. Для удобства, логика создания структур данных для списка проектов (`collection`), конкретного проекта (`updates`) и списка изменений проекта (`changelogs`) разделена на 3 метода, которые вы реализуете в своём плагине самостоятельно.

```
public function renderOutput(array $data): mixed
{
	switch ($this->getScheme()) {
		case 'updates':
			$output = $this->buildProjectUpdatesJson($data);
			break;
		case 'changelogs':
			$output = $this->buildChangelogsJson($data);
			break;
		case 'collection':
		default:
			$output = $this->buildCollectionJson($data);
			break;
	}

	return $output;
}
```

В своих методах вы можете формировать структуру так, как вам надо, использовать или не использовать данные из массива $data, добавлять свои собственные данные из базы данных или сторонних источников.

Созданные схемы данных кэшируются в кэше Joomla.

## JSON-LD Schema

```json
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "@id": "https://web-tolk.ru/#/schema/BreadcrumbList/17",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "item": {
                "@id": "https://web-tolk.ru/",
                "name": "Главная"
            }
        },
        {
            "@type": "ListItem",
            "position": 2,
            "item": {
                "@id": "https://web-tolk.ru/dev",
                "name": "Расширения Joomla"
            }
        },
        {
            "@type": "ListItem",
            "position": 3,
            "item": {
                "@id": "/dev/components",
                "name": "Компоненты"
            }
        },
        {
            "@type": "ListItem",
            "position": 4,
            "item": {
                "@id": "/dev/components/sw-jprojects",
                "name": "SW JProjects"
            }
        },
        {
            "@type": "ListItem",
            "position": 5,
            "item": {
                "@id": "/dev/components/sw-jprojects/documentation",
                "name": "Документация"
            }
        },
        {
            "@type": "ListItem",
            "position": 6,
            "item": {
                "name": "Схема данных для сервера обновлений"
            }
        }
    ]
}
```

```json
{
    "@context": "https://schema.org",
    "@graph": [
        {
            "@type": "Organization",
            "@id": "https://web-tolk.ru/#/schema/Organization/base",
            "name": "WebTolk",
            "url": "https://web-tolk.ru/",
            "logo": {
                "@type": "ImageObject",
                "@id": "https://web-tolk.ru/#/schema/ImageObject/logo",
                "url": "images/webtolk-1080p.jpg",
                "contentUrl": "images/webtolk-1080p.jpg",
                "width": 1920,
                "height": 1080
            },
            "image": {
                "@id": "https://web-tolk.ru/#/schema/ImageObject/logo"
            },
            "sameAs": [
                "https://github.com/WebTolk",
                "https://github.com/sergeytolkachyov",
                "https://vk.com/web_tolk",
                "https://vk.com/webtolkru",
                "https://tenchat.ru/sergeytolkachyov",
                "https://t.me/sergeytolkachyov",
                "https://t.me/webtolkru"
            ]
        },
        {
            "@type": "WebSite",
            "@id": "https://web-tolk.ru/#/schema/WebSite/base",
            "url": "https://web-tolk.ru/",
            "name": "WebTolk",
            "publisher": {
                "@id": "https://web-tolk.ru/#/schema/Organization/base"
            }
        },
        {
            "@type": "WebPage",
            "@id": "https://web-tolk.ru/#/schema/WebPage/base",
            "url": "https://web-tolk.ru/dev/components/sw-jprojects/documentation/data-scheme-for-update-server-creating-custom-plugin",
            "name": "Схема данных для собственного сервера обновлений цифрового продукта - WebTolk",
            "description": "Как создать сервер обновлений для цифрового проекта в компоненте SW JProjects для Joomla? Как создать собственную схему данных для non-Joomla проектов? Создать JSON сервера обновлений с помощью плагина.",
            "isPartOf": {
                "@id": "https://web-tolk.ru/#/schema/WebSite/base"
            },
            "about": {
                "@id": "https://web-tolk.ru/#/schema/TechArticle/base"
            },
            "inLanguage": "ru-RU",
            "breadcrumb": {
                "@id": "https://web-tolk.ru/#/schema/BreadcrumbList/17"
            }
        },
        {
            "@type": "TechArticle",
            "headline": "Схема данных для сервера обновлений",
            "url": "https://web-tolk.ru/dev/components/sw-jprojects/documentation/data-scheme-for-update-server-creating-custom-plugin",
            "description": "Схема данных Joomla CMS по умолчанию. Создание плагина пользовательской схемы данных для сервера обновлений.",
            "mainEntityOfPage": {
                "@type": "WebPage",
                "url": "https://web-tolk.ru/dev/components/sw-jprojects/documentation/data-scheme-for-update-server-creating-custom-plugin"
            },
            "keywords": [
                "joomla",
                " json",
                " xml",
                " update server",
                " сервер обновлений",
                " обновления",
                " updates"
            ]
        }
    ]
}
```
