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

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

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

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

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

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

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

เว็บ

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

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

คุณสามารถระบุจำนวนแถวที่กำหนดจำนวนออบเจ็กต์ในรายการ 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 ช่องและส่วนหัวเป็นป้ายกำกับ ดังนี้

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[] รายการอาจมีฟิลด์ข้อมูลที่มีโครงสร้าง ฟิลด์โมดูลข้อความ ฟิลด์โมดูลลิงก์ ฟิลด์โมดูลรูปภาพ หรือข้อความประเภทใดก็ได้

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

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

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

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

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

หากการเดินทางมีหลายช่วง แผนการเดินทางแบบง่ายจะแสดงที่ด้านบนของส่วนและย้ายไม่ได้ หากการเดินทางมีเพียงเที่ยวเดียว คุณสามารถแสดงแผนการเดินทางแบบง่ายได้โดยตั้งค่า 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. โอนไปยัง: PLATFORM
    หรือโอนไปยัง: 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 จะแสดงจำนวนบัตรที่จัดกลุ่มเสมอ

ป้ายกำกับ

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

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

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

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

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

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

หากเส้นทางทั้งหมดในรายการอ้างอิงฟิลด์จับคู่ข้อมูลกับฟิลด์ว่าง ระบบจะไม่แสดงรายการที่ใช้การอ้างอิงฟิลด์ หากต้องการให้รายการที่ใช้การอ้างอิงฟิลด์แสดงอยู่เสมอ ให้ตรวจสอบว่ามีเส้นทางอย่างน้อย 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. ออกเดินทางหรือใช้ได้ตั้งแต่
  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. FARE NAME หรือ class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. PLATFORM หรือ class.customPlatformLabel
  31. object.ticketLeg.platform
  32. ZONE หรือ class.customZoneLabel
  33. object.ticketLeg.zone
  34. FARE CLASS หรือ 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. ราคาหรือ 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. ออกเดินทางหรือใช้ได้ตั้งแต่
  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. FARE NAME หรือ class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. PLATFORM หรือ class.customPlatformLabel
  31. object.ticketLeg.platform
  32. ZONE หรือ class.customZoneLabel
  33. object.ticketLeg.zone
  34. FARE CLASS หรือ 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. ราคาหรือ 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 ช่องในระดับใดระดับหนึ่ง ให้ลบล้างเทมเพลตเริ่มต้น

สำหรับช่องโมดูลข้อความ เราจะแสดงช่องโมดูลข้อความจากคลาสสูงสุด 20 ช่องและช่องโมดูลข้อความจากออบเจ็กต์สูงสุด 20 ช่องเท่านั้น ช่องจะแสดงตามลำดับเดียวกับที่กำหนดไว้ในอาร์เรย์ หากต้องการช่องโมดูลข้อความมากกว่า 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> (จัดกลุ่ม)