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

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

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

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

הגדרת תבנית

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

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

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

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

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

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

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

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

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

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

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