Toplu Taşıma Kartı Şablonu

Toplu taşıma kartları için destek şablonu oluşturma. Herhangi bir şablon tanımlanmazsa varsayılan şablon kullanılır.

Şablon tanımı

Geçiş şablonu sınıf düzeyinde tanımlanır ve sınıfla ilişkilendirilmiş herhangi bir nesneyi görüntülemek için kullanılır. Şablon, kartın farklı bölümlerinde hangi alanların gösterileceğini tanımlar.

Şablon aşağıdaki bölümlere ayrılmıştır:

Android

Şablonlara genel bakış

Web

Şablonlara genel bakış

Kart başlığı

Android

Kart başlığı öğeleri Varsayılan kart başlığı
  1. class.logo
  2. class.localizedIssuerName
    veya class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    veya class.hexBackgroundColor

Geniş logolu kart başlığı
  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
    veya class.hexBackgroundColor

Web

Kart başlığı öğeleri
  1. class.logo
  2. class.localizedIssuerName
    veya class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    veya class.hexBackgroundColor

Kart başlığı bölümünde logo, toplu taşıma operatörünün adı ve yolculuk özeti gösterilir. Bu üç öğenin tamamı zorunludur ve bunları doldurmak için kullanılan alan referansları veya konumları değiştirilemez.

Ancak oluşturma mantığı, üst satır için biraz esneklik sağlar. Yolculuk özetini temsil eden üst sıra satırı, tek ayaklı yolculukta TransitObject içindeki aşağıdaki alanlarla kontrol edilir:

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

Pasın nasıl oluşturulacağı, hangi alanların boş olmadığına bağlıdır. Aşağıdaki şekillerde oluşturulabilir:

  • Yalnızca kaynak adı: Kaynak adı, gösterilen tek bilgidir. Bu, özellikle belirli bir yolculuk yerine belirli bir alanı kapsayan biletler için faydalıdır.
  • Kalkış ve varış noktaları: Başlangıç noktası sol tarafta, varış noktası ise sağ taraftadır. Bu ikisi arasındaki simge, yolculuğun türüne bağlıdır. Kalkış ve varış noktaları, aşağıdakilerden biri olarak gösterilir:
    • Adlar ve istasyon kodları: İstasyon kodlarını, adlar üstte daha küçük metinlerle birlikte gösterilir.
    • Yalnızca adlar: Adlar gösterilir.
    • Yalnızca istasyon kodları: İstasyon kodlarını gösteririz.

Çok ayaklı TransitObject nesneleri çok benzer şekilde çalışır. Bu durumda, object.ticketLeg kullanmayın. Bunun yerine object.ticketLegs[] listesini kullanmanız gerekir. Hem kalkış hem de varış noktaları tanımlanmalıdır. Her bacakta adlar veya istasyon kodları ya da her ikisi de tutarlı bir şekilde kullanılmalıdır. Görüntülenen kaynak, dizideki ilk öğenin kaynağıdır. Görüntülenen hedef ise dizideki son öğenin hedefidir.

Kartın arka plan rengi zorunlu bir alan değildir ve hem sınıf düzeyinde hem de nesne düzeyinde tanımlanabilir. Nesne alanı daha yüksek önceliğe sahiptir ve sınıf alanını geçersiz kılmak için kullanılabilir.

Geniş logo alanı ayarlandığında, Android cihazlarda logoyu ve kartı verenin adını içeren varsayılan şablon başlığının yerini geniş logo alır.

Fotoğrafınızın kartlarınızda en iyi şekilde gösterilmesi için geniş başlık logonuzu oluştururken lütfen geniş logo resmi kurallarına uyun.

Kart şablonu

Android

Şablonlara genel bakış

Web

Şablonlara genel bakış

Kart şablonu bölümü, ekstra satırları görüntülemek için kullanılır. Bu satırlar, metin tabanlı yapılandırılmış veri alanları veya metin modülü alanları içerebilir.

class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] listesindeki nesnelerin sayısını tanımlayan satır sayısını belirtebilirsiniz. Liste en az bir öğe gerektirir ve en fazla iki öğe kullanılmasını öneririz. Her öğe aşağıdaki türlerin birinden olmalıdır:

  • Bir öğe kabul eden oneItem:
    • item
  • twoItems, iki öğe kabul eder:
    • startItem
    • endItem
  • threeItems, üç öğe kabul eder:
    • startItem
    • middleItem
    • endItem

