Template Tiket Transportasi Umum

Tiket multi-trip mendukung rendering template. Jika tidak ada template yang ditentukan, template default akan digunakan.

Definisi template

Template kartu ditentukan di tingkat class dan digunakan untuk menampilkan objek apa pun yang terkait dengan class tersebut. Template ini menentukan kolom yang akan ditampilkan di berbagai bagian kartu.

Template ini dibagi menjadi bagian-bagian berikut:

Android

Ringkasan template

Web

Ringkasan template

Judul kartu

Android

Elemen judul kartu Judul kartu default
  1. class.logo
  2. class.localizedIssuerName
    atau class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    atau class.hexBackgroundColor

Judul kartu berlogo lebar
  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
    atau class.hexBackgroundColor

Web

Elemen judul kartu
  1. class.logo
  2. class.localizedIssuerName
    atau class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    atau class.hexBackgroundColor

Bagian judul kartu menampilkan logo, nama operator transportasi umum, dan ringkasan perjalanan. Ketiga elemen ini diperlukan dan referensi kolom yang digunakan untuk mengisinya atau posisinya tidak dapat diubah.

Namun, logika rendering memungkinkan beberapa fleksibilitas untuk baris atas. Baris atas kartu, yang mewakili ringkasan perjalanan, dikontrol oleh kolom berikut di TransitObject untuk perjalanan satu segmen:

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

Cara kartu dirender bergantung pada kolom mana yang tidak kosong. Ini dapat dirender dengan cara berikut:

  • Hanya nama asal: Nama asal adalah satu-satunya informasi yang ditampilkan. Hal ini sangat berguna untuk tiket yang mencakup suatu area, bukan perjalanan tertentu.
  • Asal dan tujuan: Tempat asal berada di sisi kiri dan tujuan berada di sisi kanan. Simbol yang ada di antara keduanya bergantung pada jenis perjalanan. Tempat asal dan tujuan ditampilkan sebagai salah satu dari berikut ini:
    • Nama dan kode stasiun: Kami menampilkan kode stasiun dengan nama sebagai teks lebih kecil di bagian atas.
    • Hanya nama: Kami menampilkan nama.
    • Hanya kode stasiun: Kami menampilkan kode stasiun.

Objek TransitObject multi-segmen berfungsi sangat mirip. Dalam hal ini, jangan gunakan object.ticketLeg. Sebagai gantinya, Anda harus menggunakan daftar object.ticketLegs[]. Tempat asal dan tujuan harus ditentukan. Nama atau kode stasiun, atau keduanya, harus digunakan secara konsisten di setiap segmen. Tempat asal yang ditampilkan adalah asal elemen pertama dalam array, sedangkan tujuan yang ditampilkan adalah tujuan elemen terakhir dalam array.

Warna latar belakang kartu bukanlah kolom wajib dan dapat ditentukan di tingkat class dan tingkat objek. Kolom objek memiliki prioritas lebih tinggi dan dapat digunakan untuk mengganti kolom class.

Jika kolom logo lebar ditetapkan, di perangkat Android, header template default dengan logo dan nama penerbit akan diganti dengan logo lebar.

Ikuti panduan gambar logo lebar saat membuat logo header lebar untuk menampilkan gambar di kartu Anda secara optimal.

Template kartu

Android

Ringkasan template

Web

Ringkasan template

Bagian template kartu digunakan untuk menampilkan baris tambahan. Baris ini dapat berisi kolom data terstruktur berbasis teks atau kolom modul teks.

Anda dapat menetapkan jumlah baris yang menentukan jumlah objek dalam daftar class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]. Daftar ini memerlukan setidaknya satu elemen dan kami merekomendasikan untuk menggunakan maksimal dua elemen. Setiap elemen harus berupa salah satu jenis berikut:

  • oneItem, yang menerima satu item:
    • item
  • twoItems, yang menerima dua item:
    • startItem
    • endItem
  • threeItems, yang menerima tiga item:
    • startItem
    • middleItem
    • endItem

