نموذج بطاقة صعود الطائرة

تتيح بطاقات صعود الطائرة عرض النماذج. وفي حال عدم تحديد أي نموذج، يتم استخدام النموذج التلقائي.

تعريف النموذج

يتم تحديد نموذج البطاقة على مستوى الصف، ويُستخدَم لعرض أي عنصر مرتبط بالصف. يحدّد النموذج الحقول التي سيتم عرضها في أقسام مختلفة من البطاقة.

ينقسم النموذج إلى الأقسام التالية:

Android

نظرة عامة على أقسام ومواضع تنسيق نموذج البطاقة

الويب

نظرة عامة على أقسام ومواضع تنسيق نموذج البطاقة

عنوان البطاقة

Android

عناصر تنسيق عنوان البطاقة ومواضع الحقول عنوان البطاقة التلقائي
  1. class.flightHeader.carrier.airlineLogo
  2. ‫class.flightHeader.carrier.airlineName
    أو class.localizedIssuerName
    أو class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    أو class.flightHeader.carrier.carrierIcaoCode)
    وclass.flightHeader.flightNumber
  4. مدينة المطار (مستمدة من class.origin.airportIataCode)
    أو class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. مدينة المطار (مستمدة من class.destination.airportIataCode)
    أو class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    أو class.hexBackgroundColor

عنوان البطاقة التي تتضمّن شعارًا عريضًا
  1. class.flightHeader.wideAirlineLogo
  2. (class.flightHeader.carrier.carrierIataCode
    أو class.flightHeader.carrier.carrierIcaoCode)
    وclass.flightHeader.flightNumber
  3. مدينة المطار (مستمدة من class.origin.airportIataCode)
    أو class.origin.airportNameOverride
  4. class.origin.airportIataCode
  5. مدينة المطار (مستمدة من class.destination.airportIataCode)
    أو class.destination.airportNameOverride
  6. class.destination.airportIataCode
  7. object.hexBackgroundColor
    أو class.hexBackgroundColor

الويب

عناصر تنسيق عنوان البطاقة ومواضع الحقول عنوان البطاقة التلقائي
  1. class.flightHeader.carrier.airlineLogo
  2. ‫class.flightHeader.carrier.airlineName
    أو class.localizedIssuerName
    أو class.issuerName
  3. (class.flightHeader.carrier.carrierIataCode
    أو class.flightHeader.carrier.carrierIcaoCode)
    وclass.flightHeader.flightNumber
  4. مدينة المطار (مستمدة من class.origin.airportIataCode)
    أو class.origin.airportNameOverride
  5. class.origin.airportIataCode
  6. مدينة المطار (مستمدة من class.destination.airportIataCode)
    أو class.destination.airportNameOverride
  7. class.destination.airportIataCode
  8. object.hexBackgroundColor
    أو class.hexBackgroundColor

عنوان البطاقة التي تتضمّن شعارًا عريضًا
  1. class.flightHeader.wideAirlineLogo
  2. (class.flightHeader.carrier.carrierIataCode
    أو class.flightHeader.carrier.carrierIcaoCode)
    وclass.flightHeader.flightNumber
  3. مدينة المطار (مستمدة من class.origin.airportIataCode)
    أو class.origin.airportNameOverride
  4. class.origin.airportIataCode
  5. مدينة المطار (مستمدة من class.destination.airportIataCode)
    أو class.destination.airportNameOverride
  6. class.destination.airportIataCode
  7. object.hexBackgroundColor
    أو class.hexBackgroundColor

يعرض قسم عنوان البطاقة الشعار واسم شركة الطيران وملخّص الرحلة الجوية. All of these three elements are required and neither the field references used to populate them nor their position can be changed.

في حال عدم ضبط السمتَين class.origin.airportNameOverride أو class.destination.airportNameOverride، تتم تعبئة اسم مدينة المطار تلقائيًا بالمدينة المرتبطة برمز الاتحاد الدولي للنقل الجوي في السمتَين class.origin.airportIataCode وclass.destination.airportIataCode على التوالي.

عند ضبط حقل الشعار العريض، يتم استبدال عنوان النموذج التلقائي الذي يتضمّن الشعار واسم جهة إصدار الشهادة بالشعار العريض على الأجهزة الجوّالة.

اتّبِع إرشادات صور الشعارات العريضة عند إنشاء شعار عريض للرأس من أجل عرض صورتك على بطاقاتك على النحو الأمثل.

نموذج البطاقة

Android

عناصر تنسيق صفوف نموذج البطاقة ومواضع الحقول

الويب

عناصر تنسيق صفوف نموذج البطاقة ومواضع الحقول

يُستخدَم قسم نموذج البطاقة لعرض صفوف إضافية. ويمكن أن تحتوي هذه الصفوف على حقول بيانات منظَّمة مستندة إلى النص أو حقول وحدات نصية.

