เทมเพลตความภักดี

ใช้เครื่องมือต่อไปนี้เพื่อปรับแต่งบัตรสะสมคะแนนและดูตัวอย่างข้อมูลโค้ดด้านล่าง

บัตรสะสมคะแนนรองรับการแสดงผลเทมเพลต หากไม่ได้กําหนดเทมเพลตไว้ ระบบจะใช้เทมเพลตเริ่มต้น

คําจํากัดความของเทมเพลต

ระบบจะกําหนดเทมเพลตบัตรที่ระดับชั้นเรียน และจะใช้เพื่อแสดงออบเจ็กต์ที่เชื่อมโยงกับชั้นเรียน เทมเพลตจะกําหนดช่องที่จะแสดงในส่วนต่างๆ ของบัตร

เทมเพลตแบ่งออกเป็นส่วนต่างๆ ดังนี้

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[] รายการจําเป็นต้องมีองค์ประกอบอย่างน้อย 1 รายการ และเราแนะนําให้ใช้องค์ประกอบไม่เกิน 2 รายการ แต่ละองค์ประกอบต้องเป็นประเภทใดประเภทหนึ่งต่อไปนี้

  • oneItem ที่ยอมรับ 1 รายการมีดังนี้
    • item
  • twoItems ที่ยอมรับ 2 รายการดังนี้
    • startItem
    • endItem
  • threeItems ที่ยอมรับ 3 รายการดังนี้
    • startItem
    • middleItem
    • endItem

แต่ละรายการอาจกําหนดเป็นตัวเลือกช่องเดียว (.firstValue) ตัวเลือกช่อง 2 ตัวเลือก (.firstValue และ .secondValue) หรือรายการที่กําหนดไว้ล่วงหน้า (.predefinedItem) ทั้งค่าของช่องที่เลือกและป้ายกํากับที่เกี่ยวข้องจะแสดงขึ้นมา เมื่อคุณกําหนดตัวเลือกช่อง 2 ค่า ค่าของช่องที่เลือกจะแสดงโดยมีตัวคั่น "/" ป้ายกํากับของช่องที่เลือกก็เช่นเดียวกัน รายการที่กําหนดไว้ล่วงหน้าจะใช้เพื่อกําหนดการแสดงผลที่ซับซ้อนยิ่งขึ้น

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีลบล้างส่วนแถวของการ์ดการ์ดเพื่อระบุ 2 แถว แต่ละแถวมี 3 รายการซึ่งแต่ละรายการอ้างอิงช่องที่กําหนดเอง textModuleData ระดับชั้นเรียน 6 ช่อง และส่วนหัวเป็นป้ายกํากับ ดังนี้

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

ส่วนบาร์โค้ดบนการ์ดใช้เพื่อแสดงข้อความหรือรูปภาพเพิ่มเติมด้านบนและด้านล่างของบาร์โค้ด คุณไม่จําเป็นต้องระบุข้อมูลในช่องนี้

มีตัวเลือกช่อง 3 ช่องที่ใช้กําหนดช่องที่อยู่ติดกัน 2 ช่องได้ โดยอยู่เหนือช่องบาร์โค้ด 1 ช่อง คอลัมน์เหล่านี้จะแสดงโดยไม่มีป้ายกํากับและอาจเป็นช่อง Structured Data แบบข้อความ ช่องโมดูลข้อความ หรือช่องโมดูลรูปภาพก็ได้ หากใช้รูปภาพ รูปภาพเหล่านี้ต้องเป็นไปตามหลักเกณฑ์การใช้แบรนด์

