نموذج الولاء

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

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

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

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

Android

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

الويب

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

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

Android

عناصر تنسيق عنوان البطاقة ومواضع الحقول عنوان البطاقة التلقائي
  1. class.programLogo
  2. class.localizedIssuerName
    أو class.issuerName
  3. class.localizedProgramName
    أو class.programName
  4. class.hexBackgroundColor

عنوان البطاقة التي تتضمّن شعارًا عريضًا
  1. class.wideProgramLogo
  2. class.localizedProgramName
    أو class.programName
  3. class.hexBackgroundColor

الويب

عناصر تنسيق عنوان البطاقة ومواضع الحقول عنوان البطاقة التلقائي
  1. class.programLogo
  2. class.localizedIssuerName
    أو class.issuerName
  3. class.localizedProgramName
    أو class.programName
  4. class.hexBackgroundColor

عنوان البطاقة التي تتضمّن شعارًا عريضًا
  1. class.wideProgramLogo
  2. class.localizedProgramName
    أو class.programName
  3. class.hexBackgroundColor

يعرض قسم عنوان البطاقة الشعار واسم جهة الإصدار وعنوان البرنامج. ولا يمكن تغيير مراجع الحقول المستخدَمة لتعبئتها أو موضعها.

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

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

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

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.accountId
  4. ‫object.barcode.alternateText
    أو object.accountId
    أو object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    أو class.heroImage

الويب

عناصر ومواضع تخطيط الرمز الشريطي للبطاقة
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. ‫object.barcode.type وobject.barcode.value
    أو object.accountId
  4. ‫object.barcode.alternateText
    أو object.accountId
    أو object.barcode.value
  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.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

يُستخدَم قسم نموذج القائمة لاختيار الحقل الذي سيتم عرضه في عرض "البطاقات" في تطبيق "محفظة 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
    

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

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

يمكن تحديد الصفوف الثلاثة باستخدام أداة اختيار الحقول. يتم عرض الحقول بدون تصنيف.

التصنيفات

تحتوي جميع حقول البيانات المنظَّمة على تصنيف تقدّمه Google. وتتحمّل Google مسؤولية توفير ترجمة لكل من هذه التصنيفات بجميع اللغات المتاحة.

يمكنك تخصيص بعض هذه التصنيفات باستخدام أحد حقول class.custom<name_of_the_field>Label. عند تخصيص تصنيف، تصبح مسؤولاً عن تقديم ترجمات لهذا التصنيف المحدّد بجميع اللغات التي تريد إتاحتها.

مراجع الحقول

تُستخدَم مراجع الحقول في أجزاء مختلفة من النموذج مع الصيغة 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.programLogo
  2. class.localizedIssuerName
    أو class.issuerName
  3. class.localizedProgramName
    أو class.programName
  4. ‫object.barcode.type وobject.barcode.value
    أو object.accountId
  5. ‫object.barcode.alternateText
    أو object.accountId
    أو object.barcode.value
  6. POINTS
    أو object.loyaltyPoints.localizedLabel
    أو object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. REWARDS
    أو object.secondaryLoyaltyPoints.localizedLabel
    أو object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    أو class.heroImage
  12. اسم العضو
    أو class.localizedAccountNameLabel
    أو class.accountNameLabel
  13. object.accountName
  14. رقم تعريف العضو
    أو class.localizedAccountIdLabel
    أو class.accountIdLabel
  15. object.accountId
  16. مستوى المكافآت
    أو class.localizedRewardsTierLabel
    أو class.rewardsTierLabel
  17. class.localizedRewardsTier
    أو class.rewardsTier
  18. فئة المكافآت الثانوية
    أو class.localizedSecondaryRewardsTierLabel
    أو class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    أو class.secondaryRewardsTier
  20. class.messages[].header
  21. class.messages[].body
  22. object.messages[].header
  23. object.messages[].body
  24. class.textModulesData[0..9].header
  25. class.textModulesData[0..9].body
  26. object.textModulesData[0..9].header
  27. object.textModulesData[0..9].body
  28. class.linksModuleData.uris[].description
  29. object.linksModuleData.uris[].description
  30. class.homepageUri

الويب

عناصر ومواضع تنسيق نموذج البطاقة التلقائي
  1. class.programLogo
  2. class.localizedIssuerName
    أو class.issuerName
  3. class.localizedProgramName
    أو class.programName
  4. ‫object.barcode.type وobject.barcode.value
    أو object.accountId
  5. ‫object.barcode.alternateText
    أو object.accountId
    أو object.barcode.value
  6. POINTS
    أو object.loyaltyPoints.localizedLabel
    أو object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. REWARDS
    أو object.secondaryLoyaltyPoints.localizedLabel
    أو object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    أو class.heroImage
  12. اسم العضو
    أو class.localizedAccountNameLabel
    أو class.accountNameLabel
  13. object.accountName
  14. رقم تعريف العضو
    أو class.localizedAccountIdLabel
    أو class.accountIdLabel
  15. object.accountId
  16. مستوى المكافآت
    أو class.localizedRewardsTierLabel
    أو class.rewardsTierLabel
  17. class.localizedRewardsTier
    أو class.rewardsTier
  18. فئة المكافآت الثانوية
    أو class.localizedSecondaryRewardsTierLabel
    أو class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    أو class.secondaryRewardsTier
  20. class.messages[].header
  21. class.messages[].body
  22. object.messages[].header
  23. object.messages[].body
  24. class.textModulesData[0..9].header
  25. class.textModulesData[0..9].body
  26. object.textModulesData[0..9].header
  27. object.textModulesData[0..9].body
  28. class.linksModuleData.uris[].description
  29. object.linksModuleData.uris[].description
  30. class.homepageUri

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

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

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

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

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

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