Setiap item dapat ditentukan sebagai pemilih kolom tunggal (.firstValue), dua pemilih kolom (.firstValue dan .secondValue), atau item yang telah ditentukan sebelumnya (.predefinedItem). Nilai kolom yang dipilih dan labelnya masing-masing akan ditampilkan. Saat Anda menentukan dua pemilih kolom, nilai kolom yang dipilih akan ditampilkan dengan pemisah "/". Hal yang sama berlaku untuk label kolom yang dipilih. Item yang telah ditetapkan sebelumnya digunakan untuk menentukan rendering yang lebih kompleks.

Contoh kode berikut menunjukkan cara mengganti bagian baris kartu template kartu untuk menentukan dua baris. Setiap baris berisi tiga item yang masing-masing mereferensikan enam kolom khusus textModuleData level class beserta headernya sebagai label:

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);
    

Kode ini membuat kartu dengan format bagian template kode berikut:

Contoh penggantian label.

Jika kosong, item tidak akan ditampilkan. Untuk mengetahui detail selengkapnya, lihat Referensi Kolom. Jika semua item dalam baris kosong, baris tersebut tidak akan ditampilkan. Jika beberapa, tetapi tidak semua item dalam baris kosong, item yang tidak kosong akan diatur ulang dan ditampilkan sebagai baris dengan lebih sedikit item.

Jika Anda tidak mengganti template kartu, jumlah baris default, jumlah item default, dan referensi kolom default akan digunakan. Untuk detail selengkapnya, lihat Template default.

Setelah ditentukan, Banner Besar dapat muncul setelah baris pertama, jika ada beberapa baris dalam daftar cardRowTemplateInfos, atau di atas baris, jika hanya ada satu.

Kode batang kartu

Android

Elemen kode batang kartu
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type dan object.barcode.value
    atau object.ticketNumber
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Web

Elemen kode batang kartu
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type dan object.barcode.value
    atau object.ticketNumber
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Bagian kode batang kartu digunakan untuk menampilkan teks atau gambar tambahan di atas dan di bawah kode batang. Semua kolom di bagian ini tidak diperlukan.

Ada tiga pemilih kolom yang dapat digunakan untuk menetapkan dua kolom berdampingan di atas dan satu di bawah kode batang. Kolom ini ditampilkan tanpa label dan dapat berupa kolom data terstruktur berbasis teks, kolom modul teks, atau kolom modul gambar. Jika Anda menggunakan gambar, gambar ini harus mengikuti pedoman branding.

Kode batang ditentukan oleh jenis dan nilai. Untuk daftar jenis kode batang yang didukung, lihat Referensi. Selain itu, teks dapat ditampilkan tepat di bawah kode batang. Teks ini dapat memudahkan pemindaian kode batang, dan berbagai kegunaan lainnya.

Contoh kode berikut menunjukkan cara mengganti bagian kode batang suatu kartu untuk menampilkan gambar di atas kode batang:

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);
    

Kode ini membuat kartu dengan format bagian kode batang berikut:

Contoh penggantian kode batang kartu.

Jika Anda tidak mengganti bagian kode batang, kolom kode batang default akan digunakan. Untuk informasi selengkapnya, lihat Template default.

Template detail

Android

Bagian template detail
  • Itinerari multi-segmen
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • ...

Web

Bagian template detail
  • Itinerari multi-segmen
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • ...

Bagian template detail adalah daftar item class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. Item dapat berisi segala jenis kolom data terstruktur, kolom modul teks, kolom modul link, kolom modul gambar, atau pesan.

Setiap item dapat ditentukan sebagai pemilih kolom tunggal (.firstValue), dua pemilih kolom (.firstValue dan .secondValue), atau item yang telah ditetapkan (.predefinedItem). Nilai kolom yang dipilih dan labelnya masing-masing akan ditampilkan. Saat Anda menentukan dua pemilih kolom, nilai kolom yang dipilih akan ditampilkan dengan pemisah "/". Hal yang sama berlaku untuk label kolom yang dipilih. Item yang telah ditentukan sebelumnya digunakan untuk menentukan rendering yang lebih kompleks. Kolom modul gambar dirender dengan lebar penuh tanpa label.

Contoh kode berikut menunjukkan cara mengganti bagian detail kartu untuk menampilkan satu kolom linksModuleData dengan labelnya:

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
    

