Ta strona wymienia każdą trasę (route) rejestrowaną przez DXPR
Builder w dxpr_builder.routing.yml, z metodami HTTP, wymaganiami
dostępu, parametrami żądań i kształtami odpowiedzi zaimplementowanymi
w kontrolerach. JavaScript edytora jest zamierzonym klientem punktów
końcowych AJAX; nic na tej stronie nie jest stabilnym publicznym API,
a nazwy parametrów mogą zmieniać się między wydaniami.
Wymagania dostępu
Trasy używają trzech rodzajów wymagań. Trasa może je łączyć.
| Wymaganie |
Znaczenie |
_permission |
Użytkownik potrzebuje nazwanego uprawnienia Drupala. DXPR Builder definiuje administer dxpr builder configuration, edit with dxpr builder i administer dxpr_builder_profile w dxpr_builder.permissions.yml; view media i administer site configuration pochodzą z rdzenia. |
_csrf_token |
Żądanie musi nieść prawidłowy token CSRF w parametrze zapytania token. Dla głównego handlera AJAX edytor pobiera URL z tokenem spod /dxpr_builder/csrf (albo z operacji dxpr_builder_csrf). Dla pozostałych tras formatter pola umieszcza URLe z tokenem w drupalSettings.dxprBuilder, na przykład fileUploadUrl, entityLinkSuggestionsUrl, userSettingsUrl i aiAgent.endpointUrl. |
_dxpr_builder_billable_user |
Użytkownik musi być użytkownikiem rozliczanym (billable user), jak zdefiniowano poniżej. |
Co znaczy „billable user”
DxprBuilderBillableUserAccessCheck pozwala na dostęp, gdy
DxprBuilderLicenseService::isBillableUser() zwraca true dla
bieżącego konta. Metoda zwraca false dla kont zablokowanych
i dla kont z ustawionym polem dxpr_user_is_disavowed
(administrator wyklucza użytkownika z edycji na stronie User Licenses).
W przeciwnym razie zwraca true dla użytkownika 1 i dla każdego konta
z uprawnieniem edit with dxpr builder. W skrócie: użytkownik
rozliczany (billable user) to aktywne, niewykluczone konto, które może
edytować za pomocą DXPR Builder, a usługa licencji liczy te
konta względem twojego klucza produktu.
Metody HTTP
Gdy trasa deklaruje methods, trasowane są tylko te metody.
Gdy nie, trasa przyjmuje każdą metodę (MethodFilter Drupala
filtruje tylko trasy deklarujące metody). Tabele poniżej podają metodę,
której JavaScript edytora faktycznie używa, gdy widać to w źródle.
Punkty końcowe AJAX edytora
URL tokenu CSRF
|
|
| Ścieżka |
/dxpr_builder/csrf |
| Trasa |
dxpr_builder.csrf_refresh |
| Metody |
Niezadeklarowane (dowolna metoda). Edytor wysyła GET (backend-connect.js, fetchCsrfTokenUrl()). |
| Wymagania |
Użytkownik rozliczany (billable user) |
| Kontroler |
AjaxController::ajaxRefresh() |
Żądanie musi nieść nagłówek X-Requested-With: XMLHttpRequest; bez niego kontroler zwraca HTTP 403 z treścią JSON {"error": "Invalid request"}.
| Parametr |
Źródło |
Wymagany |
Uwagi |
enterprise |
Ciąg zapytania |
Opcjonalny |
Gdy ustawione na true i zainstalowany jest moduł dxpr_builder_e, token jest generowany dla trasy dxpr_builder_e.ajax_callback. Gdy ustawione na true bez tego modułu, kontroler rzuca wyjątek. |
Odpowiedź: ciąg JSON z URlem głównego handlera AJAX i
parametrem zapytania token. URL jest ścieżką od korzenia witryny
(ze ścieżką bazową, bez hosta). JavaScript wysyła POSTem każdą operację
kreatora na ten URL.
Główny handler AJAX
|
|
| Ścieżka |
/dxpr_builder/ajax |
| Trasa |
dxpr_builder.ajax_callback |
| Metody |
Niezadeklarowane (dowolna metoda). Kontroler czyta każdy parametr z treści POST, a edytor wysyła POST. |
| Wymagania |
Użytkownik rozliczany (billable user), token CSRF |
| Kontroler |
AjaxController::ajaxCallback() |
Pole treści POST action wybiera operację. Każda operacja i jej
parametry są wymienione w operacjach głównego handlera AJAX.
Gdy action brakuje albo jest nieznane, kontroler zwraca pustą
drupalową odpowiedź AjaxResponse bez poleceń. Większość operacji
ponownie sprawdzających status użytkownika rozliczanego zwraca tę samą
pustą odpowiedź, gdy sprawdzanie zawiedzie; tabele odnotowują dwa wyjątki.
Czat AI
|
|
| Ścieżka |
/dxpr_builder/ajax/ai/chat |
| Trasa |
dxpr_builder.ai_chat |
| Metody |
POST |
| Wymagania |
edit with dxpr builder, użytkownik rozliczany (billable user), token CSRF |
| Kontroler |
AiChatController::chat() |
Treść żądania to JSON. Kontroler pośredniczy w żądaniu do
dostawcy dxpr drupalowego modułu ai, więc żaden klucz API
nie trafia do przeglądarki. Przed wywołaniem scala domeny
z ustawienia ai_output_allowed_domains do filtra nazw hostów modułu
ai, gdy ta usługa istnieje. Wartość * ustawia filtr na pełne
zaufanie. Filtr jest potem przywracany.
| Parametr |
Źródło |
Wymagany |
Uwagi |
messages |
Treść JSON |
Wymagany |
Tablica obiektów z role i content. |
stream |
Treść JSON |
Opcjonalny |
Wartość logiczna, domyślnie true. |
model |
Treść JSON |
Opcjonalny |
Domyślnie kavya-m1. |
prediction |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy jako tablica. |
providers |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy. |
allowed_html_tags |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy. |
allowed_html_classes |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy. |
web_search |
Treść JSON |
Opcjonalny |
Przekazywana jest tylko wartość false; każda inna wartość jest ignorowana. |
response_format |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy jako tablica. |
Odpowiedzi:
| Przypadek |
Status |
Treść |
Strumieniowana (stream true i dostawca strumieniuje) |
200, Content-Type: text/event-stream |
Zdarzenia wysyłane przez serwer (server-sent events). Każde zdarzenie to data: <JSON>, gdzie JSON ma choices[0].delta.content oraz, gdy dostawca je podaje, id, object, created, model, original_model i usage. Strumień kończy się na data: [DONE]. |
| Niestrumieniowana |
200, application/json |
{"choices": [{"message": {"role": "assistant", "content": "<text>"}}]} |
Treść nie jest JSONem albo brakuje messages lub jest puste |
400, zwykły tekst |
Invalid request: messages required |
model nie ma na liście allowed_models w ai_provider_dxpr.settings (sprawdzane tylko, gdy moduł ai_provider_dxpr jest zainstalowany i lista jest ustawiona) |
403, application/json |
{"error": {"code": "model_not_allowed", "message": "The selected model is not allowed. Please refresh the page to update your model options."}} |
| Wyjątek dostawcy |
500, application/json |
{"error": {"message": "The request could not be completed."}} |
Generowanie obrazów AI
|
|
| Ścieżka |
/dxpr_builder/ajax/ai/image |
| Trasa |
dxpr_builder.ai_image |
| Metody |
POST |
| Wymagania |
edit with dxpr builder, użytkownik rozliczany (billable user), token CSRF |
| Kontroler |
AiImageController::generate() |
| Parametr |
Źródło |
Wymagany |
Uwagi |
prompt |
Treść JSON |
Wymagany |
Prompt tekstowy. |
model |
Treść JSON |
Opcjonalny |
Domyślnie kavya-image. |
size |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy, gdy niepuste. |
quality |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy, gdy niepuste. |
background |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy, gdy niepuste. |
Odpowiedzi:
| Przypadek |
Status |
Treść |
| Pomyślnie |
200 |
{"data": [{"b64_json": "<base64 image>"}]} (zwracany jest tylko pierwszy wygenerowany obraz) |
Treść nie jest JSONem albo brakuje prompt. |
400 |
{"error": {"message": "Invalid request: prompt required"}} |
| Dostawca nie zwrócił obrazu |
500 |
{"error": {"message": "No image was generated"}} |
| Wyjątek dostawcy |
500 |
{"error": {"message": "Image generation failed. Please try again."}} |
Edycja obrazów AI
|
|
| Ścieżka |
/dxpr_builder/ajax/ai/image/edit |
| Trasa |
dxpr_builder.ai_image_edit |
| Metody |
POST |
| Wymagania |
edit with dxpr builder, użytkownik rozliczany (billable user), token CSRF |
| Kontroler |
AiImageController::edit() |
| Parametr |
Źródło |
Wymagany |
Uwagi |
prompt |
Treść JSON |
Wymagany |
Instrukcja edycji. |
image |
Treść JSON |
Wymagany |
Obraz źródłowy zakodowany w base64 (ścisłe dekodowanie). |
mimeType |
Treść JSON |
Opcjonalny |
Domyślnie image/png; podtyp staje się rozszerzeniem pliku przekazanym dostawcy. |
model |
Treść JSON |
Opcjonalny |
Domyślnie kavya-image. |
size, quality, background |
Treść JSON |
Opcjonalny |
Przekazywane do konfiguracji dostawcy, gdy niepuste. |
Odpowiedzi:
| Przypadek |
Status |
Treść |
| Pomyślnie |
200 |
{"data": [{"b64_json": "<base64 image>"}]} |
Treść nie jest JSONem albo brakuje prompt lub image. |
400 |
{"error": {"message": "Invalid request: prompt and image required"}} |
image nie jest prawidłowym base64 |
400 |
{"error": {"message": "Invalid image data: base64 decode failed"}} |
| Dostawca nie zwrócił obrazu |
500 |
{"error": {"message": "No image was generated"}} |
| Wyjątek dostawcy |
500 |
{"error": {"message": "Image editing failed. Please try again."}} |
Wysyłanie plików
|
|
| Ścieżka |
/dxpr_builder/ajax/file_upload |
| Trasa |
dxpr_builder.ajax_file_upload_callback |
| Metody |
POST, DELETE (zadeklarowane w routingu; kontroler ma jeden handler wysyłania i nie ma osobnej gałęzi usuwania) |
| Wymagania |
Użytkownik rozliczany (billable user), token CSRF |
| Kontroler |
UploadFileController::fileUpload() |
| Parametr |
Źródło |
Wymagany |
Uwagi |
upload |
Pliki formularza wieloczęściowego (multipart), wysyłane jako upload[] |
Wymagany |
Jeden lub więcej wysłanych plików. |
Kontroler sortuje każdy plik według pierwszej części jego
klientowego typu MIME do <default scheme>://dxpr_builder_images,
dxpr_builder_videos albo dxpr_builder_files. Obraz potrzebuje
rozszerzenia z typów MIME image/gif, jpg, jpeg, png,
webp, avif albo svg. Film potrzebuje jednego z video/webm,
ogv, ogg, mp4 albo quicktime (na przykład .mov). Limit
rozmiaru to maksimum wysyłania PHP. Plik o tej samej nazwie i identycznej
zawartości SHA-256 co istniejący zarządzany plik, który użytkownik może
oglądać, jest używany ponownie zamiast zapisywania od nowa. Gdy
moduł media jest zainstalowany i istnieje rodzaj multimediów o nazwie
image, media_image, video albo media_video, dla pliku tworzony
jest opublikowany byt multimedialny (albo używany ponownie). Użycie pliku jest
rejestrowane w module dxpr_builder.
Odpowiedzi:
| Przypadek |
Status |
Treść |
| Pomyślnie |
201 |
Tablica JSON, jeden obiekt na plik: url (bezwzględny URL pliku), uuid i id (bytu multimedialnego, gdy istnieje, inaczej pliku), fid (ID pliku), entity_type (media albo file). |
Brak plików upload. |
400 |
{"message": "No files were uploaded."} |
| Nieprawidłowe wysłanie, niezapisywalny cel albo błąd zapisu |
500 |
{"message": "<reason>"} |
| Błąd walidacji (rozszerzenie albo rozmiar) |
422 |
{"message": "<violation messages>"} |
| Nazwa pliku już zablokowana przez inne żądanie |
503 |
{"message": "File \"<name>\" is already locked for writing."} |
|
|
| Ścieżka |
/dxpr_builder/media-library |
| Trasa |
dxpr_builder.media_library |
| Metody |
Niezadeklarowane (dowolna metoda). Parametry czytane są z ciągu zapytania. |
| Wymagania |
view media; trasa administracyjna (admin route) |
| Kontroler |
AjaxController::openImageMediaLibrary() |
| Parametr |
Źródło |
Wymagany |
Uwagi |
media_type |
Ciąg zapytania |
Opcjonalny |
image (domyślnie) albo video. |
remaining_slots |
Ciąg zapytania |
Opcjonalny |
Liczba elementów akceptowanych przez otwierającego; domyślnie 1. |
uuid |
Ciąg zapytania |
Opcjonalny |
Przekazywane do otwierającego jako opener_parameters.uuid. |
Oferowany rodzaj multimediów zależy od ustawienia media_browser:
media_library używa wprost rodzaju multimediów image albo video;
media_library_acquia_dam używa acquia_dam_image_asset albo
acquia_dam_video_asset, gdy ten rodzaj istnieje.
Odpowiedzi:
| Przypadek |
Wynik |
| Pomyślnie |
Tablica renderowana zbudowana przez MediaLibraryUiBuilder::buildUi() z otwierającym media_library.opener.dxpr_builder. Drupal renderuje ją jako stronę HTML przeznaczoną do iframe. |
media_library: moduł niezainstalowany. |
403, zwykły tekst Media Library is not enabled. Please enable it to access this feature. |
Nieobsługiwany media_type |
400, zwykły tekst Unsupported media type "<value>". |
media_browser: ustawienie nie ma używalnego rodzaju multimediów. |
400, zwykły tekst The "<setting>" settings is not supported. |
Walidator linków pomocy
|
|
| Ścieżka |
/dxpr_builder/ajax/help_link_validator |
| Trasa |
dxpr_builder.ajax_help_link_validator |
| Metody |
Niezadeklarowane (dowolna metoda). Skrypt deweloperski dxpr_builder_dev.js wysyła POST z treścią zakodowaną jak formularz. |
| Wymagania |
Użytkownik rozliczany (billable user) |
| Kontroler |
AjaxController::validateHelpLink() |
| Parametr |
Źródło |
Wymagany |
Uwagi |
help_link |
Treść POST |
Wymagany dla sensownej odpowiedzi |
Sprawdzane są tylko URLe http albo https na hoście dxpr.com ze ścieżką zaczynającą się od /documentation/. |
Odpowiedź: tablica JSON. [true], gdy żądanie HEAD do linku
(bez podążania za przekierowaniami) zwraca 200; [false], gdy klient
HTTP rzuca wyjątek; [] w każdym innym przypadku, łącznie z brakującym
parametrem, niepasującym URlem albo statusem innym niż 200.
Sugestie linków do bytów
|
|
| Ścieżka |
/dxpr_builder/entity-link-suggestions |
| Trasa |
dxpr_builder.entity_link_suggestions |
| Metody |
GET |
| Wymagania |
edit with dxpr builder, token CSRF; opcja trasy no_cache. |
| Kontroler |
EntityLinkSuggestionsController::suggestions() |
| Parametr |
Źródło |
Wymagany |
Uwagi |
q |
Ciąg zapytania |
Wymagany dla wyników |
Szukany tekst, małymi literami. Wartość w rodzaju /node/123 wczytuje ten byt wprost. |
langcode |
Ciąg zapytania |
Opcjonalny |
Język bytu goszczącego; domyślnie bieżący język. Zwracane są tylko byty dostępne w tym języku. |
Rodzaje to te z włączonym ckeditor5_link_suggestions w informacji
o rodzaju; gdy żaden nie jest skonfigurowany, przeszukiwane są wszystkie
rodzaje węzłów. Do 100 bytów na rodzaj bytu jest dopasowywanych
wyszukiwaniem CONTAINS przez wtyczki wyboru referencji do bytów
z rdzenia.
Odpowiedź: {"suggestions": [...]} z prywatną cachowalnością
i maksymalnym wiekiem 300 sekund. Każda sugestia ma description,
entity_type_id, entity_uuid, group, label i path. Gdy
q nic nie dopasowuje, tablica trzyma jedną sugestię linku ręcznego
z description, label (wejście małymi literami) i
path (wejście, gdy jest prawidłowym URlem, inaczej pusty
ciąg). Gdy q jest puste, suggestions to pusta tablica.
Ustawienia edytora użytkownika
|
|
| Ścieżka |
/dxpr_builder/user-settings |
| Trasa |
dxpr_builder.user_settings |
| Metody |
POST |
| Wymagania |
edit with dxpr builder, token CSRF; opcja trasy no_cache. |
| Kontroler |
UserSettingsController::save() |
Edytor wysyła to żądanie, gdy użytkownik zmienia własne ustawienia
edytora, na przykład w Editor settings. Wartości zapisywane są
przy koncie użytkownika w user.data, moduł
dxpr_builder.
| Parametr |
Źródło |
Wymagany |
Uwagi |
controls_layout |
Treść JSON |
Wymagany (jedyne ustawienie) |
element, breadcrumb albo default. default usuwa wybór użytkownika, więc obowiązuje ustawienie profilu albo witryny. |
Odpowiedzi:
| Przypadek |
Status |
Treść |
| Zapisano |
200 |
{"settings": {"controls_layout": "<value>"}}: każde ustawienie po zapisie, default, gdy użytkownik nie ma zapisanego wyboru. |
| Treść nie jest niepustym obiektem JSON albo nazwa lub wartość jest nieprawidłowa |
400 |
{"error": "Invalid setting or value."}. Nic nie jest zapisywane. |
Operacje głównego handlera AJAX
Wszystkie operacje idą pod /dxpr_builder/ajax z parametrem tokenu
zapytań uzyskanym spod /dxpr_builder/csrf. Nazwa operacji
jest wysyłana w polu treści POST action; wszystkie pozostałe parametry
to pola treści POST, chyba że podano inaczej. Kolumna „Ponownie sprawdza
rozliczalność” oznacza operacje, które wywołują isBillableUser()
ponownie wewnątrz switcha. Gdy sprawdzanie zawiedzie, zwracają pustą
odpowiedź AjaxResponse opisaną wyżej, chyba że wiersz mówi inaczej.
Sesja i dostęp
| Operacja |
Parametry |
Ponownie sprawdza rozliczalność |
Zwraca |
dxpr_login |
Brak |
Nie |
Wartość logiczna JSON: czy bieżący użytkownik jest rozliczany. |
dxpr_builder_csrf |
Brak |
Tak |
Ciąg JSON: URL handlera z parametrem zapytania token (tak samo jak /dxpr_builder/csrf bez opcji enterprise). |
| Operacja |
Parametry |
Ponownie sprawdza rozliczalność |
Zwraca |
dxpr_get_container_types |
Brak |
Tak |
Obiekt JSON z kluczami entity_type|bundle o wartościach entity_type - bundle, po jednym wpisie na rodzaj, którego domyślne wyświetlanie używa formattera dxpr_builder_text w co najmniej jednym polu. |
dxpr_get_container_names |
container_type (wymagany, entity_type|bundle) |
Tak (zwraca pusty ciąg JSON zamiast pustej odpowiedzi) |
Obiekt JSON z kluczami entity_id|field_name (albo entity_id|field_name|langcode dla bytów wielojęzycznych) o wartościach entity label|field label. Gdy brakuje container_type albo sprawdzanie rozliczalności zawiedzie, odpowiedzią jest pusty ciąg JSON. |
dxpr_save_container |
type (wymagany, entity_type|bundle); name (wymagany, entity_id|field_name albo entity_id|revision_id|field_name); htmlContent (wymagany, zakodowany markup); lang (opcjonalny, domyślnie domyślny język witryny) |
Tak |
Pusty ciąg JSON przy pomyślnym zapisie. HTTP 400 z komunikatem JSON, gdy htmlContent nie jest ciągiem albo język nie pasuje do bytu nieprzetłumaczalnego; 404, gdy żądane tłumaczenie nie istnieje; 500, gdy bytu nie można wczytać. |
dxpr_save_container robi, co następuje:
- Dekoduje
htmlContent: XOR każdego bajtu z 7, potem dekodowanie URL.
- Zapisuje wynik do pierwszej delty nazwanego pola.
- Tworzy nową domyślną rewizję z komunikatem dziennika
Saved with DXPR builder, gdy rodzaj bytu jest rewidowalny.
- Usuwa blokadę treści bytu, jeśli istnieje.
- Aktualizuje
block_revision_id w sekcjach Konstruktora układu, które odwołują się do zapisanego bloku wstawianego.
- Zwiększa wartość stanu
dxpr_builder.saves_count.
Zapis następuje tylko, gdy użytkownik ma dostęp update do
bytu. Bez niego operacja wciąż zwraca odpowiedź pomyślną z pustym ciągiem.
Elementy CMS (bloki i widoki)
| Operacja |
Parametry |
Ponownie sprawdza rozliczalność |
Zwraca |
dxpr_builder_get_cms_element_names |
Brak |
Tak |
Obiekt JSON z DxprBuilderService::getCmsElementNames() z kluczami list, disallowed i blockCategories. |
dxpr_get_cms_element_settings |
name (wymagany): view-<view_id>-<display_id> albo block-<plugin_id>; ajax_page_state[libraries] (opcjonalny, rozdzielone przecinkami już wczytane biblioteki) |
Tak |
Obiekt JSON z css, js, settings i data. Dla widoku data to wyrenderowane widżety odsłoniętych filtrów; dla bloku data to formularz konfiguracji bloku owinięty w tagi <form>, z usuniętymi elementami provider, admin_label, label, label_display i context_mapping oraz wszystkimi otwartymi elementami details. |
dxpr_builder_load_cms_element |
name (wymagany, parsowany przez parseStringForCmsElementInfo()); settings (wymagany); data (wymagany, tablica); ajax_page_state[libraries] (opcjonalny) |
Nie |
Obiekt JSON z css, js, settings i data, gdzie data to wyrenderowany blok albo wyświetlanie widoku. |
W obu operacjach zwracających settings, css i js to
wyrenderowane tagi zasobów, których nie ma jeszcze na stronie, a
settings to zdekodowany obiekt drupalSettings albo pusty
ciąg, gdy ich nie ma.
Szablony stron
| Operacja |
Parametry |
Ponownie sprawdza rozliczalność |
Zwraca |
dxpr_get_page_templates |
Brak |
Tak |
Tablica JSON włączonych szablonów stron, każdy z title, uuid, module (zawsze null: byt go nie przechowuje), category, date, weight (liczba całkowita) i image (URL data: albo URL not-found.png modułu). |
dxpr_load_page_template |
uuid (wymagany) |
Tak |
Odpowiedź HTML z markupem szablonu po podmianie tokenów bazowych; pusta, gdy żaden włączony szablon nie pasuje. |
Szablony użytkowników
| Operacja |
Parametry |
Ponownie sprawdza rozliczalność |
Zwraca |
dxpr_get_templates |
Brak |
Tak |
Tablica JSON szablonów bieżącego użytkownika albo oznaczonych jako globalne; szablony, których konto autora już nie istnieje, są pomijane. Każdy wpis ma id, uuid, name, global, current_user_is_author, author_id, author_name, type oraz, gdy zapisany, image (URL data:). |
dxpr_load_template |
uuid (wymagany) |
Tak |
Odpowiedź HTML z markupem szablonu po podmianie tokenów bazowych; pusta, gdy żaden włączony szablon nie pasuje. |
dxpr_save_template |
name (wymagany); template (wymagany, markup); type (opcjonalny, domyślnie custom); global (opcjonalny, rzutowany na wartość logiczną); image (opcjonalny: ciąg base64 albo URL data:image w treści POST albo wieloczęściowe pole pliku o nazwie image) |
Tak |
Obiekt JSON z message i code. code 200 przy pomyślnym zapisie; code 409 (status HTTP 200), gdy istnieje szablon o tej samej nazwie maszynowej; code 400 ze statusem HTTP 400, gdy obraz nie jest prawidłowym danymi obrazu. |
dxpr_delete_template |
name (wymagany) |
Tak |
Pusty ciąg JSON. |
Nazwa maszynowa powstaje z name przez małe litery i zamianę
każdego ciągu znaków spoza a-z0-9_ na podkreślenie. type
sięga do atrybutu data-azb w markupu, gdy zapisany szablon nie
ma typu.
Obrazy
| Operacja |
Parametry |
Ponownie sprawdza rozliczalność |
Zwraca |
dxpr_builder_get_image_urls |
entityIDs (wymagany, tablica); imageStyle (wymagany; original dla pliku bez stylu); entityType (wymagany; media rozwiązuje elementy multimedialne, każda inna wartość używana jest jako rodzaj bytu dla ID) |
Tak |
Treść tekstowa: rozdzielone przecinkami URLe obrazów. Pliki dają URL względny od korzenia z parametrem zapytania fid. Elementy multimedialne rodzaju image albo video rozwiązują się do pliku źródłowego. Elementy acquia_dam_image_asset dają URL DAM z dodanymi mid, acquiaDamAsset i imageStyle. Pozostałe elementy multimedialne są pomijane. HTTP 204 bez treści, gdy entityIDs jest puste albo gdy żaden element multimedialny nie daje się rozwiązać. |
dxpr_builder_get_image_style_url |
imageStyle (wymagany); entityId (wymagany); entityTypeId (wymagany, file albo media) |
Tak |
Treść tekstowa. Dla pliku: jego URL względny od korzenia przez styl obrazu (pliki SVG i original pomijają styl), z parametrem zapytania fid. Dla elementu multimedialnego acquia_dam_image_asset: URL DAM. HTTP 204 bez treści dla każdego innego bytu albo gdy bytu nie znaleziono. |
dxpr_builder_get_image_metadata |
entityId (wymagany); entityType (wymagany, file albo media) |
Tak (zwraca JSON 403 zamiast pustej odpowiedzi) |
{"data": {"alt": "...", "title": "..."}} z pola źródła obrazu elementu multimedialnego (zasób Acquia DAM daje swój tekst alt z DAM i pusty tytuł). Dla pliku wartości pochodzą z pierwszego elementu multimedialnego, którego field_media_image odwołuje się do niego. data to pusta tablica, gdy byt nie jest plikiem ani elementem multimedialnym albo gdy żadne multimedia nie odwołują się do pliku. Błędy: 400 {"error": "Missing required parameters"}, 404 {"error": "Entity not found"}, 500 {"error": "Failed to load entity"}, 403 {"error": "Access denied"}. |
Blokady treści
| Operacja |
Parametry |
Ponownie sprawdza rozliczalność |
Zwraca |
dxpr_content_lock_status |
entity_id, revision_id, entity_type, langcode (wszystkie wymagane) |
Nie |
Obiekt JSON z status (wartość logiczna) i label (etykieta bytu); gdy zablokowane, także entity_lock_author_id i entity_lock_author_name. |
dxpr_toggle_content_lock |
entity_id, revision_id, entity_type, langcode, toggle_action (wszystkie wymagane; lock tworzy blokadę, każda inna wartość ją usuwa) |
Nie |
Obiekt JSON z label i status (true po zablokowaniu, false po odblokowaniu). Pusta tablica JSON ([]), gdy bytu nie można wczytać albo użytkownik nie ma dostępu update. |
Strony administracyjne
Wszystkie te trasy przyjmują każdą metodę (bez klucza methods). Ścieżki
z {...} przyjmują ID bytu konfiguracji albo, dla {migration_id},
ID migracji.
| Ścieżka |
Trasa |
Uprawnienie |
Cel |
/admin/dxpr_studio |
dxpr_builder.admin.studio |
administer dxpr builder configuration |
Przegląd DXPR Studio; strona bloku menu administracji z rdzenia, wymieniająca strony podrzędne. |
/admin/dxpr_studio/dxpr_builder |
dxpr_builder.admin.studio.builder |
administer dxpr builder configuration |
Przegląd DXPR Builder; strona bloku menu administracji z rdzenia. |
/admin/dxpr_studio/dxpr_builder/settings |
dxpr_builder.settings |
administer dxpr builder configuration |
DxprBuilderSettingsForm: formularz ustawień modułu. |
/admin/dxpr_studio/dxpr_builder/ai_settings |
dxpr_builder.ai_settings |
administer dxpr builder configuration |
DxprBuilderAiSettingsForm: formularz ustawień AI. |
/admin/dxpr_studio/dxpr_builder/user_templates |
entity.dxpr_builder_user_template.collection |
administer site configuration |
Lista bytów konfiguracji dxpr_builder_user_template. |
/admin/dxpr_studio/dxpr_builder/user_templates/add |
entity.dxpr_builder_user_template.add_form |
administer site configuration |
Dodawanie szablonu użytkownika. |
/admin/dxpr_studio/dxpr_builder/user_templates/{dxpr_builder_user_template} |
entity.dxpr_builder_user_template.edit_form |
administer site configuration |
Edycja szablonu użytkownika. |
/admin/dxpr_studio/dxpr_builder/user_templates/{dxpr_builder_user_template}/delete |
entity.dxpr_builder_user_template.delete_form |
administer site configuration |
Usuwanie szablonu użytkownika (formularz potwierdzenia). |
/admin/dxpr_studio/dxpr_builder/page_template |
entity.dxpr_builder_page_template.collection |
administer site configuration |
Lista bytów konfiguracji dxpr_builder_page_template. |
/admin/dxpr_studio/dxpr_builder/page_template/add |
entity.dxpr_builder_page_template.add_form |
administer site configuration |
Dodawanie szablonu strony. |
/admin/dxpr_studio/dxpr_builder/page_template/create |
dxpr_builder.create_page_template |
administer dxpr builder configuration |
PageController::createPageTemplate(): kopiuje włączony szablon użytkownika wskazany parametrem zapytania uuid do nowego szablonu strony o tym samym ID i kategorii DXPR. Ustawia komunikat o statusie albo błędzie i przekierowuje do listy szablonów użytkownika. |
/admin/dxpr_studio/dxpr_builder/page_template/{dxpr_builder_page_template} |
entity.dxpr_builder_page_template.edit_form |
administer site configuration |
Edycja szablonu strony. |
/admin/dxpr_studio/dxpr_builder/page_template/{dxpr_builder_page_template}/delete |
entity.dxpr_builder_page_template.delete_form |
administer site configuration |
Usuwanie szablonu strony (formularz potwierdzenia). |
/admin/dxpr_studio/dxpr_builder/profile |
entity.dxpr_builder_profile.collection |
administer dxpr_builder_profile |
Lista bytów konfiguracji dxpr_builder_profile. |
/admin/dxpr_studio/dxpr_builder/profile/add |
entity.dxpr_builder_profile.add_form |
administer dxpr_builder_profile |
Dodawanie profilu. |
/admin/dxpr_studio/dxpr_builder/profile/{dxpr_builder_profile} |
entity.dxpr_builder_profile.edit_form |
administer dxpr_builder_profile |
Edycja profilu. |
/admin/dxpr_studio/dxpr_builder/profile/{dxpr_builder_profile}/delete |
entity.dxpr_builder_profile.delete_form |
administer dxpr_builder_profile |
Usuwanie profilu (formularz potwierdzenia). |
/admin/dxpr_studio/dxpr_builder/user_licenses |
dxpr_builder.user_licenses |
administer dxpr builder configuration |
PageController::userLicensesPage(): niecachowana tabela licencjonowanych użytkowników (kolumny User, Roles, Sites, Assigned i Operations). Nad nią strona renderuje własną kartę podsumowania licencji (dxpr-license-info), gdy informacje o licencji są dostępne, oraz, gdy zwolniona licencja odczeka swoje 30 dni, powiadomienie „Next license available on”. Na tej trasie blok License info nie renderuje niczego, więc podsumowanie nigdy nie pokazuje się dwa razy. |
/admin/dxpr_studio/dxpr_builder/user_licenses/sites |
dxpr_builder.user_licenses.sites |
administer dxpr builder configuration |
PageController::userLicensesSitesPage(): lista domen zapisanych dla użytkownika podanego w parametrze żądania mail; otwierana w oknie modalnym z tabeli licencji. |
/admin/dxpr_studio/dxpr_builder/content |
dxpr_builder.licensed_content |
administer dxpr builder configuration |
PageController::licensedContentPage(): stronicowana tabela (20 na stronę) elementów treści edytowanych za pomocą DXPR Builder, z podsumowaniem licencji elementów treści. Parametr zapytania needs_migration=1 pokazuje tylko elementy wymagające migracji treści. Pusta, gdy brak informacji o licencji. |
/admin/dxpr_studio/dxpr_builder/migration-status |
dxpr_builder.migration_status |
administer dxpr builder configuration |
MigrationStatusController::statusPage(): niecachowana tabela zarejestrowanych migracji treści z ich oczekującymi elementami. Każda oczekująca migracja ma link Run now, a przycisk Run all pending migrations pojawia się, gdy jakieś oczekują. |
/admin/dxpr_studio/dxpr_builder/migration-run/{migration_id} |
dxpr_builder.migration_run_confirm |
administer dxpr builder configuration |
MigrationRunConfirmForm: potwierdza, potem uruchamia jedną migrację jako proces wsadowy (batch) i wraca na stronę statusu. |
/admin/dxpr_studio/dxpr_builder/migration-run-all |
dxpr_builder.migration_run_all_confirm |
administer dxpr builder configuration |
MigrationRunAllConfirmForm: potwierdza, potem uruchamia każdą zarejestrowaną migrację jako jeden proces wsadowy i wraca na stronę statusu. |
/dxpr-builder/disavow-user |
dxpr_builder.disavow_user_confirm |
administer dxpr builder configuration |
DisavowUserConfirmForm: potwierdza wykluczenie użytkownika podanego w parametrze zapytania uid z edycji w DXPR Builder. |
/dxpr-builder/delete-stale-user |
dxpr_builder.delete_stale_user_confirm |
administer dxpr builder configuration |
DeleteStaleUserConfirmForm: potwierdza usunięcie danych licencji dla adresu e-mail podanego w parametrze zapytania email. |
Co dalej?
- Opis konfiguracji dla ustawień
sterujących przeglądarką mediów i zachowaniem AI używanymi przez te
punkty końcowe.
- PHP API dla usług, które
wywołują kontrolery.
- Hooks API dla hooków pozwalających
innym modułom zmieniać zachowanie kreatora.