يمكنك تحديد عدد الصفوف التي تحدّد عدد العناصر في قائمة class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]. تتطلّب القائمة عنصرًا واحدًا على الأقل، وننصح باستخدام عنصرَين على الأكثر. يجب أن يكون كل عنصر من أحد الأنواع التالية:

  • ‫oneItem، والتي تقبل عنصرًا واحدًا:
    • item
  • ‫twoItems، الذي يقبل عنصرَين:
    • startItem
    • endItem
  • ‫threeItems، والتي تقبل ثلاثة عناصر:
    • startItem
    • middleItem
    • endItem

يمكن تعريف كل عنصر إما كمحدّد حقل واحد (.firstValue) أو محدّدَي حقل (.firstValue و.secondValue) أو عنصر محدّد مسبقًا (.predefinedItem). يتم عرض كل من قيم الحقل المحدّد وتصنيفاتها المعنية. عند تحديد محدّدَي حقول، يتم عرض قيم الحقول المحدّدة مع فاصل "/". وينطبق الأمر نفسه على تصنيفات الحقول المحدّدة. تُستخدَم العناصر المحدّدة مسبقًا لتحديد عرض أكثر تعقيدًا.

توضح عينة التعليمات البرمجية التالية كيفية تجاوز أقسام صفوف البطاقات في نموذج البطاقة لتحديد صفين. يتضمّن كل صف ثلاثة عناصر يشير كل منها إلى ستة حقول مخصّصة من نوع textModuleData على مستوى الصف وعناوينها كتصنيفات:

Python

 {
   ... //Rest of class
   "textModulesData": [
        {
            "header": "Label 1",
            "body": "Some info 1",
            "id": "myfield1"
        },
        {
            "header": "Label 2",
            "body": "Some info 2",
            "id": "myfield2"
        },
        {
            "header": "Label 3",
            "body": "Some info 3",
            "id": "myfield3"
        },
        {
            "header": "Label 4",
            "body": "Some info 4",
            "id": "myfield4"
        },
        {
            "header": "Label 5",
            "body": "Some info 5",
            "id": "myfield5"
        },
        {
            "header": "Label 6",
            "body": "Some info 6",
            "id": "myfield6"
        }
    ],
   "classTemplateInfo": {
        "cardTemplateOverride": {
            "cardRowTemplateInfos": [{
                "threeItems": {
                    "startItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield1']"
                            }]
                        }
                    },
                    "middleItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield2']"
                            }]
                        }
                    },
                    "endItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield3']"
                            }]
                        }
                    },
                }
            },{
                "threeItems": {
                    "startItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield4']"
                            }]
                        }
                    },
                    "middleItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield5']"
                            }]
                        }
                    },
                    "endItem": {
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.textModulesData['myfield6']"
                            }]
                        }
                    },
                }
            }]
        }
    }
}
    

لغة Java

// Rest of class
  .setTextModulesData((new ArrayList<TextModuleData>() {
    {
      add((new TextModuleData()).setHeader("Label 1")
        .setBody("Some info 1")
        .setId("myfield1"));
      add((new TextModuleData()).setHeader("Label 2")
        .setBody("Some info 1")
        .setId("myfield2"));
      add((new TextModuleData()).setHeader("Label 3")
        .setBody("Some info 3")
        .setId("myfield3"));
      add((new TextModuleData()).setHeader("Label 4")
        .setBody("Some info 4")
        .setId("myfield4"));
      add((new TextModuleData()).setHeader("Label 5")
        .setBody("Some info 5")
        .setId("myfield5"));
      add((new TextModuleData()).setHeader("Label 6")
        .setBody("Some info 5")
        .setId("myfield6"));
    }
  }))
  .setClassTemplateInfo((new ClassTemplateInfo())
    .setCardTemplateOverride((new CardTemplateOverride())
      .setCardRowTemplateInfos(new ArrayList<CardRowTemplateInfo>() {
        {
          add((new CardRowTemplateInfo()).setThreeItems((new CardRowThreeItems())
            .setStartItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield1']"));
              }
            })))
            .setMiddleItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield2']"));
              }
            })))
            .setEndItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield3']"));
              }
            })))
          ));
          add((new CardRowTemplateInfo()).setThreeItems((new CardRowThreeItems())
            .setStartItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield4']"));
              }
            })))
            .setMiddleItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield5']"));
              }
            })))
            .setEndItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield6']"));
              }
            })))
          ));
          }
  })))
    

PHP