Kode ini membuat kartu dengan format bagian detail berikut:

Contoh penggantian
                                                                             detail.

Jika kosong, item tidak akan ditampilkan. Untuk mengetahui detail selengkapnya, lihat Referensi Kolom.

Jika Anda tidak mengganti template detail, daftar default kolom referensi dalam urutan default akan ditampilkan. Untuk mengetahui informasi selengkapnya, lihat Template default.

Jika perjalanan mencakup beberapa segmen, itinerari sederhana akan ditampilkan di bagian atas bagian dan tidak dapat dipindahkan. Jika perjalanan hanya mencakup satu segmen, itinerari sederhana dapat ditampilkan dengan menetapkan class.enableSingleLegItinerary.

Itinerari Beberapa Kaki
  1. class.tranistType
  2. object.ticketLegs[i].originName
    atau object.ticketLegs[i].originStationCode
  3. object.ticketLegs[i].departureDateTime (hanya waktu)
  4. object.ticketLegs[i].transitOperatorName
  5. COACH atau class.customCoachLabel
  6. object.ticketLegs[i].ticketSeat.coach
    atau object.ticketLegs[i].ticketSeats[*].coach
  7. SEAT atau class.customSeatLabel
  8. object.ticketLegs[i].ticketSeat.seat
    atau object.ticketLegs[i].ticketSeat.seatAssignment
    atau object.ticketLegs[i].ticketSeats[*].seat
    atau object.ticketLegs[i].ticketSeats[*].seatAssignment
    atau TIDAK ADA KURSI KHUSUS
  9. object.hexBackgroundColor
    atau class.hexBackgroundColor
  10. object.ticketLegs[i].destinationName
    atau object.ticketLegs[i].destinationStationCode
  11. object.ticketLegs[i].arrivalDateTime (hanya waktu)
  12. TRANSFER KE: PLATFORM
    atau TRANSFER KE: class.customPlatformLabel
    atau TRANSFER (jika tidak ada platform yang ditentukan)
  13. object.ticketLegs[i+1].platform

Template daftar

Membuat daftar elemen template
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. object.ticketLeg.departureDateTime (dikelompokkan)
    atau class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.logo
  4. object.hexBackgroundColor
    atau class.hexBackgroundColor
  5. <# kartu> (dikelompokkan)

Bagian template daftar digunakan untuk memilih kolom yang akan ditampilkan dalam tampilan "Kartu" aplikasi Google Wallet. Kartu diwakili dalam daftar dengan logo, warna latar belakang, dan tiga baris.

Contoh kode berikut menunjukkan cara mengganti template daftar kartu untuk menampilkan kolom tanggal habis masa berlaku objek untuk satu kartu di baris pertama template daftar:

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
    

Kode ini membuat kartu dengan rendisi template daftar berikut:

Contoh penggantian
                                                                           daftar.

Baris pertama dapat ditentukan dengan pemilih kolom atau menampilkan ringkasan perjalanan. Format ringkasan bisa berupa salah satu dari berikut ini:

  • originAndDestinationCodes
  • originAndDestinationNames
  • originName

Baris kedua dan ketiga hanya dapat ditentukan dengan pemilih kolom. Kolom ditampilkan tanpa label. Untuk kartu yang dikelompokkan, baris kedua selalu menampilkan tanggal keberangkatan dan baris ketiga selalu menampilkan jumlah kartu yang dikelompokkan.

Label

Semua kolom data terstruktur memiliki label yang disediakan oleh Google. Google bertanggung jawab menyediakan terjemahan untuk setiap label ini ke dalam semua bahasa yang didukung.

Anda dapat menyesuaikan beberapa label ini menggunakan salah satu kolom class.custom<name_of_the_field>Label. Saat menyesuaikan label, Anda bertanggung jawab menyediakan terjemahan untuk label tertentu dalam semua bahasa yang ingin Anda dukung.

Referensi kolom

Referensi kolom digunakan di berbagai bagian template dengan bentuk class.classTemplateInfo.*.fields[]. Referensi kolom berisi daftar jalur ke kolom data terstruktur, kolom modul teks, kolom modul link, kolom modul gambar, atau pesan.

