Налаштування ProcessWire API для роботи з контентом

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування ProcessWire API для роботи з контентом
Середня
~2-3 робочих дні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • 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

ProcessWire API для керування контентом

ProcessWire — PHP CMS з власним API для роботи з контентом прямо у PHP-шаблонах. API базується на чеклистах методів ($pages->find()) та дозволяє складні запити без SQL. Для headless-режиму використовуйте модуль ProcessWire GraphQL або кастомний REST endpoint.

Вбудований PHP API

ProcessWire використовує $pages, $page, $user, $config як глобальні змінні в шаблонах:

// templates/blog.php

// Вибір з фільтрами та пагінацією
$limit = 12;
$start = ($input->pageNum - 1) * $limit;

$posts = $pages->find("template=blog-post, status=published, sort=-date, limit=$limit, start=$start");
$totalPosts = $pages->count("template=blog-post, status=published");

// Вибір з умовами по полях
$featuredPosts = $pages->find("
  template=blog-post,
  featured=1,
  date>=today,
  category.name%=Web Development,
  sort=-date,
  limit=3
");

// Один елемент
$post = $pages->get("template=blog-post, slug=my-post-slug");
if (!$post->id) wire404();

Selector String — мова запитів

// Текстовий пошук
$pages->find("template=product, title*=laptop, sort=title");

// Числові умови
$pages->find("template=product, price>=1000, price<=5000");

// Дата
$pages->find("template=event, event_date>=today, sort=event_date");

// OR-умови
$pages->find("template=post, (category=tech|category=science)");

// Пов'язані сторінки
$pages->find("template=product, categories.id={$category->id}");

// Повнотекстовий пошук
$pages->find("title|body~=search query, template=post");

// Сортування за кастомним полем
$pages->find("template=product, sort=-rating, sort=title");

REST API через template-router

ProcessWire не має вбудованого REST API. Створіть через template-router:

// site/templates/api.php
// URL: /api/blog/?page=1&limit=10

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: ' . $config->httpHost);

// Проста авторизація за ключем
$apiKey = $input->get->text('key');
if ($apiKey !== $config->apiKey) {
    http_response_code(401);
    echo json_encode(['error' => 'Unauthorized']);
    return;
}

$page_num = (int) $input->get->int('page') ?: 1;
$limit = min((int) $input->get->int('limit') ?: 10, 100);
$start = ($page_num - 1) * $limit;

$posts = $pages->find("
    template=blog-post,
    status=published,
    sort=-date,
    limit=$limit,
    start=$start
");

$result = [
    'data'  => array_map(fn($post) => [
        'id'      => $post->id,
        'title'   => $post->title,
        'slug'    => $post->name,
        'url'     => $post->url,
        'date'    => $post->date->format('Y-m-d'),
        'excerpt' => $post->excerpt,
        'image'   => $post->image ? [
            'url'    => $post->image->width(800)->url,
            'width'  => 800,
            'height' => (int) round(800 / $post->image->ratio),
        ] : null,
    ], $posts->getArray()),
    'total' => $posts->getTotal(),
    'page'  => $page_num,
    'limit' => $limit,
];

echo json_encode($result);

Модуль ProcessWire GraphQL

# Установка через модулі ProcessWire
# Скачати з processwire.com/modules/processwire-graphql/

# В config.php — налаштування доступу
$config->graphql = [
    'templateFilters' => ['blog-post', 'product', 'category'],
    'fieldFilters'    => ['title', 'body', 'date', 'image', 'category'],
    'maxLimit'        => 100,
];
query {
  blogPost(s: "status=published, sort=-date, limit=10") {
    list {
      id
      title
      date
      body
      image { url(width: 800) }
      category { title url }
    }
    total
  }
}

Кешування відповідей

// Кеш через WireCache
$cacheKey = "api_posts_page{$page_num}";
$cached = $cache->get($cacheKey);

if ($cached) {
    echo $cached;
    return;
}

// ... формування $result ...
$json = json_encode($result);
$cache->save($cacheKey, $json, 3600); // 1 час
echo $json;

Створення базового REST API на ProcessWire (5–7 endpoints) — 2–4 дні.