// Rest of class
    $textModulesData1 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData1->setBody("Some info 1");
    $textModulesData1->setHeader("Label 1");
    $textModulesData1->setId("myfield1");

    $textModulesData2 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData2->setBody("Some info 2");
    $textModulesData2->setHeader("Label 2");
    $textModulesData2->setId("myfield2");

    $textModulesData3 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData3->setBody("Some info 3");
    $textModulesData3->setHeader("Label 3");
    $textModulesData3->setId("myfield3");

    $textModulesData4 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData4->setBody("Some info 4");
    $textModulesData4->setHeader("Label 4");
    $textModulesData4->setId("myfield4");

    $textModulesData5 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData5->setBody("Some info 5");
    $textModulesData5->setHeader("Label 5");
    $textModulesData5->setId("myfield5");

    $textModulesData6 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData6->setBody("Some info 6");
    $textModulesData6->setHeader("Label 6");
    $textModulesData6->setId("myfield6");

    $textModulesDatas = array($textModulesData1, $textModulesData2, $textModulesData3,
                  $textModulesData4, $textModulesData5, $textModulesData6);

    $startItemField = new Google_Service_Walletobjects_FieldReference();
    $startItemField->setFieldPath("class.textModulesData['myfield1']");

    $startItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $startItemFirstValue->setFields(array($startItemField));

    $startItem = new Google_Service_Walletobjects_TemplateItem();
    $startItem->setFirstValue($startItemFirstValue);

    $middleItemField = new Google_Service_Walletobjects_FieldReference();
    $middleItemField->setFieldPath("class.textModulesData['myfield2']");

    $middleItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $middleItemFirstValue->setFields(array($middleItemField));

    $middleItem = new Google_Service_Walletobjects_TemplateItem();
    $middleItem->setFirstValue($middleItemFirstValue);

    $endItemField = new Google_Service_Walletobjects_FieldReference();
    $endItemField->setFieldPath("class.textModulesData['myfield3']");

    $endItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $endItemFirstValue->setFields(array($endItemField));

    $endItem = new Google_Service_Walletobjects_TemplateItem();
    $endItem->setFirstValue($endItemFirstValue);

    $cardRowTemplate = new Google_Service_Walletobjects_CardRowThreeItems();
    $cardRowTemplate->setStartItem($startItem);
    $cardRowTemplate->setMiddleItem($middleItem);
    $cardRowTemplate->setEndItem($endItem);

    $cardRowTemplateInfo1 = new Google_Service_Walletobjects_CardRowTemplateInfo();
    $cardRowTemplateInfo1->setThreeItems($cardRowTemplate);

    $startItemField2 = new Google_Service_Walletobjects_FieldReference();
    $startItemField2->setFieldPath("class.textModulesData['myfield4']");

    $startItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $startItemFirstValue2->setFields(array($startItemField2));

    $startItem2 = new Google_Service_Walletobjects_TemplateItem();
    $startItem2->setFirstValue($startItemFirstValue2);

    $middleItemField2 = new Google_Service_Walletobjects_FieldReference();
    $middleItemField2->setFieldPath("class.textModulesData['myfield5']");

    $middleItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $middleItemFirstValue2->setFields(array($middleItemField2));

    $middleItem2 = new Google_Service_Walletobjects_TemplateItem();
    $middleItem2->setFirstValue($middleItemFirstValue2);

    $endItemField2 = new Google_Service_Walletobjects_FieldReference();
    $endItemField2->setFieldPath("class.textModulesData['myfield6']");

    $endItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $endItemFirstValue2->setFields(array($endItemField2));

    $endItem2 = new Google_Service_Walletobjects_TemplateItem();
    $endItem2->setFirstValue($endItemFirstValue2);

    $cardRowTemplate2 = new Google_Service_Walletobjects_CardRowThreeItems();
    $cardRowTemplate2->setStartItem($startItem2);
    $cardRowTemplate2->setMiddleItem($middleItem2);
    $cardRowTemplate2->setEndItem($endItem2);

    $cardRowTemplateInfo2 = new Google_Service_Walletobjects_CardRowTemplateInfo();
    $cardRowTemplateInfo2->setThreeItems($cardRowTemplate2);

    $cardTemplateOverride = new Google_Service_Walletobjects_CardTemplateOverride();
    $cardTemplateOverride->setCardRowTemplateInfos(array($cardRowTemplateInfo1,
                  $cardRowTemplateInfo2));

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setCardTemplateOverride($cardTemplateOverride);

    $payload->setTextModulesData($textModulesDatas);
    $payload->setClassTemplateInfo($classTemplateInfo);
    

ينشئ الرمز بطاقة بتنسيق قسم نموذج الرمز التالي:

مثال على إلغاء تصنيف

إذا كان أحد العناصر فارغًا، لن يتم عرضه. لمزيد من التفاصيل، يُرجى الاطّلاع على مراجع الحقول. إذا كانت جميع العناصر في صف معيّن فارغة، لن يتم عرض الصف. إذا كانت بعض العناصر في الصف فارغة، تتم إعادة ترتيب العناصر غير الفارغة وعرضها كصف يحتوي على عدد أقل من العناصر.