Her öğe tek bir alan seçici (.firstValue), iki alan seçici (.firstValue ve .secondValue) veya önceden tanımlanmış bir öğe (.predefinedItem) olarak tanımlanabilir. Hem seçilen alanın değerleri hem de ilgili etiketleri gösterilir. İki alan seçici tanımladığınızda, seçilen alanların değerleri bir "/" ayırıcıyla gösterilir. Aynı durum, seçilen alanların etiketleri için de geçerlidir. Önceden tanımlanmış öğeler, daha karmaşık oluşturmayı tanımlamak için kullanılır.

Aşağıdaki kod örneğinde, iki satır belirtmek için kart şablonu kart satırı bölümlerinin nasıl geçersiz kılınacağı gösterilmektedir. Her satırda, her biri sınıf düzeyindeki altı adet textModuleData özel alanına ve bunların başlıklarına etiket olarak başvuruda bulunan üç öğe bulunur:

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

Kod, aşağıdaki kod şablonu bölümü biçimiyle geçiş oluşturur:

Etiketi geçersiz kılma örneği.

Bir öğe boşsa gösterilmez. Daha ayrıntılı bilgi için Alan Referansları bölümüne bakın. Bir satırdaki tüm öğeler boşsa satır gösterilmez. Bir satırdaki öğelerin tümü olmasa da bazıları boşsa boş olmayan öğeler yeniden düzenlenir ve daha az öğe içeren bir satır olarak görüntülenir.

Kart şablonunu geçersiz kılmazsanız varsayılan satır sayısı, varsayılan öğe sayısı ve varsayılan alan referansları kullanılır. Daha fazla bilgi için Varsayılan şablon bölümüne bakın.

Bir Hero Resim tanımladıktan sonra, cardRowTemplateInfos listesinde birden fazla satır varsa ilk satırdan sonra veya yalnızca bir satır varsa satırın üzerinde görünebilir.

Kart barkodu

Android

Kart barkod öğeleri
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type ve object.barcode.value
    veya object.ticketNumber
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Web

Kart barkod öğeleri
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type ve object.barcode.value
    veya object.ticketNumber
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

Kart barkod bölümü, barkodun üzerinde ve altında ekstra metin veya resim görüntülemek için kullanılır. Bu bölümdeki alanların hiçbiri zorunlu değildir.

Barkodun üzerinde ve altında bir tanesi de yan yana bulunan iki alanı tanımlamak için kullanılabilecek üç alan seçici vardır. Bunlar etiket olmadan görüntülenir ve metin tabanlı yapılandırılmış veri alanları, metin modülü alanları veya resim modülü alanları olabilir. Resim kullanırsanız bunlar marka kurallarına uygun olmalıdır.

Barkod, bir tür ve değerle tanımlanır. Desteklenen barkod türlerinin listesi için Referans bölümüne bakın. Ayrıca, barkodun hemen altında bir metin gösterilebilir. Bu metin, diğer kullanımların yanı sıra barkodları taramayı kolaylaştırabilir.

Aşağıdaki kod örneğinde, barkodun üzerinde bir resim görüntülemek için geçiş biletinin barkod bölümünün nasıl geçersiz kılınacağı gösterilmektedir:

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

Kod, aşağıdaki barkod bölümü biçimine sahip bir kart oluşturur:

Kart barkod geçersiz kılma örneği.

Barkod bölümünü geçersiz kılmazsanız varsayılan barkod alanları kullanılır. Daha fazla bilgi için Varsayılan şablon bölümüne bakın.

Ayrıntılar şablonu

Android

Ayrıntılar şablonu bölümleri
  • Çok ayaklı seyahat planı
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • ...

Web

Ayrıntılar şablonu bölümleri
  • Çok ayaklı seyahat planı
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • ...

Ayrıntılar şablonu bölümü, class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[] öğelerinden oluşan bir listedir. Öğeler; her türlü yapılandırılmış veri alanı, metin modülü alanı, bağlantı modülü alanı, resim modülü alanı veya mesaj içerebilir.

Her öğe tek bir alan seçici (.firstValue), iki alan seçici (.firstValue ve .secondValue) veya önceden tanımlanmış bir öğe (.predefinedItem) olarak tanımlanabilir. Hem seçilen alanın değerleri hem de ilgili etiketleri gösterilir. İki alan seçici tanımladığınızda, seçilen alanların değerleri bir "/" ayırıcıyla gösterilir. Aynı durum, seçilen alanların etiketleri için de geçerlidir. Önceden tanımlanmış öğeler, daha karmaşık oluşturmayı tanımlamak için kullanılır. Görüntü modülü alanları, etiket olmadan tam genişlikte oluşturulur.