บาร์โค้ดจะระบุตามประเภทและค่า โปรดดูรายการประเภทบาร์โค้ดที่รองรับที่หัวข้อข้อมูลอ้างอิง นอกจากนี้ ข้อความยังแสดงอยู่ใต้บาร์โค้ดได้ด้วย ข้อความนี้ช่วยให้คุณสแกนบาร์โค้ดได้ง่ายขึ้น รวมถึงนําไปใช้ในด้านอื่นๆ ด้วย

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีลบล้างส่วนบาร์โค้ดของบัตรเพื่อแสดงรูปภาพเหนือบาร์โค้ด

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) ทั้งค่าของช่องที่เลือกและป้ายกํากับที่เกี่ยวข้องจะแสดงขึ้นมา เมื่อคุณกําหนดตัวเลือกช่อง 2 ค่า ค่าของช่องที่เลือกจะแสดงโดยมีตัวคั่น "/" ป้ายกํากับของช่องที่เลือกก็จะเหมือนกัน รายการต่างๆ ที่กําหนดไว้ล่วงหน้าจะใช้เพื่อกําหนดการแสดงผลที่ซับซ้อนยิ่งขึ้น ระบบจะแสดงช่องโมดูลรูปภาพความกว้างเต็มหน้าจอโดยไม่มีป้ายกํากับ

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีลบล้างส่วนรายละเอียดของบัตรเพื่อแสดงช่อง 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 โดยบัตรจะแสดงในรายการพร้อมโลโก้ สีพื้นหลัง และแถว 3 แถว

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีลบล้างเทมเพลตลิสต์ของบัตรเพื่อแสดงช่องวันที่หมดอายุของออบเจ็กต์บัตรผ่านเดียวในแถวแรกของเทมเพลตรายการ

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
    

รหัสจะสร้างบัตรผ่านด้วยการแปลเทมเพลตรายการต่อไปนี้

ตัวอย่างการลบล้างรายการ

คุณจะกําหนดทั้ง 3 แถวได้โดยใช้ตัวเลือกช่อง โดยช่องจะแสดงโดยไม่มีป้ายกํากับ

ป้ายกำกับ

ช่องข้อมูลที่มีโครงสร้างทั้งหมดมีป้ายกํากับจาก Google Google เป็นผู้รับผิดชอบในการแปลป้ายกํากับแต่ละรายการในภาษาที่รองรับทั้งหมด

คุณปรับแต่งป้ายกํากับเหล่านี้บางส่วนได้โดยใช้ช่อง class.custom<name_of_the_field>Label ช่อง เมื่อปรับแต่งป้ายกํากับ คุณมีหน้าที่ระบุคําแปลของป้ายกํากับนั้นในทุกภาษาที่ต้องการรองรับ

ข้อมูลอ้างอิงในช่อง

การอ้างอิงช่องจะใช้ในส่วนต่างๆ ของเทมเพลตด้วยแบบฟอร์ม class.classTemplateInfo.*.fields[] การอ้างอิงช่องมีรายการเส้นทางไปยังช่อง Structured Data ช่องโมดูลข้อความ ช่องโมดูลลิงก์ ช่องโมดูลรูปภาพ หรือข้อความ

เส้นทางบางประเภทไม่ได้รับอนุญาตให้อ้างอิงในทุกช่อง เช่น การอ้างอิงในช่องบางรายการอนุญาตเฉพาะช่องข้อมูลที่มีโครงสร้างแบบข้อความหรือช่องโมดูลข้อความ ช่องข้อมูลที่มีโครงสร้างแบบข้อความคือช่องข้อมูลที่มีโครงสร้างของสตริงประเภท สตริงที่แปลแล้ว วันที่ หรือเงิน

ซึ่งรายการนี้จะใช้ตรรกะสํารองได้ ซึ่งหมายความว่าหากเส้นทางแรกในรายการแก้ไขเป็นช่องว่าง ระบบจะประเมินเส้นทางถัดไป ตรรกะสํารองจะกําหนดเป้าหมายเป็นช่องข้อมูลที่มีโครงสร้างแบบข้อความหรือช่องโมดูลข้อความเป็นหลัก อย่ารวมช่องประเภทต่างๆ ในรายการเดียวกัน โปรดใช้ตรรกะสํารองด้วยความระมัดระวังและเฉพาะในบางสถานการณ์ที่คุณคาดว่าจะมีรูปแบบช่องที่สอดคล้องกันในออบเจ็กต์บางรายการเท่านั้น ส่วนใหญ่แล้ว คุณสามารถสร้างชั้นเรียนแยกต่างหากสําหรับกรณีการใช้งานแยกกันได้ง่ายขึ้น