إذا لم تلغِ نموذج البطاقة، سيتم استخدام العدد التلقائي للصفوف والعدد التلقائي للعناصر ومراجع الحقول التلقائية. لمزيد من التفاصيل، يُرجى الاطّلاع على النموذج التلقائي.

بعد تحديد صورة رئيسية، يمكن أن تظهر بعد الصف الأول إذا كانت هناك صفوف متعددة في قائمة cardRowTemplateInfos، أو فوق الصف إذا كان هناك صف واحد فقط.

الرمز الشريطي للبطاقة

Android

عناصر ومواضع تخطيط الرمز الشريطي للبطاقة
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. ‫object.barcode.type وobject.barcode.value
    أو object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

الويب

عناصر ومواضع تخطيط الرمز الشريطي للبطاقة
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. ‫object.barcode.type وobject.barcode.value
    أو object.reservationInfo.confirmationCode
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

يُستخدَم قسم الرمز الشريطي للبطاقة لعرض نص أو صور إضافية قبل الرمز الشريطي وبعده. ما مِن حقول مطلوبة في هذا القسم.

هناك ثلاثة أدوات اختيار حقول يمكن استخدامها لتحديد حقلَين متجاورَين يسبقان الرمز الشريطي وحقل واحد يليه. يتم عرض هذه الحقول بدون تصنيف ويمكن أن تكون إما حقول بيانات منظَّمة مستندة إلى النص أو حقول وحدات نصية أو حقول وحدات صور. إذا كنت تستخدم صورًا، يجب أن تتّبع إرشادات بناء هوية العلامة التجارية.

يتم تحديد الرمز الشريطي من خلال نوع وقيمة. للاطّلاع على قائمة بأنواع الرموز الشريطية المتوافقة، يُرجى مراجعة المرجع. بالإضافة إلى ذلك، يمكن عرض نص أسفل الرمز الشريطي مباشرةً. يمكن أن يسهّل هذا النص مسح الرموز الشريطية ضوئيًا، من بين استخدامات أخرى.

توضح عينة التعليمات البرمجية التالية كيفية تجاوز قسم الرمز الشريطي في بطاقة لعرض صورة فوق الرمز الشريطي:

Python

#... rest of class
    "imageModulesData": [
        {
            "mainImage": {
                "sourceUri": {
                    "uri":  "http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg",
                    "description": "Coffee"
                }
            },
            "id": "myimage"
        }
    ],
    "classTemplateInfo": {
        "cardBarcodeSectionDetails": {
            "firstTopDetail": {
                "fieldSelector": {
                    "fields": [
                        {
                        "fieldPath": "class.imageModulesData['myimage'].mainImage"
                        }
                    ]
                }
            }
        }
    }
}
    

لغة Java

//... rest of class
  .setImageModulesData((new ArrayList<ImageModuleData>() {
    {
      add((new ImageModuleData())
        .setId("myimage")
        .setMainImage((new Image()).setSourceUri((new ImageUri()).setDescription("Coffee beans")
          .setUri("http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg"))));
        }
      }))
      .setClassTemplateInfo((new ClassTemplateInfo())
        .setCardBarcodeSectionDetails((new CardBarcodeSectionDetails())
          .setFirstTopDetail((new BarcodeSectionDetail())
            .setFieldSelector((new FieldSelector())
              .setFields((new ArrayList<FieldReference>(){
                {
                  add((new FieldReference()).setFieldPath("class.imageModulesData['myimage'].mainImage"));
                }
            })))))
      }
    

PHP

//... rest of class
    $imageUri = new Google_Service_Walletobjects_ImageUri();
    $imageUri->setUri("https://farm8.staticflickr.com/7340/11177041185_a61a7f2139_o.jpg");
    $imageUri->setDescription("Baconrista flights image");
    $image = new Google_Service_Walletobjects_Image();
    $image->setSourceUri($imageUri);
    $imageModulesData = new Google_Service_Walletobjects_ImageModuleData();
    $imageModulesData->setMainImage($image);
            $imageModulesData->setId("myimage");

    $cardBarcodeFieldReference = new Google_Service_Walletobjects_FieldReference();
    $cardBarcodeFieldReference->setFieldPath("class.imageModulesData['myimage'].mainImage");

    $cardBarcodeFieldSelector = new Google_Service_Walletobjects_FieldSelector();
    $cardBarcodeFieldSelector->setFields(array($cardBarcodeFieldReference));

    $cardBarcodeDetail = new Google_Service_Walletobjects_BarcodeSectionDetail();
    $cardBarcodeDetail->setFieldSelector($cardBarcodeFieldSelector);

    $cardBarcodeSectionDetails = new Google_Service_Walletobjects_CardBarcodeSectionDetails();
    $cardBarcodeSectionDetails->setFirstTopDetail($cardBarcodeDetail);

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setCardBarcodeSectionDetails($cardBarcodeSectionDetails);

    $payload->setClassTemplateInfo($classTemplateInfo);
            $payload->setImageModuleData($imageModulesData);
    

