- Добавлено отображение case_taxonomy вместо 'Разобрались' на странице кейса - Улучшена интеграция iframe формы с обработкой событий - Добавлен лог диалога по интеграции React формы
5.9 KiB
5.9 KiB
Лог диалога: Интеграция React формы в WordPress
Дата: 16 января 2025
Тема: Обсуждение интеграции сложной React формы из Docker в WordPress
Контекст
У пользователя есть сложная форма обращений на React, которая:
- Развёрнута в Docker контейнере (
ticket_form_frontend_prod) - Находится по адресу:
https://aiform.clientright.ru/ - Использует Vite, React, TypeScript, Ant Design
- Имеет множество шагов, запросов и ответов
- Текущая интеграция в WordPress через iframe в
page-form.php
Обсуждённые темы
1. Использование taxonomy для кейсов
- Поле
case_taxonomyиспользуется для фильтрации кейсов в архиве - Добавлено отображение
case_taxonomyвместо "Разобрались" на странице отдельного кейса - Изменён файл:
wp-content/themes/clientprav-theme/single.php
Изменения:
// Для кейсов используем case_taxonomy вместо названия категории
if (has_category('cases')) {
$case_taxonomy = clientprav_get_case_taxonomy(get_the_ID());
if (!empty($case_taxonomy)) {
$category_name = $case_taxonomy;
}
}
2. Обсуждение форм в WordPress
Варианты интеграции форм:
- REST API WordPress - форма отправляет данные на WordPress API
- Отправка на внешний сервер/API - форма отправляет на n8n webhook
- Встроенный React-компонент - форма собирается в JS файл и встраивается в WordPress
Текущее решение: iframe с формой на aiform.clientright.ru
3. Интеграция React формы из Docker
Найденная структура:
- Путь к форме:
/var/www/fastuser/data/www/crm.clientright.ru/ticket_form/frontend/ - Сборщик: Vite
- Технологии: React 18.3.1, TypeScript, Ant Design 5.21.6
- Контейнер:
ticket_form_frontend_prod(порт 5176)
План перехода на встроенный компонент:
- Создать точку входа
src/wordpress-entry.tsx - Настроить Vite для сборки библиотеки
- Собрать форму:
npm run build - Скопировать в WordPress:
dist/ticket-form.js→wp-content/themes/clientprav-theme/assets/js/ - Подключить через
functions.phpс шорткодом[ticket_form] - Настроить API-прокси через WordPress REST API
Важные моменты:
- Размер файла может быть 2-5 MB (с Ant Design)
- Нужен CSS Ant Design через CDN
- Backend API на порту 8200
- Зависимости: React, ReactDOM, Ant Design
Рекомендация: Для сложной формы лучше оставить iframe (проще поддерживать, изоляция)
Изменённые файлы
1. wp-content/themes/clientprav-theme/single.php
- Добавлено отображение
case_taxonomyдля кейсов вместо названия категории
2. wp-content/themes/clientprav-theme/page-form.php
- Улучшена интеграция iframe с обработкой событий:
- Автоматическая высота iframe
- Обработка успешной отправки формы
- Обработка ошибок
- Отслеживание прогресса
3. Создан пример React формы
react-form-example/- пример простой формы для WordPress- Включает: структуру проекта, webpack.config.js, пример компонента
Следующие шаги
-
Решение по форме:
- Оставить iframe (текущее решение)
- Или перейти на встроенный React компонент
-
Если переходить на встроенный компонент:
- Настроить сборку Vite для библиотеки
- Создать точку входа для WordPress
- Настроить API-прокси
- Протестировать интеграцию
-
Улучшения iframe (если оставляем):
- Добавить уведомления после отправки
- Интеграция с Google Analytics
- Сохранение данных в WordPress
Полезные ссылки
- Форма: https://aiform.clientright.ru/
- Docker контейнер:
ticket_form_frontend_prod - Путь к коду:
/var/www/fastuser/data/www/crm.clientright.ru/ticket_form/frontend/ - Docker compose:
/var/www/fastuser/data/www/crm.clientright.ru/ticket_form/docker-compose.yml
Технические детали
Структура формы:
frontend/
├── src/
│ ├── pages/
│ │ └── ClaimForm.tsx # Основной компонент формы
│ ├── components/
│ │ └── form/ # Компоненты шагов формы
│ ├── api/ # API запросы
│ └── utils/ # Утилиты
├── vite.config.ts # Конфигурация Vite
└── package.json # Зависимости
Зависимости формы:
- react: ^18.3.1
- react-dom: ^18.3.1
- antd: ^5.21.6
- @ant-design/icons: ^5.5.1
- axios: ^1.7.7
- @tanstack/react-query: ^5.59.16
- zustand: ^5.0.1
- socket.io-client: ^4.8.1
Конец лога