เทมเพลตบัตรโดยสาร

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

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

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

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

Android

ภาพรวมของส่วนเลย์เอาต์และตำแหน่งของเทมเพลตบัตร

เว็บ

ภาพรวมของส่วนเลย์เอาต์และตำแหน่งของเทมเพลตบัตร

ชื่อการ์ด

Android

องค์ประกอบเลย์เอาต์ชื่อการ์ดและตำแหน่งฟิลด์ ชื่อบัตรเริ่มต้น
  1. class.logo
  2. class.localizedIssuerName
    หรือ class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    หรือ class.hexBackgroundColor

ชื่อการ์ดโลโก้แบบกว้าง
  1. class.wideLogo
  2. object.ticketLeg.originName
  3. object.ticketLeg.destinationName
  4. object.ticketLeg.originStationCode
  5. object.ticketLeg.destinationStationCode
  6. object.tripType
  7. object.hexBackgroundColor
    หรือ class.hexBackgroundColor

เว็บ

องค์ประกอบเลย์เอาต์ชื่อการ์ดและตำแหน่งฟิลด์ ชื่อบัตรเริ่มต้น
  1. class.logo
  2. class.localizedIssuerName
    หรือ class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    หรือ class.hexBackgroundColor

ชื่อการ์ดโลโก้แบบกว้าง
  1. class.wideLogo
  2. object.ticketLeg.originName
  3. object.ticketLeg.destinationName
  4. object.ticketLeg.originStationCode
  5. object.ticketLeg.destinationStationCode
  6. object.tripType
  7. object.hexBackgroundColor
    หรือ class.hexBackgroundColor

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

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

  • object.tripType
  • object.ticketLeg.originName
  • object.ticketLeg.destinationName
  • object.ticketLeg.originStationCode
  • object.ticketLeg.destinationStationCode

การแสดงผลบัตรจะขึ้นอยู่กับช่องที่ไม่ได้ว่างเปล่า โดยสามารถแสดงผลได้ด้วยวิธีต่อไปนี้

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

ออบเจ็กต์แบบหลายขาTransitObjectจะทำงานคล้ายกันมาก ในกรณีนี้ อย่าใช้ object.ticketLeg แต่คุณต้องใช้รายการ object.ticketLegs[] แทน ต้องกำหนดทั้งต้นทางและปลายทาง ต้องใช้ชื่อหรือรหัสสถานี หรือทั้ง 2 อย่าง อย่างสม่ำเสมอในแต่ละช่วง ต้นทางที่แสดงคือต้นทางขององค์ประกอบแรกในอาร์เรย์ ส่วนปลายทางที่แสดงคือปลายทางขององค์ประกอบสุดท้ายในอาร์เรย์

สีพื้นหลังของบัตรไม่ใช่ช่องที่ต้องระบุ และกำหนดได้ทั้งที่ระดับคลาสและระดับออบเจ็กต์ ฟิลด์ออบเจ็กต์มีลำดับความสำคัญสูงกว่าและใช้เพื่อลบล้างฟิลด์คลาสได้

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

ปฏิบัติตาม หลักเกณฑ์เกี่ยวกับรูปภาพโลโก้แบบกว้างเมื่อสร้างโลโก้ส่วนหัวแบบกว้างเพื่อแสดงรูปภาพในบัตรอย่างเหมาะสมที่สุด

เทมเพลตการ์ด

Android

องค์ประกอบเลย์เอาต์แถวและตำแหน่งฟิลด์ของเทมเพลตการ์ด

เว็บ

องค์ประกอบเลย์เอาต์แถวและตำแหน่งฟิลด์ของเทมเพลตการ์ด

ส่วนเทมเพลตการ์ดใช้เพื่อแสดงแถวเพิ่มเติม แถวเหล่านี้อาจมีฟิลด์ Structured Data แบบข้อความหรือฟิลด์โมดูลข้อความ

คุณระบุจำนวนแถวที่กำหนดจำนวนออบเจ็กต์ใน class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] รายการได้ รายการต้องมีองค์ประกอบอย่างน้อย 1 รายการ และเราขอแนะนำให้ใช้ไม่เกิน 2 รายการ แต่ละองค์ประกอบต้องเป็นประเภทใดประเภทหนึ่งต่อไปนี้

  • oneItem ซึ่งยอมรับรายการเดียว
    • 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.ticketNumber
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