ينشئ الرمز بطاقة بتنسيق قسم الرمز الشريطي التالي:

مثال على إلغاء الرمز الشريطي للبطاقة

في حال عدم إلغاء قسم الرمز الشريطي، يتم استخدام حقول الرمز الشريطي التلقائية. لمزيد من المعلومات، يُرجى الاطّلاع على النموذج التلقائي.

القسم السفلي

Android

الأقسام والعناصر السفلية في نموذج التفاصيل
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

الويب

الأقسام والعناصر السفلية في نموذج التفاصيل
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

يتضمّن القسم السفلي قائمة بالعناصر class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. يمكن أن تحتوي العناصر على أي نوع من حقول البيانات المنظَّمة أو حقول وحدات النصوص أو حقول وحدات الروابط أو حقول وحدات الصور أو الرسائل.

يمكن تحديد كل عنصر إما كأداة اختيار حقل واحد (.firstValue) أو أداتَي اختيار حقل (.firstValue و.secondValue) أو عنصر محدّد مسبقًا (.predefinedItem). يتم عرض كل من قيم الحقل المحدّد وتصنيفاتها المعنية. عند تحديد محدّدَي حقول، يتم عرض قيم الحقول المحدّدة مع فاصل "/". وينطبق الشيء نفسه على تسميات الحقول المحددة. تُستخدَم العناصر المحدّدة مسبقًا لتحديد عرض أكثر تعقيدًا. يتم عرض حقول وحدة الصور بعرض كامل بدون تصنيف.

يوضّح نموذج الرمز البرمجي التالي كيفية إلغاء القسم السفلي من البطاقة لعرض حقل linksModuleData واحد مع تصنيفه:

Python

//... rest of class
   "linksModuleData": {
        "uris": [
            {
                "uri": "http://maps.google.com/",
                "description": "Nearby Locations",
                "id":"mylink"
            }
        ]
    },
   "classTemplateInfo": {
        "detailsTemplateOverride": {
            "detailsItemInfos": [
                {
                    "item":{
                        "firstValue": {
                            "fields": [{
                                "fieldPath": "class.linksModuleData.uris['mylink']"
                            }]
                        }
                    }
                }
            ]
        }
     }
//... rest of class
    

لغة Java

 //... rest of class
  .setLinksModuleData((new ArrayList<LinksModuleData>() {
    {
      add((new LinksModuleData()).setDescription("Nearby Locations")
        .setUri("http://maps.google.com/")
        .setId("mylink"));
      }))
      .setClassTemplateInfo((new ClassTemplateInfo())
        .setDetailsTemplateOverride((new DetailsTemplateOverride())
          .setDetailsItemInfos(new ArrayList<DetailsItemInfo>(){
            {
              add((new DetailsItemInfo())
                .setItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
                  {
                    add((new FieldReference()).setFieldPath("class.linksModuleData.uris['mylink']"));
                  }
                }))));
              }
            }))
//... rest of class
    

PHP

    //... rest of class building
    $locationUri = new Google_Service_Walletobjects_Uri();
    $locationUri->setUri("http://maps.google.com/");
    $locationUri->setDescription("Nearby Locations");
    $locationUri->setId("mylink");

    $linksModuleData = new Google_Service_Walletobjects_LinksModuleData();
    $linksModuleData->setUris(array($locationUri));

    $detailItemFieldReference = new Google_Service_Walletobjects_FieldReference();
    $detailItemFieldReference->setFieldPath("class.linksModuleData.uris['mylink']");
    $detailItemFieldSelector = new Google_Service_Walletobjects_FieldSelector();
    $detailItemFieldSelector->setFields(array($detailItemFieldReference));

    $detailItem = new Google_Service_Walletobjects_TemplateItem();
    $detailItem->setFirstValue($detailItemFieldSelector);

    $detailsItemInfo = new Google_Service_Walletobjects_DetailsItemInfo();
    $detailsItemInfo->setItem($detailItem);

    $cardDetailsTemplateOverride = new Google_Service_Walletobjects_DetailsTemplateOverride();
    $cardDetailsTemplateOverride->setDetailsItemInfos(array($detailsItemInfo));

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setDetailsTemplateOverride($cardDetailsTemplateOverride);

    $payload->setClassTemplateInfo($classTemplateInfo);
    $payload->setLinksModuleData($linksModuleData);
    //... rest of class
    

ينشئ الرمز بطاقة بالتنسيق التالي للقسم السفلي:

مثال على إلغاء القسم السفلي

