نموذج الولاء

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

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

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

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

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.

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

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

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. MEMBER NAME
    أو 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. SECONDARY REWARDS TIER
    or class.localizedSecondaryRewardsTierLabel
    or 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. MEMBER NAME
    أو 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. SECONDARY REWARDS TIER
    or class.localizedSecondaryRewardsTierLabel
    or 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 رسالة على أي مستوى، أو ضمان لأي طلبات، يمكنك تجاهل النموذج التلقائي.

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

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

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