תבנית מועדון לקוחות

אפשר להשתמש בכלי הבא כדי להתאים אישית את כרטיס מועדון הלקוחות ולעיין בקטעי הקוד שבהמשך.

כרטיסי מועדון לקוחות תומכים בעיבוד תבניות. אם לא הוגדרה תבנית, נעשה שימוש בתבנית ברירת המחדל.

הגדרת תבנית

תבנית כרטיס מוגדרת ברמת הכיתה ומשמשת להצגת כל אובייקט שמשויך לכיתה. התבנית קובעת אילו שדות יוצגו בקטעים שונים של הכרטיס.

התבנית מחולקת לסעיפים הבאים:

Android

סקירה כללית של התבנית

דפדפן

סקירה כללית של התבנית

שם הכרטיס

Android

רכיבי כותרת של כרטיס
  1. class.programLogo
  2. class.localizedIssuerName
    או class.issuerName
  3. class.localizedProgramName
    או class.programName
  4. class.hexBackgroundColor

דפדפן

רכיבי כותרת של כרטיס
  1. class.programLogo
  2. class.localizedIssuerName
    או class.issuerName
  3. class.localizedProgramName
    או class.programName
  4. class.hexBackgroundColor

בקטע של כותרת הכרטיס מוצגים הלוגו, שם המנפיק ושם התוכנית. לא ניתן לשנות את ההפניות לשדות ששימשו לאכלוס שלהן או את מיקוםן.

תבנית כרטיס

Android

סקירה כללית של התבנית

דפדפן

סקירה כללית של התבנית

הקטע של תבנית הכרטיס משמש להצגת שורות נוספות. השורות האלה יכולות לכלול שדות של נתונים מובְנים מבוססי-טקסט או שדות של מודולי טקסט.

אפשר לציין את מספר השורות שמגדירות את מספר האובייקטים ברשימה class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]. הרשימה צריכה לכלול לפחות רכיב אחד, ואנחנו ממליצים להשתמש בשני רכיבים לכל היותר. כל רכיב חייב להיות אחד מהסוגים הבאים:

  • oneItem, שמקבל פריט אחד:
    • item
  • twoItems, שמקבל שני פריטים:
    • startItem
    • endItem
  • threeItems, שמקבל שלושה פריטים:
    • startItem
    • middleItem
    • endItem

