Розробка кастомних глобалів (Globals) Payload CMS

Стандартні колекції не підходять для зберігання глобальних налаштувань сайту — це призводить до дублювання даних та ускладнює адміністрування. Ми розробляємо кастомні Globals у Payload CMS, створюючи єдину точку управління контентом, навігацією та SEO-параметрами. Наша команда реалізує проєкт під ключ — від проєктування схеми до впровадження з подальшою підтримкою.

Розробка та обслуговування будь-яких видів сайтів:

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

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

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

Кастомні 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 для всіх редакторів, що веде до конфліктів. Ми рекомендуємо призначати відповідального за конфігурацію.

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 — ми запропонуємо рішення під ключ.

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

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060