เว็บ

องค์ประกอบและตำแหน่งของเลย์เอาต์บาร์โค้ดของการ์ด
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type และ object.barcode.value
    หรือ object.ticketNumber
  4. object.barcode.alternateText
  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[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • ...

ส่วนด้านล่างคือรายการสินค้า class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[] โดยรายการอาจมี ฟิลด์ Structured Data ฟิลด์โมดูลข้อความ ฟิลด์โมดูลลิงก์ ฟิลด์โมดูลรูปภาพ หรือข้อความ

แต่ละรายการสามารถกำหนดเป็นตัวเลือกฟิลด์เดียว (.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
    

โค้ดจะสร้างบัตรที่มีรูปแบบส่วนล่างดังนี้

ตัวอย่างส่วนล่าง
                                                                             override

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

หากไม่ลบล้างส่วนล่าง ระบบจะแสดงรายการฟิลด์อ้างอิงเริ่มต้นใน ลำดับเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่เทมเพลตเริ่มต้น

หากการเดินทางมีหลายช่วง ระบบจะแสดงแผนการเดินทางแบบง่ายที่ด้านบนของส่วน และย้ายไม่ได้ หากการเดินทางมีเพียงขาเดียว คุณจะแสดงแผนการเดินทางแบบง่ายได้โดยการตั้งค่า class.enableSingleLegItinerary

แผนการเดินทางแบบหลายช่วง
  1. class.tranistType
  2. object.ticketLegs[i].originName
    หรือ object.ticketLegs[i].originStationCode
  3. object.ticketLegs[i].departureDateTime (เวลาเท่านั้น)
  4. object.ticketLegs[i].transitOperatorName
  5. COACH หรือ class.customCoachLabel
  6. object.ticketLegs[i].ticketSeat.coach
    หรือ object.ticketLegs[i].ticketSeats[*].coach
  7. SEAT หรือ class.customSeatLabel
  8. object.ticketLegs[i].ticketSeat.seat
    หรือ object.ticketLegs[i].ticketSeat.seatAssignment
    หรือ object.ticketLegs[i].ticketSeats[*].seat
    หรือ object.ticketLegs[i].ticketSeats[*].seatAssignment
    หรือ NO SPECIFIC SEAT
  9. object.hexBackgroundColor
    หรือ class.hexBackgroundColor
  10. object.ticketLegs[i].destinationName
    หรือ object.ticketLegs[i].destinationStationCode
  11. object.ticketLegs[i].arrivalDateTime (เวลาเท่านั้น)
  12. โอนไปยัง: แพลตฟอร์ม
    หรือโอนไปยัง: class.customPlatformLabel
    หรือโอน (หากไม่ได้กำหนดแพลตฟอร์ม)
  13. object.ticketLegs[i+1].platform

เทมเพลตรายการ

องค์ประกอบของเทมเพลตรายการ
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. object.ticketLeg.departureDateTime (จัดกลุ่ม)
    หรือ class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.logo
  4. object.hexBackgroundColor
    หรือ class.hexBackgroundColor
  5. <# passes> (จัดกลุ่ม)

ส่วนเทมเพลตรายการใช้เพื่อเลือกฟิลด์ที่จะแสดงในมุมมอง "บัตร" ของ แอป 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
    

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

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

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

  • originAndDestinationCodes
  • originAndDestinationNames
  • originName

แถวที่ 2 และ 3 จะกำหนดได้ด้วยตัวเลือกฟิลด์เท่านั้น ฟิลด์จะแสดงโดยไม่มีป้ายกำกับ สำหรับบัตรที่จัดกลุ่ม แถวที่ 2 จะแสดงวันที่ออกเดินทางเสมอ และแถวที่ 3 จะแสดงจำนวนบัตรที่จัดกลุ่มเสมอ

ป้ายกำกับ

ฟิลด์ Structured Data ทั้งหมดมีป้ายกำกับที่ Google จัดให้ Google มีหน้าที่ จัดหาคำแปลสำหรับป้ายกำกับแต่ละรายการในภาษาที่รองรับทั้งหมด

คุณปรับแต่งป้ายกำกับบางรายการเหล่านี้ได้โดยใช้ช่อง class.custom<name_of_the_field>Label ช่องใดช่องหนึ่ง เมื่อปรับแต่งป้ายกำกับ คุณจะต้องรับผิดชอบในการแปลป้ายกำกับนั้นๆ ในทุกภาษา ที่คุณต้องการรองรับ

การอ้างอิงฟิลด์

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

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

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

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

หากต้องการอ้างอิงฟิลด์ที่อยู่ในรายการ คุณสามารถใช้ดัชนีของฟิลด์ในรายการ หรือใช้รหัสอ้างอิงในกรณีส่วนใหญ่ รายการในรายการที่อ้างอิงได้ ตามรหัสจะมีช่อง .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.logo
  2. class.localizedIssuerName
    หรือ class.issuerName
  3. ดูชื่อการ์ด
  4. DEPARTURE หรือ VALID FROM
  5. object.ticketLeg.departureDateTime (วันที่และเวลา)
    หรือ object.validTimeInterval.start.date
  6. มาถึงหรือใช้ได้จนถึง
  7. object.ticketLeg.arrivalDateTime (เวลาเท่านั้น)
    หรือ object.validTimeInterval.end.date
  8. ผู้โดยสาร
  9. object.passengerNames
  10. ตู้โดยสารหรือ class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH หรือ class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT หรือ class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    หรือ object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.type และ object.barcode.value
    หรือ object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    หรือ class.hexBackgroundColor
  19. แผนการเดินทางแบบหลายช่วง
  20. หมายเลขตั๋วหรือ class.customTicketNumberLabel
  21. object.ticketNumber
  22. สถานะของตั๋ว
  23. object.ticketStatus หรือ object.customTicketStatus
  24. การออกเดินทาง
  25. object.ticketLeg.departureDateTime
  26. ซานต้ามาถึง
  27. object.ticketLeg.arrivalDateTime
  28. ชื่อค่าโดยสารหรือ class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. แพลตฟอร์มหรือ class.customPlatformLabel
  31. object.ticketLeg.platform
  32. ZONE หรือ class.customZoneLabel
  33. object.ticketLeg.zone
  34. ชั้นโดยสารหรือ class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    หรือ object.ticketLeg.ticketSeat.customFareClass
  36. หมวดหมู่สัมปทาน
    หรือ class.customConcessionCategoryLabel
  37. object.concessionCategory
    หรือ object.customConcessionCategory
  38. ข้อจำกัดของเส้นทาง
    หรือ class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. รายละเอียดข้อจำกัดด้านเส้นทาง
    หรือ class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. การจำกัดเวลา
    หรือ class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. ข้อจำกัดอื่นๆ
    หรือ class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. หมายเลขใบเสร็จ
    หรือ class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. วันที่ซื้อ
  49. object.purchaseDetails.purchaseDateTime
  50. รหัสบัญชี
  51. object.purchaseDetails.accountId
  52. รหัสยืนยัน
    หรือ class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. มูลค่าที่ตราไว้หรือ class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE หรือ class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. ข้อความส่วนลด
    หรือ class.customDiscountMessageLabel
  59. object.purchaseDetails.ticketCost.discountMessage
  60. class.imageModulesData[0].mainImage
  61. object.imageModulesData[0].mainImage
  62. class.messages[].header
  63. class.messages[].body
  64. object.messages[].header
  65. object.messages[].body
  66. class.textModulesData[0..9].header
  67. class.textModulesData[0..9].body
  68. object.textModulesData[0..9].header
  69. object.textModulesData[0..9].body
  70. class.linksModuleData.uris[].description
  71. object.linksModuleData.uris[].description

เว็บ

องค์ประกอบและตำแหน่งเลย์เอาต์เทมเพลตบัตรเริ่มต้น
  1. class.logo
  2. class.localizedIssuerName
    หรือ class.issuerName
  3. ดูชื่อการ์ด
  4. DEPARTURE หรือ VALID FROM
  5. object.ticketLeg.departureDateTime (วันที่และเวลา)
    หรือ object.validTimeInterval.start.date
  6. มาถึงหรือใช้ได้จนถึง
  7. object.ticketLeg.arrivalDateTime (เวลาเท่านั้น)
    หรือ object.validTimeInterval.end.date
  8. ผู้โดยสาร
  9. object.passengerNames
  10. ตู้โดยสารหรือ class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH หรือ class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT หรือ class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    หรือ object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.type และ object.barcode.value
    หรือ object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    หรือ class.hexBackgroundColor
  19. แผนการเดินทางแบบหลายช่วง
  20. หมายเลขตั๋วหรือ class.customTicketNumberLabel
  21. object.ticketNumber
  22. สถานะของตั๋ว
  23. object.ticketStatus หรือ object.customTicketStatus
  24. การออกเดินทาง
  25. object.ticketLeg.departureDateTime
  26. ซานต้ามาถึง
  27. object.ticketLeg.arrivalDateTime
  28. ชื่อค่าโดยสารหรือ class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. แพลตฟอร์มหรือ class.customPlatformLabel
  31. object.ticketLeg.platform
  32. ZONE หรือ class.customZoneLabel
  33. object.ticketLeg.zone
  34. ชั้นโดยสารหรือ class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    หรือ object.ticketLeg.ticketSeat.customFareClass
  36. หมวดหมู่สัมปทาน
    หรือ class.customConcessionCategoryLabel
  37. object.concessionCategory
    หรือ object.customConcessionCategory
  38. ข้อจำกัดของเส้นทาง
    หรือ class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. รายละเอียดข้อจำกัดด้านเส้นทาง
    หรือ class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. การจำกัดเวลา
    หรือ class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. ข้อจำกัดอื่นๆ
    หรือ class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. หมายเลขใบเสร็จ
    หรือ class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. วันที่ซื้อ
  49. object.purchaseDetails.purchaseDateTime
  50. รหัสบัญชี
  51. object.purchaseDetails.accountId
  52. รหัสยืนยัน
    หรือ class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. มูลค่าที่ตราไว้หรือ class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE หรือ class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. ข้อความส่วนลด
    หรือ class.customDiscountMessageLabel
  59. object.purchaseDetails.ticketCost.discountMessage
  60. class.imageModulesData[0].mainImage
  61. object.imageModulesData[0].mainImage
  62. class.messages[].header
  63. class.messages[].body
  64. object.messages[].header
  65. object.messages[].body
  66. class.textModulesData[0..9].header
  67. class.textModulesData[0..9].body
  68. object.textModulesData[0..9].header
  69. object.textModulesData[0..9].body
  70. class.linksModuleData.uris[].description
  71. object.linksModuleData.uris[].description

สำหรับฟิลด์โมดูลรูปภาพ เราจะแสดงฟิลด์โมดูลรูปภาพจากคลาสเพียง 1 รายการและฟิลด์โมดูลรูปภาพจากออบเจ็กต์เพียง 1 รายการ หากต้องการฟิลด์โมดูลรูปภาพมากกว่า 1 รายการที่ ระดับใดก็ตาม ให้ลบล้างเทมเพลตเริ่มต้น

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

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

สำหรับฟิลด์โมดูลลิงก์ คุณกำหนด URI ได้ไม่จำกัดจำนวน ระบบจะแสดง URI โดยจัดกลุ่มตามลำดับต่อไปนี้สำหรับแต่ละระดับ (คลาสหรือออบเจ็กต์)

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

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

องค์ประกอบและตำแหน่งเลย์เอาต์เทมเพลตรายการเริ่มต้น
  1. (object.ticketLeg.originName
      และ object.ticketLeg.destinationName)
    หรือ (object.ticketLeg.originStationCode
      และ object.ticketLeg.destinationStationCode)
    หรือ object.ticketLeg.originName
  2. object.ticketLeg.departureDateTime
    หรือ object.validTimeInterval.end.date
  3. class.logo
  4. object.hexBackgroundColor
    หรือ class.hexBackgroundColor
  5. <# passes> (จัดกลุ่ม)