אפשר להגדיר כל פריט כבורר שדות אחד (.firstValue), כ-2 בוררי שדות (.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), כ-2 בוררי שדות (.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 Wallet. הכרטיס מיוצג ברשימה עם הלוגו, צבע הרקע ושלוש השורות.

דוגמת הקוד הבאה מראה איך לעקוף את תבנית הרשימה של כרטיס כדי להציג את השדה של תאריך התפוגה של אובייקט הכרטיס היחיד בשורה הראשונה של תבנית הרשימה:

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[]. הפניית שדה מכילה רשימה של נתיבים לשדות נתונים מובנים, לשדות של מודולי טקסט, לשדות של מודול הקישור, לשדות של מודולי התמונות או להודעות.

לא כל סוגי הנתיבים מותרים בכל הפניות. לדוגמה, הפניות מסוימות של שדות מאפשרות רק נתיבים לשדות של נתונים מובְנים מבוססי-טקסט או לשדות של מודולים של טקסט. שדות מובְנים של טקסט הם שדות של נתונים מובְנים (string) – מחרוזת מסוג מותאם לשוק המקומי, מחרוזת מקומית, תאריך או כסף.

ניתן להשתמש ברשימה כדי ליישם לוגיקת גיבוי. פירוש הדבר הוא שאם הנתיב הראשון ברשימה מגיע לשדה ריק, תתבצע הערכה של הנתיב הבא. הלוגיקה של הגיבוי היא שמתמקדת בעיקר בשדות של נתונים מובְנים מבוססי-טקסט או בשדות של מודולי טקסט. אסור לשלב בין סוגים שונים של שדות באותה רשימה. מומלץ לנקוט משנה זהירות לגבי זהירות, ורק במצבים ספציפיים שבהם צפוי דפוס עקבי של שדות שקיימים באובייקטים מסוימים, אך לא באחרים. לרוב קל יותר ליצור כיתות נפרדות לתרחישים נפרדים.

אם כל הנתיבים ברשימת ההפניות לשדות מפנים לשדות ריקים, הפריט שמשתמש בהפניה לשדה לא יוצג. אם רוצים שהפריט תמיד יוצג בשדה הפניית שדה, צריך לוודא שלפחות נתיב אחד ריק. מומלץ להגדיר שדה לתו מיוחד, כמו '-', כדי לייצג ערך ריק, גם אם חלק מהשדות מאפשרים מחרוזות עם רווח בלבד.

כדי להפנות לשדה שמכיל רשימה, אפשר להשתמש באינדקס של השדה ברשימה. ברוב המקרים אפשר להשתמש במזהה עזר. פריטים ברשימה שניתן להפנות אליהם באמצעות מזהה כוללים את השדה .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. POINTS
    או object.loyaltyPoints.localizedLabel
    או object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. פרסים
    או object.secondaryLoyaltyPoints.localizedLabel
    או object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type וגם object.barcode.value
    או object.accountId
  9. object.barcode.alternateText
    או object.accountId
    או object.barcode.value
  10. object.heroImage
    או class.heroImage
  11. class.hexBackgroundColor
  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.imageModulesData[0].mainImage
  21. object.imageModulesData[0].mainImage
  22. class.messages[].header
  23. class.messages[].body
  24. object.messages[].header
  25. object.messages[].body
  26. class.textModulesData[0..9].header
  27. class.textModulesData[0..9].body
  28. object.textModulesData[0..9].header
  29. object.textModulesData[0..9].body
  30. class.linksModuleData.uris[].description
  31. object.linksModuleData.uris[].description
  32. class.homepageUri

דפדפן

רכיבי ברירת מחדל של תבנית
  1. class.programLogo
  2. class.localizedIssuerName
    או class.issuerName
  3. class.localizedProgramName
    או class.programName
  4. POINTS
    או object.loyaltyPoints.localizedLabel
    או object.loyaltyPoints.label
  5. object.loyaltyPoints.balance
  6. פרסים
    או object.secondaryLoyaltyPoints.localizedLabel
    או object.secondaryLoyaltyPoints.label
  7. object.secondaryLoyaltyPoints.balance
  8. object.barcode.type וגם object.barcode.value
    או object.accountId
  9. object.barcode.alternateText
    או object.accountId
    או object.barcode.value
  10. object.heroImage
    או class.heroImage
  11. class.hexBackgroundColor
  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.imageModulesData[0].mainImage
  21. object.imageModulesData[0].mainImage
  22. class.messages[].header
  23. class.messages[].body
  24. object.messages[].header
  25. object.messages[].body
  26. class.textModulesData[0..9].header
  27. class.textModulesData[0..9].body
  28. object.textModulesData[0..9].header
  29. object.textModulesData[0..9].body
  30. class.linksModuleData.uris[].description
  31. object.linksModuleData.uris[].description
  32. class.homepageUri

לשדות של מודולים של תמונות, אנחנו מציגים שדה אחד בלבד של מודול תמונה מהמחלקה ושדה אחד בלבד של מודול תמונה מהאובייקט. אם צריך יותר משדה אחד של מודול תמונה בכל אחת מהרמות, יש לבטל את תבנית ברירת המחדל.

לשדות של מודולי טקסט, אנחנו מציגים רק עד 10 שדות של מודולי טקסט מהכיתה ו-10 שדות מודול טקסט בלבד מהאובייקט. השדות מוצגים באותו סדר שבו הם הוגדרו במערך. אם דרושים לך יותר מ-10 שדות של מודול טקסט בכל אחת מהרמות, יש לעקוף את תבנית ברירת המחדל.

בהודעות, מוצגות רק עד 10 הודעות מהכיתה ו-10 הודעות בלבד מהאובייקט. אנחנו לא מבטיחים את סדר ההודעות. אם דרושות לך יותר מ-10 הודעות בכל רמה, או אחריות לכל הזמנה, אפשר לעקוף את תבנית ברירת המחדל.

בשדה המודול של הקישורים, אין הגבלה על מספר פריטי ה-URI שניתן להגדיר. URIs מסודרים לפי סדר הבא לכל רמה (מחלקה או אובייקט):

  1. קואורדינטות במפה
  2. מספרי טלפון
  3. כתובות אימייל
  4. דפי אינטרנט

לכל קבוצה, מזהי ה-URI מוצגים באותו הסדר שבו הם הוגדרו במערך. אם צריך סדר אחר, אפשר לשנות את תבנית ברירת המחדל.

רכיבי תבנית של רשימת ברירת מחדל
  1. class.localizedIssuerName
    או class.issuerName
  2. class.localizedProgramName
    או class.programName
  3. class.programLogo
  4. class.hexBackgroundColor