إذا كان أحد العناصر فارغًا، لن يتم عرضه. لمزيد من التفاصيل، يُرجى الاطّلاع على مراجع الحقول.

إذا لم تلغِ القسم السفلي، فسيتم عرض القائمة التلقائية لحقول المراجع بالترتيب التلقائي. لمزيد من المعلومات، يُرجى الاطّلاع على النموذج التلقائي.

نموذج القائمة

عرض عناصر النموذج
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.localScheduledDepartureDateTime
      (التاريخ فقط) (مجمّع)
    أو class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    أو class.hexBackgroundColor
  5. <# passes> (مجمّعة)

يُستخدَم قسم نموذج القائمة لاختيار الحقل الذي سيتم عرضه في عرض "البطاقات" في تطبيق "محفظة Google". يتم تمثيل البطاقة في القائمة بالشعار ولون الخلفية وثلاثة صفوف.

يوضّح عينة تعليمات برمجية التالي كيفية تجاوز نموذج قائمة بطاقة لعرض حقل تاريخ انتهاء صلاحية عنصر بطاقة واحدة في الصف الأول من نموذج القائمة:

Python

#... rest of class definition
   "classTemplateInfo": {
        "listTemplateOverride":{
            "firstRowOption": {
                "fieldOption":{
                    "fields": [{
                        "fieldPath": "object.validTimeInterval.end"
                    }]
                }
            }
        }
   }
}
    

لغة Java

//... rest of class
  .setClassTemplateInfo((new ClassTemplateInfo())
    .setListTemplateOverride((new ListTemplateOverride())
      .setFirstRowOption((new FirstRowOption())
        .setFieldOption((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
          {
            add((new FieldReference()).setFieldPath("object.validTimeInterval.end"));
          }
        }))))
//... rest of class
    

PHP

    //... rest of class
    $fieldReference = new Google_Service_Walletobjects_FieldReference();
    $fieldReference->setFieldPath("object.validTimeInterval.end");

    $fieldOption = new Google_Service_Walletobjects_FieldSelector();
    $fieldOption->setFields(array($fieldReference));

    $firstRowOption = new Google_Service_Walletobjects_FirstRowOption();
    $firstRowOption->setFieldOption($fieldOption);

    $listTemplateOverride = new Google_Service_Walletobjects_ListTemplateOverride();
    $listTemplateOverride->setFirstRowOption($firstRowOption);

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setListTemplateOverride($listTemplateOverride);

    $payload->setClassTemplateInfo($classTemplateInfo);
    //... rest of class
    

تنشئ التعليمة البرمجية بطاقة باستخدام عرض نموذج القائمة التالي:

مثال على تجاوز القائمة

يمكن تحديد الصفوف الثلاثة باستخدام أداة اختيار الحقول. يتم عرض الحقول بدون تصنيف. بالنسبة إلى البطاقات المجمَّعة، يعرض الصف الثاني دائمًا تاريخ المغادرة المجدوَل المحلي، ويعرض الصف الثالث دائمًا عدد البطاقات المجمَّعة.

مراجع الحقول

تُستخدَم مراجع الحقول في أجزاء مختلفة من النموذج مع الصيغة class.classTemplateInfo.*.fields[]. يحتوي مرجع الحقل على قائمة بمسارات حقول البيانات المنظَّمة أو حقول وحدات النصوص أو حقول وحدات الروابط أو حقول وحدات الصور أو الرسائل.

لا يُسمح بجميع أنواع المسارات في كل مرجع حقل. على سبيل المثال، تسمح بعض مراجع الحقول فقط بالمسارات إلى حقول البيانات المنظَّمة المستندة إلى النص أو حقول الوحدات النصية. الحقول المنظَّمة المستندة إلى النص هي حقول بيانات منظَّمة من نوع سلسلة أو سلسلة مترجَمة أو تاريخ أو مبلغ مالي.

يمكن استخدام القائمة لتنفيذ منطق احتياطي. وهذا يعني أنّه إذا تم حلّ المسار الأول في القائمة إلى حقل فارغ، يتم تقييم المسار التالي. يستهدف منطق الاحتياط بشكل أساسي حقول البيانات المنظَّمة المستندة إلى النص أو حقول الوحدات النصية. لا تخلط بين أنواع مختلفة من الحقول في القائمة نفسها. استخدِم منطق الاحتياطي بحذر وفقط في حالات معيّنة عندما تتوقّع نمطًا متسقًا من الحقول الموجودة في بعض العناصر دون غيرها. في معظم الأحيان، يكون من الأسهل إنشاء صفوف منفصلة لحالات الاستخدام المنفصلة.