Aşağıdaki kod örneğinde, etiketiyle birlikte tek bir linksModuleData alanını göstermek için kartın ayrıntılar bölümünün nasıl geçersiz kılınacağı gösterilmektedir:

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
    

Kod, aşağıdaki ayrıntı bölümü biçiminde bir kart oluşturur:

Ayrıntı geçersiz kılma örneği.

Bir öğe boşsa gösterilmez. Daha ayrıntılı bilgi için Alan Referansları bölümüne bakın.

Ayrıntılar şablonunu geçersiz kılmazsanız varsayılan referans alanları listesi (varsayılan sırayla) gösterilir. Daha fazla bilgi için Varsayılan şablon bölümüne bakın.

Yolculuk birden fazla ayak içeriyorsa bölümün üst kısmında basit bir seyahat planı gösterilir ve taşınamaz. Yolculuk yalnızca tek bir ayak içeriyorsa class.enableSingleLegItinerary ayarlayarak basit bir seyahat planı gösterilebilir.

Çok Ayaklı Seyahat Planı
  1. class.tranistType
  2. object.ticketLegs[i].originName
    veya object.ticketLegs[i].originStationCode
  3. object.ticketLegs[i].departureDateTime (yalnızca süre)
  4. object.ticketLegs[i].transitOperatorName
  5. COACH veya class.customCoachLabel
  6. object.ticketLegs[i].ticketSeat.coach
    veya object.ticketLegs[i].ticketSeats[*].coach
  7. SEAT veya class.customSeatLabel
  8. object.ticketLegs[i].ticketSeat.seat
    veya object.ticketLegs[i].ticketSeat.seatAssignment
    ya da object.ticketLegs[i].ticketSeats[*].seat
    veya object.ticketLegs[i].ticketSeats[*].seatAssignment
    ya da BELİRLİ KOLTUK YOK
  9. object.hexBackgroundColor
    veya class.hexBackgroundColor
  10. object.ticketLegs[i].destinationName
    veya object.ticketLegs[i].destinationStationCode
  11. object.ticketLegs[i].arrivalDateTime (yalnızca süre)
  12. PLATFORMA AKTAR
    veya AKTAR YAPIN: class.customPlatformLabel
    veya AKTAR (platform tanımlanmamışsa)
  13. object.ticketLegs[i+1].platform

Liste şablonu

Şablon öğelerini listeleme
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. object.ticketLeg.departureDateTime (gruplandırılmış)
    veya class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.logo
  4. object.hexBackgroundColor
    veya class.hexBackgroundColor
  5. <# kart> (gruplandırılmış)

Liste şablonu bölümü, Google Cüzdan uygulamasının "Kartlar" görünümünde hangi alanın gösterileceğini seçmek için kullanılır. Kart, listede logo, arka plan rengi ve üç satırla gösterilir.

Aşağıdaki kod örneğinde, liste şablonunun ilk satırında tek bir kartın nesne geçerlilik bitiş tarihi alanını göstermek için geçişte yer alan liste şablonunun nasıl geçersiz kılınacağı gösterilmektedir:

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
    

Kod, aşağıdaki liste şablonu oluşturmasıyla bir geçiş oluşturur:

Liste geçersiz kılma örneği.

İlk satır bir alan seçiciyle tanımlanabilir veya yolculuk özetini gösterir. Özetin biçimi aşağıdakilerden biri olabilir:

  • originAndDestinationCodes
  • originAndDestinationNames
  • originName

İkinci ve üçüncü satırlar yalnızca bir alan seçiciyle tanımlanabilir. Alanlar etiketsiz olarak gösterilir. Gruplandırılmış kartlar için ikinci satırda her zaman kalkış tarihi, üçüncü satırda ise her zaman gruplandırılmış kart sayısı gösterilir.

Etiketler

Tüm yapılandırılmış veri alanlarında Google tarafından sağlanan bir etiket bulunur. Bu etiketlerin her biri için desteklenen tüm dillerde çeviri sağlamak Google'ın sorumluluğundadır.

class.custom<name_of_the_field>Label alanlarından birini kullanarak bu etiketlerden bazılarını özelleştirebilirsiniz. Bir etiketi özelleştirdiğinizde, bu etiket için desteklemek istediğiniz tüm dillerde çeviri sağlamak sizin sorumluluğunuzda olur.

Alan referansları

