Prezentare generală
Un layout de pagină controlează modul în care este aranjată pagina de detalii a unei înregistrări: ce file apar și ce widgeturi conțin acestea. FoloseștedefinePageLayout() pentru a declara un layout pentru un obiect pe care îl deții, definePageLayoutTab() pentru a adăuga o singură filă la un layout care există deja (al tău sau unul standard Twenty one) sau definePageLayoutWidget() pentru a adăuga un singur widget la o filă care există deja.
definePageLayout
Folosește aceasta atunci când deții întreaga pagină de detalii — de obicei pentru un obiect personalizat pe care l-ai definit chiar tu.src/page-layouts/example-record-page-layout.ts
Puncte cheie
typeeste unul dintre'RECORD_INDEX','RECORD_PAGE','DASHBOARD','STANDALONE_PAGE'sau'RECORD_FORM'. Folosiți'RECORD_PAGE'pentru a personaliza vizualizarea de detaliu a unui obiect specific.'RECORD_FORM'descrie formularul de creare al unui obiect și conține widgeturiFORM_FIELD, fiecare redând un singur câmp. Twenty oferă câte un aspect'RECORD_FORM'pentru fiecare obiect, cu câte un widget pentru fiecare câmp care poate fi creat, astfel încât rareori trebuie să creați unul; acesta nu redă încă formulare de înregistrare.objectUniversalIdentifierspecifică la ce obiect se aplică această machetă.- Fiecare
tabdefinește o secțiune a paginii cu untitle,positionșilayoutMode: utilizațiVERTICAL_LISTpentru pagini ale înregistrărilor și pagini independente șiGRIDpentru dashboard-uri. O filăVERTICAL_LISTstivuiește widgeturile pe verticală. Widgeturile integrate care își gestionează propria derulare, precum cronologiile, fișierele, notițele, sarcinile, fluxurile de lucru și conversațiile, ocupă în mod implicit o singură zonă de vizualizare; câmpurile, componentele frontale, graficele și alte widgeturi cu ajustare la conținut se redau la înălțimea conținutului sau la înălțimea configurată. O filăGRIDîși aranjează întotdeauna widgeturile ca carduri pe o grilă cu 12 coloane. - Widgeturile dintr-o filă
VERTICAL_LISTmoștenesc modul de aspect al filei, iar ordinea lor provine din matriceawidgets. Nu setațiposition; setați opționalulheightBehaviorde nivel superior la'TAB_VIEWPORT'atunci când un widget trebuie să ocupe o zonă de vizualizare completă a filei și să își gestioneze propria derulare sau la'FIT_CONTENT'pentru a suprascrie o setare implicită integrată pentru înălțime completă. Widgeturile precedente nu reduc această înălțime. Este permis un singur widgetTAB_VIEWPORTactiv per filă și acesta trebuie să fie după widgeturile adaptate la conținut. - Widgeturile
GRIDcontinuă să utilizezeposition: { layoutMode: PageLayoutTabLayoutMode.GRID, row, column, rowSpan, columnSpan }.heightBehaviorde nivel superior este valid doar pentru fileleVERTICAL_LIST; utilizarea sa cuGRIDsauCANVASreprezintă o eroare de validare. - Filele Canvas existente și pozițiile explicite ale widgeturilor rămân acceptate. SDK-ul afișează avertismente privind deprecierea, împreună cu înlocuirile recomandate.
- Setează explicit
layoutMode. Dacă îl omiți, vei obțineVERTICAL_LISTpe unSTANDALONE_PAGEșiGRIDîn rest, ceea ce rareori îți dorești pe o pagină de înregistrare. - Fiecare
widgetdintr-o filă poate reda un front component, o listă de relații sau alte tipuri de widgeturi integrate. - Un widget
FRONT_COMPONENTpoate setaheaderCommandMenuItemUniversalIdentifiersla o matrice ordonată de identificatori universali ai elementelor meniului de comenzi din aceeași aplicație. Aceste acțiuni apar ca butoane cu pictograme în antetul cardului widgetului și își păstrează verificările de disponibilitate și permisiuni la nivel de comandă. Identificatorii trebuie să fie unici și trebuie să se rezolve atunci când aplicația este instalată. - Un widget
IFRAMEpoate utiliza microfonul sau camera pentru site-uri web aprobate prinrequestedIframeMediaPermissionsale aplicației care îl deține. Membrii selectează Activare și aprobă o confirmare nativă a browserului care afișează aplicația, originea site-ului web și accesul solicitat la microfon sau cameră înainte ca accesul să înceapă. Aprobările de securitate ale spațiului de lucru și autorizațiile altor aplicații nu se aplică widgeturilor definite de aplicație. positionpe file le controlează ordinea. Folosește valori mai mari (de ex., 50) pentru a plasa filele personalizate după cele integrate.twenty app pullscrie aspectele paginilor înapoi, cu filele și widgeturile lor inline. Un widget pe care exportul nu îl poate include încă, cum ar fi unul care afișează propria componentă front-end a aplicației dvs. sau unul de tipulVIEWdepreciat, este raportat de pull în loc să fie scris; consultați ce nu scrie pull.
Widget-uri Câmp
Un widgetFIELD redă un câmp al înregistrării curente. Pentru câmpurile de relație, acesta poate încorpora și o vizualizare a înregistrărilor asociate cu înregistrarea curentă.
Pentru a încorpora o vizualizare care nu este limitată la înregistrarea curentă, utilizați un widget de tabel de înregistrări.
fieldMetadataIdprimește identificatorul universal al unui câmp de pe obiectul layout-ului.fieldDisplayModeeste unul dintre'FIELD','CARD','EDITOR','VIEW'sau'TABLE'.TABLEîncorporează o vizualizare care listează înregistrările unui câmp de relație de tip unu-la-mulți.isUIEditablese aplică câmpurilor de relație în modul de afișareTABLE. Valoarea implicită estetrue; setați-o lafalsepentru a împiedica editarea înregistrărilor din tabelul sau kanbanul încorporat.nestedRelationFieldMetadataIdeste opțional și primește identificatorul universal al unui câmp de relație unu-la-mulți de pe obiectul țintă al relației, pentru a afișa în listă înregistrări aflate la două salturi de relație distanță (de ex., o pagină Company care afișează oportunitățile persoanelor companiei sau o pagină Person care afișează oportunitățile companiei persoanei). Primul salt poate fi un câmp de relație unu-la-mulți sau mulți-la-unu, al doilea trebuie să fie unu-la-mulți (relațiile de tip junction nu sunt acceptate) și necesităfieldDisplayMode: 'TABLE'— combinarea lui cu orice alt mod de afișare reprezintă o eroare de validare, deoarece un widget îmbricat este întotdeauna redat ca o vizualizare încorporată.
Widgeturi de tabel de înregistrări
Un widgetRECORD_TABLE încorporează o vizualizare salvată într-un tablou de bord, într-o pagină de înregistrare sau într-o pagină independentă. Vizualizarea salvată determină înregistrările, câmpurile, filtrele, sortările și aspectul afișate în widget.
viewUniversalIdentifieridentifică vizualizarea de afișat.recordLimiteste opțional și limitează numărul de înregistrări afișate de widget.isUIEditablese aplică vizualizărilor de tabel și kanban. Acesta permite editarea celulelor din tabel sau editarea, mutarea și crearea cardurilor kanban. Valoarea implicită estetruepentru aspecteleRECORD_PAGEșifalsepentru alte aspecte.isUIEditablecontrolează doar acțiunile din interfața cu utilizatorul. Permisiunile pentru înregistrări se aplică în continuare, iar setările vizualizării rămân editabile numai în editorul de aspect al paginii.
definePageLayoutTab
Folosește aceasta atunci când vrei doar să adaugi o filă la un layout existent — de exemplu, o filă de analize pe pagina standard Company sau o filă de rezumat AI atașată layoutului obiectului tău.src/page-layouts/example-extra-tab.ts
Puncte cheie
-
pageLayoutUniversalIdentifiereste obligatoriu și trebuie să indice către un layout de pagină care există deja la momentul instalării — fie un layout standard Twenty, fie unul definit de propria ta aplicație. Referințele cross-app către layouturi deținute de o altă aplicație instalată nu sunt acceptate în prezent. Când lipsește layoutul părinte, instalarea eșuează cu o eroare clară de validare. -
Pentru layout-urile standard Twenty, importați identificatorii din
twenty-sdk/define:Fiecare intrare de layout își expune, de asemenea,tabsșiwidgets, astfel încât puteți face referire la orice nivel:Este disponibil și un alias scurtSTANDARD_PAGE_LAYOUT: -
widgetssunt limitate doar la această filă — fac referire la front components, vizualizări etc., exact ca widgeturile definite inline îndefinePageLayout. -
positioncontrolează ordonarea în raport cu filele existente din layoutul țintă. Alege o valoare care să plaseze fila ta acolo unde dorești, relativ la filele predefinite. -
Folosește aceasta în loc de
definePageLayoutatunci când vrei doar să adaugi la un layout existent. FoloseștedefinePageLayoutatunci când deții întregul layout. -
twenty app pullscrie înapoi o filă pe care ai adăugat-o la un aspect de pagină care nu îți aparține ca fișierdefinePageLayoutTab(), cu widgeturile sale inline, în aceleași limite ca widgeturile unuidefinePageLayout().
definePageLayoutWidget
Folosește această opțiune atunci când vrei doar să adaugi un widget într-o filă care există deja — de exemplu, o componentă front în fila Home a paginii standard Company sau o diagramă în fila Home a paginii de înregistrare a propriului obiect.src/page-layout-widgets/example-home-widget.ts
Puncte cheie
-
pageLayoutTabUniversalIdentifiereste obligatoriu și trebuie să indice către o filă care există deja la momentul instalării: o filă standard Twenty (STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.\<object>RecordPage.tabs.\<tab>.universalIdentifier), o filă a unuia dintre propriile tale layouturi sau o filă a paginii de înregistrare pe care Twenty o generează pentru unul dintre obiectele tale. Filele generate au identificatori deterministici, astfel încât îi poți calcula: -
positioneste obligatoriu, deoarece fila nu face parte din manifestul tău, iar modul său de layout nu poate fi dedus. Potrivește modul de layout al filei: filele paginii de înregistrare sunt liste verticale, așadar folosește{ layoutMode: PageLayoutTabLayoutMode.VERTICAL_LIST, index }cu un index mai mare decât cel al widgeturilor integrate (widgetul Fields este la 0). -
Pentru o listă verticală, setați
position.heightBehaviorlaPageLayoutWidgetVerticalListHeightBehavior.TAB_VIEWPORTpentru a umple zona de vizualizare a unei file sau laPageLayoutWidgetVerticalListHeightBehavior.FIT_CONTENTpentru a utiliza conținutul widgetului sau înălțimea configurată. Importați această enumerare dintwenty-sdk/define, ca în exemplul de mai sus. Dacă este omis, widgetul își păstrează valoarea implicită integrată. Doar un widget activ per filă poate umple zona de vizualizare, iar indexul său trebuie să îl plaseze după toate widgeturile cu conținut adaptat.heightBehaviornu este acceptat în pozițiileGRIDsauCANVAS. -
configurationfuncționează exact ca un widget definit inline îndefinePageLayoutsaudefinePageLayoutTab: face referire la componente front, vizualizări, câmpuri și așa mai departe. -
Folosește această opțiune în loc de
definePageLayoutTabatunci când fila există deja și vrei doar să plasezi un widget pe ea. FoloseștedefinePageLayoutTabatunci când vrei o filă proprie. -
twenty app pullscrie înapoi un widget pe care l-ai adăugat la o filă care nu îți aparține ca fișierdefinePageLayoutWidget(), în aceleași limite ca widgeturile unuidefinePageLayout().