Tidak semua jenis jalur diizinkan di setiap referensi kolom. Misalnya, beberapa referensi kolom hanya mengizinkan jalur ke kolom data terstruktur berbasis teks atau kolom modul teks. Kolom terstruktur berbasis teks adalah kolom data terstruktur dari string jenis, string yang dilokalkan, tanggal, atau uang.

Daftar ini dapat digunakan untuk menerapkan logika penggantian. Artinya, jika jalur pertama dalam daftar di-resolve ke kolom kosong, jalur berikutnya akan dievaluasi. Logika penggantian terutama ditargetkan pada kolom data terstruktur berbasis teks atau kolom modul teks. Jangan mencampur jenis kolom yang berbeda dalam daftar yang sama. Gunakan logika penggantian dengan hati-hati dan hanya dalam situasi tertentu ketika Anda mengharapkan pola kolom yang konsisten dan ada di beberapa objek, tetapi tidak pada objek lainnya. Biasanya, lebih mudah untuk membuat class terpisah untuk kasus penggunaan terpisah.

Jika semua jalur dalam daftar referensi kolom me-resolve kolom kosong, item yang menggunakan referensi kolom tidak akan ditampilkan. Jika Anda ingin item yang menggunakan referensi kolom selalu ada, pastikan setidaknya satu jalur tidak kosong. Sebaiknya setel kolom ke karakter khusus, seperti '-', untuk mewakili nilai null, meskipun beberapa kolom mengizinkan string hanya dengan spasi.

Untuk mereferensikan kolom yang terdapat dalam daftar, Anda dapat menggunakan indeks kolom tersebut dalam daftar atau, pada sebagian besar kasus, Anda dapat menggunakan ID referensi. Item daftar yang dapat direferensikan oleh ID memiliki kolom .id. Sebaiknya gunakan ID referensi pada indeks kolom dalam daftar jika tersedia.

Berikut adalah contoh cara mereferensikan kolom yang terdapat dalam daftar.

  • 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]

Dalam hal ini, item pertama di bagian detail pada kartu adalah gambar kedua yang dideklarasikan dalam objek. Sementara itu, item kedua di bagian detail pada kartu ini adalah gambar pertama yang dideklarasikan dalam objek.

Template default

Android

Elemen template default
  1. class.logo
  2. class.localizedIssuerName
    atau class.issuerName
  3. Lihat Judul kartu
  4. PERANGGARAN atau VALID FROM
  5. object.ticketLeg.departureDateTime (tanggal dan waktu)
    atau object.validTimeInterval.start.date
  6. MENDATANG PADA atau VALID HINGGA
  7. object.ticketLeg.arrivalDateTime (hanya waktu)
    atau object.validTimeInterval.end.date
  8. PENUMPANG
  9. object.passengerNames
  10. CARRIAGE atau class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH atau class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT atau class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    atau object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.type dan object.barcode.value
    atau object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    atau class.hexBackgroundColor
  19. Itinerari multi-segmen
  20. NOMOR TIKET atau class.customTicketNumberLabel
  21. object.ticketNumber
  22. STATUS TIKET
  23. object.ticketStatus atau object.customTicketStatus
  24. KEBERANGKATAN
  25. object.ticketLeg.departureDateTime
  26. KEDATANGAN
  27. object.ticketLeg.arrivalDateTime
  28. FARE NAME atau class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. PLATFORM atau class.customPlatformLabel
  31. object.ticketLeg.platform
  32. ZONE atau class.customZoneLabel
  33. object.ticketLeg.zone
  34. FARE CLASS atau class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    atau object.ticketLeg.ticketSeat.customFareClass
  36. KATEGORI KONSESI
    atau class.customConcessionCategoryLabel
  37. object.concessionCategory
    atau object.customConcessionCategory
  38. PEMBATASAN RUTE
    atau class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. DETAIL PEMBATASAN RUTE
    atau class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. PEMBATASAN WAKTU
    atau class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. PEMBATASAN LAINNYA
    atau class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. NOMOR PENERIMA
    atau class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. TANGGAL PEMBELIAN
  49. object.purchaseDetails.purchaseDateTime
  50. ID AKUN
  51. object.purchaseDetails.accountId
  52. KODE KONFIRMASI
    atau class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. FACE VALUE atau class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE atau class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. PESAN DISKON
    atau 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