หากเส้นทางทั้งหมดในรายการข้อมูลอ้างอิงช่องเปลี่ยนเป็นช่องว่าง รายการที่ใช้การอ้างอิงช่องจะไม่ปรากฏ หากต้องการให้รายการที่มีการอ้างอิงช่องปรากฏเสมอ ให้ตรวจสอบว่าเส้นทางอย่างน้อย 1 เส้นทางไม่ว่างเปล่า เราขอแนะนําให้คุณตั้งค่าช่องเป็นสัญลักษณ์พิเศษ เช่น "-" ให้เป็นค่าว่าง แม้ว่าช่องบางช่องจะอนุญาตให้ใช้สตริงที่มีเว้นวรรคเท่านั้น

หากต้องการอ้างอิงช่องที่อยู่ในรายการ คุณสามารถใช้ดัชนีช่องในรายการ หรือใช้รหัสอ้างอิงได้ในกรณีส่วนใหญ่ รายการที่มีการอ้างอิงโดยใช้รหัสได้จะมีช่อง .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]

ในกรณีนี้ รายการแรกในส่วนรายละเอียดของบัตรคือรูปภาพที่ 2 ที่ประกาศในออบเจ็กต์ ส่วนรายการที่ 2 ในส่วนรายละเอียดของบัตรคือรูปภาพแรกที่ประกาศในออบเจ็กต์

เทมเพลตเริ่มต้น

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. รางวัลระดับที่ 2
    หรือ 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. รางวัลระดับที่ 2
    หรือ 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 ช่องจากชั้นเรียน และช่องโมดูลรูปภาพเพียง 1 ช่องจากออบเจ็กต์ดังกล่าว หากต้องการช่องโมดูลรูปภาพมากกว่า 1 ช่องในระดับใดก็ตาม ให้ลบล้างเทมเพลตเริ่มต้น

สําหรับช่องโมดูลข้อความ เราจะแสดงช่องโมดูลข้อความจากชั้นเรียนไม่เกิน 10 ช่อง และ 10 ช่องโมดูลจากออบเจ็กต์ โดยช่องต่างๆ จะแสดงตามลําดับเดียวกับที่กําหนดไว้ในอาร์เรย์ หากคุณต้องการช่องของโมดูลข้อความมากกว่า 10 ช่องในระดับใดก็ตาม ให้ลบล้างเทมเพลตเริ่มต้น

สําหรับข้อความ เราจะแสดงข้อความจากชั้นเรียนไม่เกิน 10 ข้อความ และ 10 ข้อความจากออบเจ็กต์ เราไม่รับประกันลําดับของข้อความ หากคุณต้องการข้อความมากกว่า 10 ข้อความในระดับใดก็ตาม หรือการรับประกันคําสั่งซื้อใดๆ ให้ลบล้างเทมเพลตเริ่มต้น

สําหรับช่องโมดูลลิงก์ ไม่มีการจํากัดจํานวน URL ที่คุณกําหนดได้ Uris จะแบ่งออกเป็น 3 ส่วนตามระดับต่อไปนี้ (ระดับหรือออบเจ็กต์)

  1. พิกัดแผนที่
  2. หมายเลขโทรศัพท์
  3. อีเมล
  4. หน้าเว็บ

URI สําหรับแต่ละกลุ่มจะแสดงตามลําดับเดียวกันที่กําหนดไว้ในอาร์เรย์ หากต้องการใช้ลําดับอื่น ให้ลบล้างเทมเพลตเริ่มต้น

องค์ประกอบเทมเพลตรายการเริ่มต้น
  1. class.localizedIssuerName
    หรือ class.issuerName
  2. class.localizedProgramName
    หรือ class.programName
  3. class.programLogo
  4. class.hexBackgroundColor