إذا كانت جميع المسارات في قائمة مراجع الحقول تؤدي إلى حقول فارغة، لن يتم عرض العنصر الذي يستخدم مرجع الحقل. إذا أردت أن يكون العنصر الذي يستخدم مرجع الحقل موجودًا دائمًا، تأكَّد من أنّ مسارًا واحدًا على الأقل ليس فارغًا. ننصحك بضبط حقل على حرف خاص، مثل "-"، لتمثيل قيمة فارغة، حتى إذا كانت بعض الحقول تسمح بسلاسل تحتوي على مسافة فقط.

للإشارة إلى حقل مضمَّن في قائمة، يمكنك استخدام فهرس الحقل في القائمة أو يمكنك في معظم الحالات استخدام رقم تعريف مرجعي. وتتضمّن عناصر القائمة التي يمكن الإشارة إليها باستخدام رقم التعريف الحقل .id. ننصحك باستخدام معرّف مرجعي بدلاً من فهرس الحقل في القائمة عندما يكون متاحًا.

في ما يلي مثال على كيفية الإشارة إلى الحقول المضمّنة في قائمة.

  • object.imageModulesData[0].id = my-first-id
  • object.imageModulesData[1].id = my-second-id
  • class.detailsTemplateOverride.detailsItemInfos[0].item.firstValue.fields[0].fieldPath = object.imageModulesData[‘my-second-id’]
  • class.detailsTemplateOverride.detailsItemInfos[1].item.firstValue.fields[0].fieldPath = object.imageModulesData[0]

في هذه الحالة، يكون العنصر الأول في قسم التفاصيل في البطاقة هو الصورة الثانية المحدّدة في العنصر. في حين أنّ العنصر الثاني في قسم التفاصيل في البطاقة هو الصورة الأولى المُدرَجة في العنصر.

النموذج التلقائي

Android