Alan referansları, class.classTemplateInfo.*.fields[] biçimindeki şablonun farklı bölümlerinde kullanılır. Alan referansı; yapılandırılmış veri alanlarına, metin modülü alanlarına, bağlantı modülü alanlarına, resim modülü alanlarına veya mesajlara giden yolların listesini içerir.

Her alan referansında tüm yol türlerine izin verilmez. Örneğin, bazı alan referansları yalnızca metin tabanlı yapılandırılmış veri alanlarına veya metin modülü alanlarına giden yollara izin verir. Metin tabanlı yapılandırılmış alanlar; dize, yerelleştirilmiş dize, tarih veya para türünde yapılandırılmış veri alanlarıdır.

Liste, bir yedek mantığı uygulamak için kullanılabilir. Diğer bir deyişle, listedeki ilk yol boş bir alana çözümlenirse sonraki yol değerlendirilir. Yedek mantığı temel olarak metin tabanlı yapılandırılmış veri alanlarını veya metin modülü alanlarını hedefler. Farklı alan türlerini aynı listede birlikte kullanmayın. Yedek mantığını dikkatli bir şekilde kullanın ve yalnızca bazı nesnelerde bulunup diğerlerinde bulunmayan tutarlı bir alan modeli beklediğiniz belirli durumlarda kullanın. Ayrı kullanım alanları için ayrı sınıflar oluşturmak çoğu zaman daha kolaydır.

Bir alan referans listesindeki tüm yollar boş alanlara çözümlenirse alan referansını kullanan öğe gösterilmez. Alan referansını kullanan öğenin her zaman mevcut olmasını istiyorsanız en az bir yolun boş olmadığından emin olun. Bazı alanlar yalnızca boşluklu dizelere izin verse bile, boş değeri temsil etmesi için bir alanı "-" gibi özel bir karaktere ayarlamanızı öneririz.

Bir listede yer alan bir alana referans vermek için listede alanın dizinini veya çoğu durumda bir referans kimliği kullanabilirsiniz. Listedeki kimliğe göre referans verilebilen öğeler .id alanına sahiptir. Mümkün olduğunda listedeki alanın dizini üzerinde bir referans kimliği kullanmanızı öneririz.

Aşağıda, bir listede yer alan alanlara nasıl referans verileceğine dair bir örnek verilmiştir.

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

Bu durumda, kartın ayrıntılar bölümündeki ilk öğe, nesnede tanımlanan ikinci resimdir. Bununla birlikte, kartın ayrıntılar bölümündeki ikinci öğe, nesnede tanımlanan ilk resimdir.

Varsayılan şablon

Android

Varsayılan şablon öğeleri
  1. class.logo
  2. class.localizedIssuerName
    veya class.issuerName
  3. Kart başlığını görüntüle
  4. KALKIŞ veya GEÇERLİLİK TARİHİ:
  5. object.ticketLeg.departureDateTime (tarih ve saat)
    veya object.validTimeInterval.start.date
  6. GELİŞME TARİHİNE KADAR veya GEÇERLİLİKTEN SONRAKİ TARİH
  7. object.ticketLeg.arrivalDateTime (yalnızca süre)
    veya object.validTimeInterval.end.date
  8. Yolcu
  9. object.passengerNames
  10. CARRIAGE veya class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH veya class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT veya class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    veya object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.type ve object.barcode.value
    veya object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    veya class.hexBackgroundColor
  19. Çok ayaklı seyahat planı
  20. BİLET NUMARASI veya class.customTicketNumberLabel
  21. object.ticketNumber
  22. BİLET DURUMU
  23. object.ticketStatus veya object.customTicketStatus
  24. KALKIŞ
  25. object.ticketLeg.departureDateTime
  26. Gelişen
  27. object.ticketLeg.arrivalDateTime
  28. FARE NAME veya class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. PLATFORM veya class.customPlatformLabel
  31. object.ticketLeg.platform
  32. BÖLGE veya class.customZoneLabel
  33. object.ticketLeg.zone
  34. FARE CLASS veya class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    veya object.ticketLeg.ticketSeat.customFareClass
  36. CONCESSION CATEGORY
    veya class.customConcessionCategoryLabel
  37. object.concessionCategory
    veya object.customConcessionCategory
  38. ROTA KISITLAMALARI
    veya class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. ROTA KISITLAMALARI AYRINTILARI
    veya class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. ZAMAN KISITLAMALARI
    veya class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. DİĞER KISITLAMALAR
    veya class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. RECEIPT NUMBER
    veya class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. SATIN ALINDIĞI TARİH
  49. object.purchaseDetails.purchaseDateTime
  50. HESAP KİMLİĞİ
  51. object.purchaseDetails.accountId
  52. ONAY KODU
    veya class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. KARAKTER DEĞERİ veya class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE veya class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. İNDİRİM MESAJI
    veya 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

