definePageLayout(), um ein Layout für ein Objekt zu deklarieren, das Sie besitzen, oder definePageLayoutTab(), um einen einzelnen Tab zu einem Layout hinzuzufügen, das bereits existiert (Ihr eigenes oder ein standardmäßiges Twenty-Layout).
definePageLayout
Verwenden Sie dies, wenn Sie die gesamte Detailseite besitzen – typischerweise für ein benutzerdefiniertes Objekt, das Sie selbst definiert haben.src/page-layouts/example-record-page-layout.ts
Hauptpunkte
typeist eines von'RECORD_INDEX','RECORD_PAGE','DASHBOARD'oder'STANDALONE_PAGE'. Verwenden Sie'RECORD_PAGE', um die Detailansicht eines bestimmten Objekts anzupassen.objectUniversalIdentifiergibt an, auf welches Objekt dieses Layout angewendet wird.- Jeder
tabdefiniert einen Abschnitt der Seite mittitle,positionundlayoutMode:VERTICAL_LISTfür Datensatzseiten und eigenständige Seiten,GRIDfür Dashboards undCANVASfür ein einzelnes Widget, das den Ansichtsbereich des Tabs ausfüllen soll. EinVERTICAL_LIST-Tab ordnet Widgets vertikal an. Integrierte Widgets, die ihr eigenes Scrollen verwalten, wie etwa Timelines, Dateien, Notizen, Aufgaben und Workflows, füllen einen Ansichtsbereich aus; Felder, Front-Komponenten, Diagramme und andere Widgets mitfit-contentwerden mit ihrer Inhalts- oder konfigurierten Höhe dargestellt. EinGRID-Tab ordnet seine Widgets immer als Karten in einem Raster mit 12 Spalten an. EinCANVAS-Widget hat keine explizite Position; wenn ein Canvas-Tab mehrere Widgets enthält, werden sie in ihrer Inhaltshöhe gerendert, anstatt den Viewport auszufüllen. - Setze
layoutModeexplizit. Wenn du es weglässt, erhältst duVERTICAL_LISTauf einerSTANDALONE_PAGEundGRIDüberall sonst, was auf einer Datensatzseite selten gewünscht ist. - Jedes
widgetinnerhalb eines Tabs kann eine Frontend-Komponente, eine Relationenliste oder andere eingebaute Widget-Typen rendern. - Ein
FRONT_COMPONENT-Widget kannheaderCommandMenuItemUniversalIdentifiersauf ein geordnetes Array universeller Kennungen von Befehlsmenüelementen aus derselben App festlegen. Diese Aktionen werden als Symbolschaltflächen im Kopf der Widget-Karte angezeigt und behalten ihre Verfügbarkeits- und Berechtigungsprüfungen auf Befehlsebene bei. Kennungen müssen eindeutig sein und bei installierter App aufgelöst werden können. positionauf Tabs steuert deren Reihenfolge. Verwenden Sie höhere Werte (z. B. 50), um benutzerdefinierte Tabs hinter den integrierten zu platzieren.
Feld-Widgets
EinFIELD-Widget rendert ein Feld des Datensatzes. Bei Relationsfeldern kann es auch eine Liste verwandter Datensätze einbetten:
fieldMetadataIdnimmt den universellen Bezeichner eines Feldes am Objekt des Layouts.fieldDisplayModeist eines von'FIELD','CARD','EDITOR','VIEW'oder'TABLE'.TABLEbettet eine Ansicht ein, die die Datensätze eines 1:n-Relationsfeldes auflistet.nestedRelationFieldMetadataIdist optional und nimmt den universellen Bezeichner eines Eins-zu-viele-Beziehungsfelds auf dem Beziehungszielobjekt entgegen, um Datensätze aufzulisten, die zwei Beziehungssprünge entfernt sind (z. B. eine Company-Seite, die die Opportunities der Personen des Unternehmens auflistet, oder eine Person-Seite, die die Opportunities des Unternehmens der Person auflistet). Der erste Sprung kann ein Eins-zu-viele- oder ein Viele-zu-eins-Beziehungsfeld sein, der zweite muss Eins-zu-viele sein (Junction-Beziehungen werden nicht unterstützt), und es erfordertfieldDisplayMode: 'TABLE'— die Kombination mit jedem anderen Anzeigemodus ist ein Validierungsfehler, da ein verschachteltes Widget immer als eingebettete Ansicht gerendert wird.
definePageLayoutTab
Verwenden Sie dies, wenn Sie nur einen Tab zu einem vorhandenen Layout hinzufügen möchten – zum Beispiel einen Analytics-Tab auf der standardmäßigen Company-Seite oder einen KI-Zusammenfassungs-Tab, der an das Layout Ihres eigenen Objekts angehängt ist.src/page-layouts/example-extra-tab.ts
Hauptpunkte
-
pageLayoutUniversalIdentifierist erforderlich und muss auf ein Seitenlayout verweisen, das zum Installationszeitpunkt bereits existiert – entweder ein standardmäßiges Twenty-Layout oder eines, das von Ihrer eigenen App definiert wurde. App-übergreifende Verweise auf Layouts, die einer anderen installierten App gehören, werden derzeit nicht unterstützt. Wenn das übergeordnete Layout fehlt, schlägt die Installation mit einem eindeutigen Validierungsfehler fehl. -
Für Standard-Twenty-Layouts importieren Sie die Bezeichner aus
twenty-sdk/define:Jeder Layout-Eintrag stellt außerdem seinetabsund derenwidgetszur Verfügung, sodass Sie auf jede Ebene verweisen können:Eine kurze Alias-VariableSTANDARD_PAGE_LAYOUTist ebenfalls verfügbar: -
widgetssind ausschließlich auf diesen Tab beschränkt – sie verweisen auf Frontend-Komponenten, Ansichten usw., genau wie Widgets, die inline indefinePageLayoutdefiniert sind. -
positionsteuert die Reihenfolge im Zielseitenlayout relativ zu den vorhandenen Registerkarten. Wählen Sie einen Wert, der Ihre Registerkarte relativ zu integrierten Registerkarten an die gewünschte Position bringt. -
Verwenden Sie dies anstelle von
definePageLayout, wenn Sie einem vorhandenen Layout nur etwas hinzufügen möchten. Verwenden SiedefinePageLayout, wenn Sie das gesamte Layout besitzen.