Інтеграція CMS Directus для управління контентом

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Інтеграція CMS Directus для управління контентом
Середня
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Інтеграція CMS Directus для управління контентом

Directus — це headless CMS і платформа даних з відкритим вихідним кодом. Ключова відмінність від Strapi та інших: Directus працює поверх існуючих баз даних без зміни схеми. Якщо у вас уже є PostgreSQL з таблицями, Directus підключиться до неї і відразу надаватиме API та панель адміністратора.

Принцип роботи

Directus не створює власні таблиці для користувацького контенту — він читає структуру існуючих таблиць через information_schema та будує поверх них:

  • Адміністративний інтерфейс для операцій CRUD
  • REST API (/items/{collection})
  • GraphQL API (/graphql)
  • Систему контролю доступу
  • Систему вебхуків та автоматизацій (Flows)

Власні таблиці Directus (з префіксом directus_) — лише для метаданих системи: користувачі, ролі, дозволи, файли, вебхуки.

Встановлення через Docker

# docker-compose.yml
services:
  directus:
    image: directus/directus:latest
    ports:
      - "8055:8055"
    environment:
      SECRET: "replace-with-random-string"
      DB_CLIENT: "pg"
      DB_HOST: "postgres"
      DB_PORT: "5432"
      DB_DATABASE: "directus"
      DB_USER: "directus"
      DB_PASSWORD: "directus"
      ADMIN_EMAIL: "[email protected]"
      ADMIN_PASSWORD: "strongpassword"
      STORAGE_LOCATIONS: "local"
      STORAGE_LOCAL_DRIVER: "local"
      STORAGE_LOCAL_ROOT: "/directus/uploads"
    volumes:
      - directus-uploads:/directus/uploads
  postgres:
    image: postgres:16
    environment:
      POSTGRES_DB: directus
      POSTGRES_USER: directus
      POSTGRES_PASSWORD: directus
    volumes:
      - pgdata:/var/lib/postgresql/data
docker compose up -d
# Панель адміністратора: http://localhost:8055

Створення колекцій

Через UI: Settings → Data Model → Create Collection. Directus створює відповідну таблицю в БД.

Або програмно через API:

# Створити колекцію через API
curl -X POST http://localhost:8055/collections \
    -H "Authorization: Bearer $ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
        "collection": "articles",
        "fields": [
            { "field": "id", "type": "integer", "meta": { "hidden": true }, "schema": { "is_primary_key": true, "has_auto_increment": true } },
            { "field": "title", "type": "string", "meta": { "required": true } },
            { "field": "slug", "type": "string", "meta": { "unique": true } },
            { "field": "content", "type": "text", "meta": { "interface": "input-rich-text-html" } },
            { "field": "status", "type": "string", "meta": { "interface": "select-dropdown", "options": { "choices": [{"text":"Draft","value":"draft"},{"text":"Published","value":"published"}] } } },
            { "field": "date_published", "type": "timestamp" }
        ]
    }'

REST API

# Отримати список статей (тільки опубліковані)
GET /items/articles?filter[status][_eq]=published&sort[]=-date_published&limit=10

# З заповненими пов'язаними полями
GET /items/articles?fields=*,author.name,cover.filename_disk

# Конкретна стаття за slug
GET /items/articles?filter[slug][_eq]=my-article&fields=*,tags.*

Відповідь є послідовною для всіх колекцій:

{
  "data": [
    {
      "id": 1,
      "title": "My Article",
      "slug": "my-article",
      "status": "published",
      "author": { "name": "Ivan Petrov" }
    }
  ]
}

GraphQL

query Articles($status: String!) {
  articles(filter: { status: { _eq: $status } }, sort: ["-date_published"], limit: 10) {
    id
    title
    slug
    content
    cover {
      id
      filename_disk
    }
    author {
      first_name
      last_name
    }
  }
}

Система контролю доступу

Directus працює з публічною роллю (анонімні запити) та користувальницькими ролями:

Settings → Access Control → Public role
→ articles: Read (filter: status=published)
→ articles: No Create/Update/Delete

Settings → Access Control → Create role "Editor"
→ articles: Full CRUD
→ directus_users: Read (only own profile)

Політики на рівні рядків встановлюються через фільтри в налаштуваннях ролі: редактори бачать лише свої статті (user_created = $CURRENT_USER).

Flows (Автоматизація)

Flows — вбудований інструмент автоматизації без коду. Тригери: створення/оновлення елемента, вебхук, cron, ручний запуск. Дії: HTTP-запит, email, скрипт, операції з БД.

Trigger: Items Created (articles)
→ Condition: status == "published"
→ Action: Webhook POST https://vercel.com/api/deploy-hook/xxx
           (перебудова Next.js при публікації статті)

Користувальницькі розширення

// extensions/hooks/article-slug/index.js
export default ({ action }) => {
    action('items.create', ({ collection, payload }, { schema }) => {
        if (collection === 'articles' && !payload.slug) {
            payload.slug = slugify(payload.title);
        }
    });
};

Типи розширень: hooks, endpoints, modules (додають сторінки в адмін), displays (користувальницькі дисплеї полів), interfaces (користувальницькі редактори полів).

Інтеграція з фронтендом

Directus SDK:

import { createDirectus, rest, readItems } from '@directus/sdk';

const client = createDirectus('https://cms.example.com').with(rest());

const articles = await client.request(
    readItems('articles', {
        filter: { status: { _eq: 'published' } },
        sort: ['-date_published'],
        fields: ['id', 'title', 'slug', 'cover.*'],
        limit: 10,
    })
);

Терміни

Встановлення, підключення до БД, налаштування колекцій, API, контроль доступу, розгортання — 3–5 робочих днів. Користувальницькі розширення, Flows, інтеграція з зовнішніми сервісами — +3–5 днів.