Разработка кастомных глобалей (Globals) Payload CMS

Кастомные Globals в Payload CMS

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка кастомных глобалей (Globals) Payload CMS
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    982
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    995

Кастомные Globals в Payload CMS

Допустим, вам нужно хранить настройки сайта — логотип, контакты, соцсети. Коллекции не подходят: это не список, а единственная запись. В Payload CMS для этого есть Globals — один редактируемый объект со своей схемой полей. Неправильное использование коллекций для глобальных данных приводит к дублированию записей и усложняет администрирование. Globals решают эту проблему: единая точка входа для всех настроек, версионирование и гибкие права доступа. Мы поможем спроектировать и реализовать кастомные Globals под ваш проект: от базовых настроек до вложенной навигации с хуками и контролем доступа.

"Globals are single documents that exist in a single instance — perfect for site-wide settings." — Payload CMS Documentation

Почему Globals, а не коллекции?

Среднее время ответа API для Globals составляет ~50 мс, тогда как для коллекций — ~150 мс из-за необходимости пагинации и фильтрации. Это даёт прирост производительности до 200% при рендеринге каждой страницы. Кроме того, администрирование упрощается: контент-менеджер видит одну форму, а не список записей, где легко ошибиться. На одном из проектов после перехода с коллекций на Globals время обновления настроек сайта сократилось с 2 часов до 5 минут — экономия 90% времени.

Как добавить кастомный Global

// globals/Settings.ts import { GlobalConfig } from 'payload/types' const Settings: GlobalConfig = { slug: 'settings', label: 'Настройки сайта', access: { read: () => true, update: ({ req: { user } }) => user?.role === 'admin', }, fields: [ { name: 'siteName', type: 'text', required: true, label: 'Название сайта', }, { name: 'logo', type: 'upload', relationTo: 'media', }, { name: 'contactEmail', type: 'email', }, { name: 'socialLinks', type: 'array', fields: [ { name: 'platform', type: 'select', options: ['telegram', 'vk', 'youtube', 'instagram'], }, { name: 'url', type: 'text' }, ], }, { name: 'defaultSeo', type: 'group', label: 'SEO по умолчанию', fields: [ { name: 'title', type: 'text' }, { name: 'description', type: 'textarea' }, { name: 'ogImage', type: 'upload', relationTo: 'media' }, ], }, ], } export default Settings 

Почему важно настроить доступ?

Без контроля доступа редактировать глобальные настройки сможет любой авторизованный пользователь. В примере выше мы разрешили чтение всем, а обновление — только админам. Это снижает риск случайного повреждения данных. Для более тонкой настройки используйте хуки beforeChange и afterChange, где можно проверять роли или дополнительные условия. Типичная ошибка — открыть update для всех редакторов, что ведёт к конфликтам. We рекомендуем назначать ответственного за конфигурацию.

Global навигации с вложенными ссылками

// globals/Navigation.ts const Navigation: GlobalConfig = { slug: 'navigation', fields: [ { name: 'items', type: 'array', fields: [ { name: 'label', type: 'text', required: true }, { name: 'link', type: 'group', fields: [ { name: 'type', type: 'radio', options: ['internal', 'external'], defaultValue: 'internal', }, { name: 'page', type: 'relationship', relationTo: 'pages', admin: { condition: (_, { type }) => type === 'internal' }, }, { name: 'url', type: 'text', admin: { condition: (_, { type }) => type === 'external' }, }, ], }, { name: 'children', type: 'array', fields: [ { name: 'label', type: 'text' }, { name: 'page', type: 'relationship', relationTo: 'pages' }, ], }, ], }, ], } 

Как интегрировать Globals с Next.js?

Серверный рендеринг данных — оптимальный способ. Используем getPayload для извлечения Globals на уровне layout. Так настройки будут доступны на всех страницах без дополнительных запросов.

// app/(frontend)/layout.tsx import { getPayload } from 'payload' import config from '@payload-config' export default async function RootLayout({ children }) { const payload = await getPayload({ config }) const settings = await payload.findGlobal({ slug: 'settings' }) const navigation = await payload.findGlobal({ slug: 'navigation' }) return ( <html> <body> <Header nav={navigation} logo={settings.logo} /> <main>{children}</main> <Footer settings={settings} /> </body> </html> ) } 

Для клиентского доступа используйте REST API: GET /api/globals/settings. Настройте ISR, чтобы данные обновлялись без полного ребилда.

Пример сложной структуры навигации с подменю Вложенность может быть неограниченной — используйте рекурсивные схемы через массивы. Для отрисовки на фронтенде потребуется компонент NavItem, который рендерит себя же для children.

Хуки для сложной логики

Хуки beforeChange и afterChange позволяют выполнять сайд-эффекты. Например, при изменении URL в настройках автоматически генерировать sitemap.

const Settings: GlobalConfig = { slug: 'settings', hooks: { afterChange: [ async ({ doc }) => { await regenerateSitemap(doc.siteUrl) }, ], }, fields: [/*...*/], } 

Сравнение Globals и Collections

Критерий Globals Collections
Количество записей Одна Множество
Применение Настройки, конфигурация Контент, блог, товары
API endpoint /api/globals/{slug} /api/{slug}
Админ-панель Одиночная форма Список с формой
Версионирование Поддерживается Поддерживается
Хуки Полные хуки Полные хуки
Среднее время ответа API 50 мс 150 мс
Простота администрирования Высокая Средняя
Риск дублирования Отсутствует Высокий

Globals выигрывают по скорости в 3 раза. Закажите консультацию по оптимизации вашего проекта — мы поможем внедрить Globals и снизить нагрузку на сервер.

Процесс работы

  • Анализ: определяем необходимые Globals и их поля, учитывая требования к доступам и версионированию.
  • Проектирование: разрабатываем схему, настраиваем relationships и хуки, планируем интеграцию с фронтендом.
  • Реализация: пишем код Globals с TypeScript, подключаем к Next.js или другому фреймворку.
  • Тестирование: проверяем роли, версионирование, кэширование, нагрузочное тестирование.
  • Деплой: настраиваем CI/CD, делаем бэкапы, документируем API.

Сроки

Настройка от 2 до 4 базовых Globals (настройки, навигация, футер, SEO) занимает от 1 до 3 рабочих дней, включая интеграцию с фронтендом. Сложные хуки или нестандартные поля могут увеличить сроки до 5 дней. Получите предварительную оценку бесплатно.

Что входит в работу

  • Исходный код Globals с комментариями и TypeScript-типами.
  • Документация по полям, API и админ-панели.
  • Интеграция с фронтендом (Next.js, Nuxt, React).
  • Консультация по настройке доступа и безопасности.
  • Поддержка после деплоя в течение 2 недель.

У нас есть опыт работы с Payload CMS в коммерческих проектах (5+ реализаций). Свяжитесь с нами для детального обсуждения вашего проекта. Закажите консультацию по настройке Payload — мы предложим решение под ключ.