Web

Elemen template default
  1. class.logo
  2. class.localizedIssuerName
    atau class.issuerName
  3. Lihat Judul kartu
  4. PERANGGARAN atau VALID FROM
  5. object.ticketLeg.departureDateTime (tanggal dan waktu)
    atau object.validTimeInterval.start.date
  6. MENDATANG PADA atau VALID HINGGA
  7. object.ticketLeg.arrivalDateTime (hanya waktu)
    atau object.validTimeInterval.end.date
  8. PENUMPANG
  9. object.passengerNames
  10. CARRIAGE atau class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH atau class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT atau class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    atau object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.type dan object.barcode.value
    atau object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    atau class.hexBackgroundColor
  19. Itinerari multi-segmen
  20. NOMOR TIKET atau class.customTicketNumberLabel
  21. object.ticketNumber
  22. STATUS TIKET
  23. object.ticketStatus atau object.customTicketStatus
  24. KEBERANGKATAN
  25. object.ticketLeg.departureDateTime
  26. KEDATANGAN
  27. object.ticketLeg.arrivalDateTime
  28. FARE NAME atau class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. PLATFORM atau class.customPlatformLabel
  31. object.ticketLeg.platform
  32. ZONE atau class.customZoneLabel
  33. object.ticketLeg.zone
  34. FARE CLASS atau class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    atau object.ticketLeg.ticketSeat.customFareClass
  36. KATEGORI KONSESI
    atau class.customConcessionCategoryLabel
  37. object.concessionCategory
    atau object.customConcessionCategory
  38. PEMBATASAN RUTE
    atau class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. DETAIL PEMBATASAN RUTE
    atau class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. PEMBATASAN WAKTU
    atau class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. PEMBATASAN LAINNYA
    atau class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. NOMOR PENERIMA
    atau class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. TANGGAL PEMBELIAN
  49. object.purchaseDetails.purchaseDateTime
  50. ID AKUN
  51. object.purchaseDetails.accountId
  52. KODE KONFIRMASI
    atau class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. FACE VALUE atau class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE atau class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. PESAN DISKON
    atau 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

Untuk kolom modul gambar, kami menampilkan satu-satunya kolom modul gambar dari class tersebut, serta satu-satunya kolom modul gambar dari objek. Jika Anda memerlukan lebih dari satu kolom modul gambar di kedua tingkat tersebut, ganti template default.

Untuk kolom modul teks, kami hanya menampilkan maksimal 20 kolom modul teks dari class dan 20 kolom modul teks dari objek. Kolom ditampilkan dalam urutan yang sama dengan yang ditentukan dalam array. Jika Anda memerlukan lebih dari 20 kolom modul teks di kedua tingkat tersebut, ganti template default.

Untuk pesan, kami hanya menampilkan maksimum 20 pesan dari class dan 20 pesan dari objek. Kami tidak menjamin urutan pesan. Jika Anda memerlukan lebih dari 20 pesan di salah satu level, atau jaminan untuk pesanan apa pun, ganti template default.

Untuk kolom modul link, tidak ada batas jumlah URI yang dapat Anda tentukan. Uris ditampilkan dan dikelompokkan dalam urutan berikut untuk setiap level (class atau objek):

  1. Koordinat peta
  2. Nomor telepon
  3. Alamat email
  4. Halaman web

Untuk setiap grup, URI ditampilkan dalam urutan yang sama dengan yang didefinisikan dalam array. Jika Anda memerlukan urutan yang berbeda, ganti template default.

Elemen template daftar default
  1. (object.ticketLeg.originName
    dan object.ticketLeg.destinationName)
    atau (object.ticketLeg.originStationCode
    dan object.ticketLeg.destinationStationCode)
    atau object.ticketLeg.originName
  2. object.ticketLeg.departureDateTime
    atau object.validTimeInterval.end.date
  3. class.logo
  4. object.hexBackgroundColor
    atau class.hexBackgroundColor
  5. <# kartu> (dikelompokkan)