Varsayılan şablon öğeleri
  1. class.logo
  2. class.localizedIssuerName
    veya class.issuerName
  3. Kart başlığını görüntüle
  4. KALKIŞ veya GEÇERLİLİK TARİHİ:
  5. object.ticketLeg.departureDateTime (tarih ve saat)
    veya object.validTimeInterval.start.date
  6. GELİŞME TARİHİNE KADAR veya GEÇERLİLİKTEN SONRAKİ TARİH
  7. object.ticketLeg.arrivalDateTime (yalnızca süre)
    veya object.validTimeInterval.end.date
  8. Yolcu
  9. object.passengerNames
  10. CARRIAGE veya class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH veya class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT veya class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    veya object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.type ve object.barcode.value
    veya object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    veya class.hexBackgroundColor
  19. Çok ayaklı seyahat planı
  20. BİLET NUMARASI veya class.customTicketNumberLabel
  21. object.ticketNumber
  22. BİLET DURUMU
  23. object.ticketStatus veya object.customTicketStatus
  24. KALKIŞ
  25. object.ticketLeg.departureDateTime
  26. Gelişen
  27. object.ticketLeg.arrivalDateTime
  28. FARE NAME veya class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. PLATFORM veya class.customPlatformLabel
  31. object.ticketLeg.platform
  32. BÖLGE veya class.customZoneLabel
  33. object.ticketLeg.zone
  34. FARE CLASS veya class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    veya object.ticketLeg.ticketSeat.customFareClass
  36. CONCESSION CATEGORY
    veya class.customConcessionCategoryLabel
  37. object.concessionCategory
    veya object.customConcessionCategory
  38. ROTA KISITLAMALARI
    veya class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. ROTA KISITLAMALARI AYRINTILARI
    veya class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. ZAMAN KISITLAMALARI
    veya class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. DİĞER KISITLAMALAR
    veya class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. RECEIPT NUMBER
    veya class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. SATIN ALINDIĞI TARİH
  49. object.purchaseDetails.purchaseDateTime
  50. HESAP KİMLİĞİ
  51. object.purchaseDetails.accountId
  52. ONAY KODU
    veya class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. KARAKTER DEĞERİ veya class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE veya class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. İNDİRİM MESAJI
    veya 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

Resim modülü alanlarında, sınıftan yalnızca bir tane resim modülü alanı ve nesneden yalnızca bir tane resim modülü alanı gösteririz. İki düzeyde de birden fazla resim modülü alanına ihtiyacınız varsa varsayılan şablonu geçersiz kılın.

Metin modülü alanlarında, sınıftan yalnızca maksimum 20 metin modülü alanı ve nesneden en fazla 20 metin modülü alanı gösteririz. Alanlar, dizide tanımlandıkları sırayla görüntülenir. Her iki düzeyde de 20'den fazla metin modülü alanına ihtiyacınız varsa varsayılan şablonu geçersiz kılın.

Mesajlar için sınıftan en fazla 20 ve nesneden gelen en fazla 20 mesaj gösterilir. İletilerin sırasını garanti etmiyoruz. Her iki düzeyde de 20'den fazla mesaja veya siparişler için garantiye ihtiyacınız varsa varsayılan şablonu geçersiz kılın.

Bağlantılar modülü alanı için tanımlayabileceğiniz URI sayısıyla ilgili bir sınır yoktur. URI'ler her seviye (sınıf veya nesne) için aşağıdaki sıraya göre gruplanmış şekilde gösterilir:

  1. Harita koordinatları
  2. Telefon numaraları
  3. E-posta adresleri
  4. Web sayfaları

Her grup için, URI'lar dizide tanımlandıklarıyla aynı sırada görüntülenir. Farklı bir sıralamaya ihtiyacınız varsa varsayılan şablonu geçersiz kılın.

Varsayılan liste şablonu öğeleri
  1. (object.ticketLeg.originName
    ve object.ticketLeg.destinationName)
    veya (object.ticketLeg.originStationCode
    ve object.ticketLeg.destinationStationCode)
    veya object.ticketLeg.originName
  2. object.ticketLeg.departureDateTime
    veya object.validTimeInterval.end.date
  3. class.logo
  4. object.hexBackgroundColor
    veya class.hexBackgroundColor
  5. <# kart> (gruplandırılmış)