عناصر ومواضع تنسيق نموذج البطاقة التلقائي
  1. class.flightHeader.carrier.airlineLogo
  2. ‫class.flightHeader.carrier.airlineName
    أو class.localizedIssuerName
    أو class.issuerName
  3. class.origin.airportIataCode
  4. class.destination.airportIataCode
  5. مدينة المطار (مستمدة من class.origin.airportIataCode)
    أو class.origin.airportNameOverride
  6. مدينة المطار (مستمدة من class.destination.airportIataCode)
    أو class.destination.airportNameOverride
  7. (class.flightHeader.carrier.carrierIataCode
    أو class.flightHeader.carrier.carrierIcaoCode)
    وclass.flightHeader.flightNumber
  8. object.securityProgramLogo
  9. object.boardingAndSeatingInfo.boardingPrivilegeImage
  10. ‫object.barcode.type وobject.barcode.value
    أو object.reservationInfo.confirmationCode
  11. object.barcode.alternateText
  12. class.flightHeader.carrier.airlineAllianceLogo
  13. PASSENGER
  14. object.passengerName
  15. ‫ZONE (تلقائي) أو GROUP (يعتمد على
    class.boardingAndSeatingPolicy.boardingPolicy) و
  16. سيات
  17. object.boardingAndSeatingInfo.boardingGroup و
  18. object.boardingAndSeatingInfo.seatNumber
    أو object.boardingAndSeatingInfo.seatAssignment
  19. TERMINAL
  20. GATE
  21. class.origin.terminal
  22. class.origin.gate
  23. الصعود إلى الطائرة
  24. class.localBoardingDateTime
  25. ‫CABIN (تلقائي) أو CLASS أو TIER (حسب
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  26. object.boardingAndSeatingInfo.SeatClass
  27. المغادرة
  28. class.localScheduledDepartureDateTime
  29. object.hexBackgroundColor
    أو class.hexBackgroundColor
  30. object.heroImage
    أو class.heroImage
  31. رقم التأكيد
  32. object.reservationInfo.confirmationCode
  33. رقم برنامج المسافر الدائم
  34. ‫object.reservationInfo.frequentFlyerInfo.frequentFlyerNumber
    وobject.reservationInfo.frequentFlyerInfo.frequentFlyerProgramName
  35. وقت الوصول المحدّد
  36. class.localScheduledArrivalDateTime
  37. class.messages[].header
  38. class.messages[].body
  39. object.messages[].header
  40. object.messages[].body
  41. class.textModulesData[0..9].header
  42. class.textModulesData[0..9].body
  43. object.textModulesData[0..9].header
  44. object.textModulesData[0..9].body
  45. class.linksModuleData.uris[].description
  46. object.linksModuleData.uris[].description

الويب

عناصر ومواضع تنسيق نموذج البطاقة التلقائي
  1. class.flightHeader.carrier.airlineLogo
  2. ‫class.flightHeader.carrier.airlineName
    أو class.localizedIssuerName
    أو class.issuerName
  3. class.origin.airportIataCode
  4. class.destination.airportIataCode
  5. مدينة المطار (مستمدة من class.origin.airportIataCode)
    أو class.origin.airportNameOverride
  6. مدينة المطار (مستمدة من class.destination.airportIataCode)
    أو class.destination.airportNameOverride
  7. (class.flightHeader.carrier.carrierIataCode
    أو class.flightHeader.carrier.carrierIcaoCode)
    وclass.flightHeader.flightNumber
  8. object.securityProgramLogo
  9. object.boardingAndSeatingInfo.boardingPrivilegeImage
  10. ‫object.barcode.type وobject.barcode.value
    أو object.reservationInfo.confirmationCode
  11. object.barcode.alternateText
  12. class.flightHeader.carrier.airlineAllianceLogo
  13. PASSENGER
  14. object.passengerName
  15. ‫ZONE (تلقائي) أو GROUP (يعتمد على
    class.boardingAndSeatingPolicy.boardingPolicy) و
  16. سيات
  17. object.boardingAndSeatingInfo.boardingGroup و
  18. object.boardingAndSeatingInfo.seatNumber
    أو object.boardingAndSeatingInfo.seatAssignment
  19. TERMINAL
  20. GATE
  21. class.origin.terminal
  22. class.origin.gate
  23. الصعود إلى الطائرة
  24. class.localBoardingDateTime
  25. ‫CABIN (تلقائي) أو CLASS أو TIER (حسب
    class.boardingAndSeatingPolicy.SeatClassPolicy)
  26. object.boardingAndSeatingInfo.SeatClass
  27. المغادرة
  28. class.localScheduledDepartureDateTime
  29. object.hexBackgroundColor
    أو class.hexBackgroundColor
  30. object.heroImage
    أو class.heroImage
  31. رقم التأكيد
  32. object.reservationInfo.confirmationCode
  33. رقم برنامج المسافر الدائم
  34. ‫object.reservationInfo.frequentFlyerInfo.frequentFlyerNumber
    وobject.reservationInfo.frequentFlyerInfo.frequentFlyerProgramName
  35. وقت الوصول المحدّد
  36. class.localScheduledArrivalDateTime
  37. class.messages[].header
  38. class.messages[].body
  39. object.messages[].header
  40. object.messages[].body
  41. class.textModulesData[0..9].header
  42. class.textModulesData[0..9].body
  43. object.textModulesData[0..9].header
  44. object.textModulesData[0..9].body
  45. class.linksModuleData.uris[].description
  46. object.linksModuleData.uris[].description

بشكل تلقائي، يعرض القسم السفلي أيضًا object.boardingAndSeatingInfo.boardingGroup وobject.boardingAndSeatingInfo.seatClass وobject.boardingAndSeatingInfo.seatNumber إذا تم إلغاء قسم البطاقة ولم تعُد هذه الحقول متوفّرة في قسم البطاقة.

بالنسبة إلى حقول وحدة الصور، نعرض حقلاً واحدًا فقط من حقول وحدة الصور من الفئة وحقلاً واحدًا فقط من حقول وحدة الصور من العنصر. إذا كنت بحاجة إلى أكثر من حقل واحد لوحدة الصور على أيّ من المستويَين، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى حقول الوحدات النصية، نعرض فقط 20 حقلاً كحد أقصى من الصف و20 حقلاً من العنصر. يتم عرض الحقول بالترتيب نفسه الذي تم تحديدها به في الصفيفة. إذا كنت بحاجة إلى أكثر من 20 حقلاً لوحدات نصية على أيّ من المستويَين، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى الرسائل، نعرض بحد أقصى 20 رسالة من الفئة و20 رسالة من العنصر. لا نضمن ترتيب الرسائل. إذا كنت بحاجة إلى أكثر من 20 رسالة على أيّ من المستويَين، أو إلى ضمان لأي طلبات، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى حقل وحدة الروابط، ما مِن حدّ أقصى لعدد معرّفات الموارد المنتظمة التي يمكنك تحديدها. يتم عرض معرّفات الموارد المنتظمة (URI) مجمّعة بالترتيب التالي لكل مستوى (فئة أو عنصر):

  1. إحداثيات الخريطة
  2. أرقام الهاتف
  3. عناوين البريد الإلكتروني
  4. صفحات الويب

بالنسبة إلى كل مجموعة، يتم عرض معرّفات الموارد المنتظمة (URI) بالترتيب نفسه الذي تم تحديدها به في المصفوفة. إذا كنت بحاجة إلى ترتيب مختلف، يمكنك إلغاء النموذج التلقائي.

عناصر ومواضع تنسيق نموذج القائمة التلقائي
  1. ‫class.origin.airportIataCode
    وclass.destination.airportIataCode
  2. class.localScheduledDepartureDateTime
    (التاريخ فقط)
  3. class.flightHeader.carrier.airlineLogo
  4. object.hexBackgroundColor
    أو class.hexBackgroundColor
  5. <# passes> (مجمّعة)