نظرة عامة
يتحكم تخطيط الصفحة في كيفية ترتيب صفحة تفاصيل السجل: ما هي الألسنة التي تظهر وما عناصر الواجهة (widgets) التي تحتوي عليها. استخدمdefinePageLayout() للتصريح عن تخطيط لكائن تملكه، وdefinePageLayoutTab() لإضافة لسان واحد إلى تخطيط موجود مسبقًا (سواء كان مِلكك أو تخطيط Twenty one قياسيًا)، أو definePageLayoutWidget() لإضافة عنصر واجهة واحد إلى لسان موجود مسبقًا.
definePageLayout
استخدم هذا عندما تملك صفحة التفاصيل بالكامل — عادةً لكائن مخصص قمت بتعريفه بنفسك.src/page-layouts/example-record-page-layout.ts
النقاط الرئيسية
typeهو أحد'RECORD_INDEX'أو'RECORD_PAGE'أو'DASHBOARD'أو'STANDALONE_PAGE'أو'RECORD_FORM'. استخدم'RECORD_PAGE'لتخصيص عرض التفاصيل لكائن محدّد. يصف'RECORD_FORM'نموذج إنشاء كائن ويحتوي على عناصر واجهةFORM_FIELD، يعرض كل منها حقلاً واحداً. يوفر Twenty تخطيط'RECORD_FORM'واحداً لكل كائن مع عنصر واجهة واحد لكل حقل قابل للإنشاء، لذا نادراً ما تحتاج إلى تأليف واحد؛ وهو لا يعرض نماذج السجلات بعد.objectUniversalIdentifierيحدّد الكائن الذي ينطبق عليه هذا التخطيط.- يُعرّف كل
tabقسمًا من الصفحة معtitleوpositionوlayoutMode: استخدمVERTICAL_LISTلصفحات السجلات والصفحات المستقلة، وGRIDللوحات المعلومات. تُرتّب علامة التبويبVERTICAL_LISTعناصر الواجهة عموديًا. تملأ الأدوات المضمنة التي تدير تمريرها الخاص، مثل المخططات الزمنية والملفات والملاحظات والمهام وسير العمل والمحادثات، إطار عرض واحدًا افتراضيًا؛ وتُعرض الحقول والمكونات الأمامية والرسوم البيانية وغيرها من الأدوات الملائمة للمحتوى بارتفاع محتواها أو بارتفاعها المُهيأ. تُرتّب علامة التبويبGRIDعناصر واجهتها دائمًا على شكل بطاقات ضمن شبكة من 12 عمودًا. - ترث عناصر واجهة المستخدم في علامة تبويب
VERTICAL_LISTوضع تخطيط علامة التبويب، ويأتي ترتيبها من المصفوفةwidgets. لا تضبطposition؛ اضبطheightBehaviorالاختياري من المستوى الأعلى على'TAB_VIEWPORT'عندما يجب أن يشغل عنصر واجهة مستخدم منفذ عرض علامة تبويب كاملًا وأن يدير تمريره الخاص، أو على'FIT_CONTENT'لتجاوز الإعداد الافتراضي المضمّن للارتفاع الكامل. لا تقلل عناصر واجهة المستخدم السابقة ذلك الارتفاع. يُسمح بعنصر واجهة مستخدم نشط واحد فقط منTAB_VIEWPORTلكل علامة تبويب، ويجب أن يأتي بعد عناصر واجهة المستخدم الملائمة للمحتوى. - تستمر أدوات
GRIDفي استخدامposition: { layoutMode: PageLayoutTabLayoutMode.GRID, row, column, rowSpan, columnSpan }. تكونheightBehaviorعلى المستوى الأعلى صالحة فقط لعلامات تبويبVERTICAL_LIST؛ ويُعد استخدامها معGRIDأوCANVASخطأ في التحقق. - تظل علامات تبويب Canvas الحالية ومواضع الأدوات الصريحة مدعومة. تعرض SDK تحذيرات الإيقاف مع البدائل الموصى بها.
- عيِّن
layoutModeبشكل صريح. إغفاله يمنحكVERTICAL_LISTعلىSTANDALONE_PAGEوGRIDفي كل مكان آخر، وهو أمر نادرًا ما تريده في صفحة سجل. - يمكن لكل
widgetداخل لسان أن يعرض front component، أو قائمة علاقات، أو أنواعًا أخرى من عناصر الواجهة (widgets) المدمجة. - يمكن لأداة
FRONT_COMPONENTتعيينheaderCommandMenuItemUniversalIdentifiersإلى مصفوفة مرتبة من المعرّفات العامة لعناصر قائمة الأوامر من التطبيق نفسه. تظهر هذه الإجراءات كأزرار أيقونات في رأس بطاقة الأداة، وتحتفظ بفحوصات التوفر والأذونات على مستوى الأمر. يجب أن تكون المعرّفات فريدة، ويجب أن تُحل عند تثبيت التطبيق. - يمكن لعنصر واجهة المستخدم
IFRAMEاستخدام الميكروفون أو الكاميرا لمواقع الويب المعتمدة من خلال الخاصيةrequestedIframeMediaPermissionsلتطبيقه المالك. يختار الأعضاء تمكين ويوافقون على تأكيد أصلي من المتصفح يعرض التطبيق، وأصل موقع الويب، والوصول المطلوب إلى الميكروفون أو الكاميرا قبل بدء الوصول. لا تنطبق موافقات أمان مساحة العمل ومنح التطبيقات الأخرى على عناصر واجهة المستخدم المحددة من التطبيق. positionعلى الألسنة يتحكّم في ترتيبها. استخدم قيمًا أعلى (مثل 50) لوضع الألسنة المخصّصة بعد الألسنة المدمجة.- يكتب
twenty app pullتخطيطات الصفحات مرة أخرى مع علامات التبويب والأدوات الخاصة بها مضمنة. تُبلّغ عملية pull عن أداة لا يمكن للتصدير نقلها بعد، مثل أداة تعرض المكوّن الأمامي الخاص بتطبيقك أو أداة من النوعVIEWالمتوقَّف، بدلاً من كتابتها؛ راجع ما لا تكتبه عملية pull.
عناصر واجهة الحقول
يعرض عنصر واجهةFIELD حقلاً واحداً من السجل الحالي. بالنسبة إلى حقول العلاقات، يمكنه أيضاً تضمين عرض للسجلات المرتبطة بالسجل الحالي.
لتضمين عرض غير مقيّد بالسجل الحالي، استخدم عنصر واجهة جدول السجلات.
fieldMetadataIdيأخذ المعرف العالمي لحقل على كائن المخطط.fieldDisplayModeيكون واحداً من'FIELD'،'CARD'،'EDITOR'،'VIEW'أو'TABLE'.TABLEيضمّن عرضاً يسرد السجلات لحقل علاقة من نوع واحد إلى متعدد.- ينطبق
isUIEditableعلى حقول العلاقات في وضع العرضTABLE. تكون قيمته الافتراضيةtrue؛ اضبطها علىfalseلمنع تحرير السجلات من الجدول المضمّن أو لوحة كانبان. nestedRelationFieldMetadataIdاختياري، ويأخذ المعرّف العالمي لحقل علاقة من نوع واحد‑إلى‑متعدد على الكائن الهدف للعلاقة، وذلك لسرد السجلات التي تبعد قفزتين في سلسلة العلاقات (مثل صفحة شركة تسرد الفرص الخاصة بأشخاص الشركة، أو صفحة شخص تسرد الفرص الخاصة بشركة الشخص). يمكن أن تكون القفزة الأولى حقل علاقة من نوع واحد‑إلى‑متعدد أو من نوع متعدد‑إلى‑واحد، بينما يجب أن تكون القفزة الثانية من نوع واحد‑إلى‑متعدد (علاقات الوصل غير مدعومة)، ويتطلب ذلكfieldDisplayMode: 'TABLE'— إذ يُعد الجمع بينه وبين أي نمط عرض آخر خطأ في التحقق من الصحة، نظرًا لأن الودجة المتداخلة يتم عرضها دائمًا كعرض مضمن.
عناصر واجهة جدول السجلات
يضمّن عنصر واجهةRECORD_TABLE عرضاً محفوظاً في لوحة معلومات، أو صفحة سجل، أو صفحة مستقلة. يحدّد العرض المحفوظ السجلات والحقول والفلاتر وعمليات الفرز والتخطيط المعروضة في عنصر الواجهة.
- يحدّد
viewUniversalIdentifierالعرض الذي سيتم عرضه. recordLimitاختياري ويحدّد الحد الأقصى لعدد السجلات التي يعرضها عنصر الواجهة.- ينطبق
isUIEditableعلى عروض الجدول وكانبان. يتيح تحرير خلايا الجدول أو تحرير بطاقات كانبان ونقلها وإنشاؤها. تكون قيمته الافتراضيةtrueفي تخطيطاتRECORD_PAGEوfalseفي التخطيطات الأخرى. - يتحكم
isUIEditableفي إجراءات واجهة المستخدم فقط. تظل أذونات السجلات سارية، وتبقى إعدادات العرض قابلة للتحرير فقط في محرر تخطيط الصفحة.
definePageLayoutTab
استخدم هذا عندما تريد فقط إضافة لسان إلى تخطيط موجود — على سبيل المثال، لسان تحليلات في صفحة Company القياسية، أو لسان ملخص بالذكاء الاصطناعي مرفق بتخطيط الكائن الخاص بك.src/page-layouts/example-extra-tab.ts
النقاط الرئيسية
-
إن
pageLayoutUniversalIdentifierمطلوب ويجب أن يشير إلى تخطيط صفحة موجود بالفعل وقت التثبيت — سواء كان تخطيط Twenty قياسيًا أو تخطيطًا معرّفًا بواسطة تطبيقك الخاص. المراجع المتقاطعة بين التطبيقات إلى التخطيطات المملوكة لتطبيق آخر مُثبَّت غير مدعومة حاليًا. عند فقدان التخطيط الأب، يفشل التثبيت مع ظهور خطأ تحقق واضح. -
بالنسبة لتخطيطات Twenty القياسية، استورد المعرفات من
twenty-sdk/define:كل إدخال تخطيط يوفّر أيضًاtabsالخاصة به وwidgetsالتابعة لها، بحيث يمكنك الرجوع إلى أي مستوى:يتوفر أيضًا اسم قصيرSTANDARD_PAGE_LAYOUT: -
يكون نطاق
widgetsمقتصرًا على هذا اللسان فقط — فهي تشير إلى front components، والعروض، وما إلى ذلك تمامًا مثل عناصر الواجهة (widgets) المُعرَّفة مضمّنة داخلdefinePageLayout. -
positionيتحكّم في الترتيب مقارنةً بعلامات التبويب الموجودة على التخطيط المستهدف. اختر قيمة تضع علامة التبويب الخاصة بك في الموضع الذي تريده بالنسبة إلى علامات التبويب المضمنة. -
استخدم هذا بدلًا من
definePageLayoutعندما تريد فقط الإضافة إلى تخطيط موجود. استخدمdefinePageLayoutعندما تملك التخطيط بالكامل. -
يكتب
twenty app pullعلامة تبويب أضفتها إلى تخطيط صفحة لا تملكه مرة أخرى كملفdefinePageLayoutTab()، مع أدواته مضمنة، ضمن الحدود نفسها المطبقة على أدواتdefinePageLayout().
definePageLayoutWidget
استخدم هذا عندما تريد فقط إضافة عنصر واجهة إلى لسان موجود بالفعل — على سبيل المثال، مكوّن أمامي في لسان الصفحة الرئيسية لصفحة Company القياسية، أو مخطط في لسان الصفحة الرئيسية لصفحة سجل الكائن الخاص بك.src/page-layout-widgets/example-home-widget.ts
النقاط الرئيسية
-
إن
pageLayoutTabUniversalIdentifierمطلوب ويجب أن يشير إلى لسان موجود بالفعل وقت التثبيت: لسان Twenty قياسي (STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.\<object>RecordPage.tabs.\<tab>.universalIdentifier)، أو لسان من أحد تخطيطاتك الخاصة، أو لسان من صفحة السجل التي ينشئها Twenty لأحد كائناتك. للعلامات المُنشأة معرّفات حتمية، لذا يمكنك حسابها: -
positionمطلوب، لأن اللسان ليس جزءًا من البيان الخاص بك ولا يمكن استنتاج وضع تخطيطه. طابق وضع تخطيط اللسان: علامات تبويب صفحة السجل هي قوائم عمودية، لذا استخدم{ layoutMode: PageLayoutTabLayoutMode.VERTICAL_LIST, index }مع فهرس أعلى من عناصر الواجهة المضمنة (يوجد عنصر واجهة الحقول عند 0). -
بالنسبة إلى قائمة عمودية، عيّن
position.heightBehaviorإلىPageLayoutWidgetVerticalListHeightBehavior.TAB_VIEWPORTلملء منفذ عرض علامة تبويب واحدة، أو إلىPageLayoutWidgetVerticalListHeightBehavior.FIT_CONTENTلاستخدام محتوى الأداة أو ارتفاعها المُكوَّن. استورد هذا التعداد منtwenty-sdk/define، كما في المثال أعلاه. إذا تم حذفه، تحتفظ الأداة بقيمتها الافتراضية المضمنة. يمكن لأداة نشطة واحدة فقط لكل علامة تبويب ملء منفذ العرض، ويجب أن يضعها فهرسها بعد جميع الأدوات ذات ملاءمة المحتوى. لا تُدعمheightBehaviorفي مواضعGRIDأوCANVAS. -
يعمل
configurationتمامًا مثل عنصر واجهة معرّف مضمنًا فيdefinePageLayoutأوdefinePageLayoutTab: إذ يشير إلى المكوّنات الأمامية، والعروض، والحقول، وما إلى ذلك. -
استخدم هذا بدلًا من
definePageLayoutTabعندما يكون اللسان موجودًا بالفعل وتريد فقط وضع عنصر واجهة واحد عليه. استخدمdefinePageLayoutTabعندما تريد لسانًا خاصًا بك. -
يكتب
twenty app pullأداة أضفتها إلى علامة تبويب لا تملكها مرة أخرى كملفdefinePageLayoutWidget()، ضمن الحدود نفسها المطبقة على أدواتdefinePageLayout().