الانتقال إلى المحتوى الرئيسي

نظرة عامة

يتحكم تخطيط الصفحة في كيفية ترتيب صفحة تفاصيل السجل: ما هي الألسنة التي تظهر وما عناصر الواجهة (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().