লয়ালটি টেমপ্লেট

লয়ালটি পাসে টেমপ্লেট রেন্ডারিংয়ের সুবিধা আছে। কোনও টেমপ্লেট নির্দিষ্ট না করা হলে, ডিফল্ট টেমপ্লেট ব্যবহার করা হয়।

টেমপ্লেটের সংজ্ঞা

ক্লাস লেভেলে পাস টেমপ্লেট নির্ধারণ করা হয় এবং ক্লাসের সাথে যুক্ত যেকোনও অবজেক্ট দেখানোর জন্য এটি ব্যবহার করা হয়। টেমপ্লেটটি পাসটির বিভিন্ন বিভাগে কোন কোন ফিল্ড দেখাতে হবে তা নির্ধারণ করে।

টেমপ্লেটটি নিম্নলিখিত বিভাগে বিভক্ত:

Android

পাস টেমপ্লেট লেআউট বিভাগ ও পজিশনের ওভারভিউ

ওয়েব

পাস টেমপ্লেট লেআউট বিভাগ ও পজিশনের ওভারভিউ

কার্ডের শিরোনাম

Android

কার্ডের শীর্ষক লেআউট এলিমেন্ট ও ফিল্ডের অবস্থান ডিফল্ট কার্ডের শীর্ষক
  1. class.programLogo
  2. class.localizedIssuerName
    বা class.issuerName
  3. class.localizedProgramName
    বা class.programName
  4. class.hexBackgroundColor

চওড়া-লোগো কার্ডের শীর্ষক
  1. class.wideProgramLogo
  2. class.localizedProgramName
    বা class.programName
  3. class.hexBackgroundColor

ওয়েব

কার্ডের শীর্ষক লেআউট এলিমেন্ট ও ফিল্ডের অবস্থান ডিফল্ট কার্ডের শীর্ষক
  1. class.programLogo
  2. class.localizedIssuerName
    বা class.issuerName
  3. class.localizedProgramName
    বা class.programName
  4. class.hexBackgroundColor

চওড়া-লোগো কার্ডের শীর্ষক
  1. class.wideProgramLogo
  2. class.localizedProgramName
    বা class.programName
  3. class.hexBackgroundColor

কার্ডের শীর্ষক বিভাগে লোগো, ইস্যুকারীর নাম এবং প্রোগ্রামের শীর্ষক দেখানো হয়। সেগুলি পূরণ করার জন্য ব্যবহৃত ফিল্ড রেফারেন্স বা তাদের অবস্থান পরিবর্তন করা যাবে না।

প্রশস্ত লোগো ফিল্ড সেট করা থাকলে, Android ডিভাইসে ডিফল্ট টেমপ্লেট হেডারে লোগো এবং ইস্যুকারীর নাম প্রশস্ত লোগো দিয়ে প্রতিস্থাপন করা হয়।

আপনার পাসে ছবি যাতে সবচেয়ে ভালোভাবে দেখানো যায় তার জন্য আপনার চওড়া হেডার লোগো তৈরি করার সময় চওড়া লোগো ছবির নির্দেশিকা অনুসরণ করুন।

কার্ড টেমপ্লেট

Android

কার্ড টেমপ্লেটের সারি লেআউট এলিমেন্ট ও ফিল্ডের অবস্থান

ওয়েব

কার্ড টেমপ্লেটের সারি লেআউট এলিমেন্ট ও ফিল্ডের অবস্থান

কার্ড টেমপ্লেট বিভাগটি অতিরিক্ত সারি দেখানোর জন্য ব্যবহার করা হয়। এইসব সারিতে টেক্সট-ভিত্তিক স্ট্রাকচার্ড ডেটা ফিল্ড বা টেক্সট মডিউল ফিল্ড থাকতে পারে।

আপনি সারির সংখ্যা নির্দিষ্ট করতে পারেন যা class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] তালিকায় অবজেক্টের সংখ্যা নির্ধারণ করে। তালিকায় অন্তত একটি এলিমেন্ট থাকতে হবে এবং আমরা সর্বাধিক দুটি এলিমেন্ট ব্যবহার করার সাজেশন দিই। প্রতিটি এলিমেন্টকে নিম্নলিখিত ধরনের মধ্যে একটি হতে হবে:

  • oneItem, যা একটি আইটেম গ্রহণ করে:
    • item
  • twoItems, যা দুটি আইটেম গ্রহণ করে:
    • startItem
    • endItem
  • threeItems, যা তিনটি আইটেম গ্রহণ করে:
    • startItem
    • middleItem
    • endItem

প্রতিটি আইটেমকে একটি ফিল্ড সিলেক্টর (.firstValue), দুটি ফিল্ড সিলেক্টর (.firstValue এবং .secondValue) অথবা আগে থেকে নির্ধারিত আইটেম (.predefinedItem) হিসেবে উল্লেখ করা যেতে পারে। বেছে নেওয়া ফিল্ডের ভ্যালু এবং তাদের সংশ্লিষ্ট লেবেল, দুটিই দেখানো হয়। আপনি দুটি ফিল্ড সিলেক্টর নির্ধারণ করলে, বেছে নেওয়া ফিল্ডের ভ্যালু "/" বিভাজক দিয়ে দেখানো হয়। বেছে নেওয়া ফিল্ডের লেবেলের ক্ষেত্রেও একই নিয়ম প্রযোজ্য। আরও জটিল রেন্ডারিং সংজ্ঞায়িত করতে পূর্বনির্ধারিত আইটেম ব্যবহার করা হয়।

নিম্নলিখিত কোড স্যাম্পল থেকে জানা যায় যে কীভাবে কার্ড টেমপ্লেট কার্ড রো সেকশন ওভাররাইড করে দুটি রো নির্দিষ্ট করা যায়। প্রতিটি সারিতে তিনটি আইটেম থাকে, যার প্রতিটি ছয়টি ক্লাস-লেভেল 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']"
                            }]
                        }
                    },
                }
            }]
        }
    }
}
    

জাভা

// Rest of class
  .setTextModulesData((new ArrayList<TextModuleData>() {
    {
      add((new TextModuleData()).setHeader("Label 1")
        .setBody("Some info 1")
        .setId("myfield1"));
      add((new TextModuleData()).setHeader("Label 2")
        .setBody("Some info 1")
        .setId("myfield2"));
      add((new TextModuleData()).setHeader("Label 3")
        .setBody("Some info 3")
        .setId("myfield3"));
      add((new TextModuleData()).setHeader("Label 4")
        .setBody("Some info 4")
        .setId("myfield4"));
      add((new TextModuleData()).setHeader("Label 5")
        .setBody("Some info 5")
        .setId("myfield5"));
      add((new TextModuleData()).setHeader("Label 6")
        .setBody("Some info 5")
        .setId("myfield6"));
    }
  }))
  .setClassTemplateInfo((new ClassTemplateInfo())
    .setCardTemplateOverride((new CardTemplateOverride())
      .setCardRowTemplateInfos(new ArrayList<CardRowTemplateInfo>() {
        {
          add((new CardRowTemplateInfo()).setThreeItems((new CardRowThreeItems())
            .setStartItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield1']"));
              }
            })))
            .setMiddleItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield2']"));
              }
            })))
            .setEndItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield3']"));
              }
            })))
          ));
          add((new CardRowTemplateInfo()).setThreeItems((new CardRowThreeItems())
            .setStartItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield4']"));
              }
            })))
            .setMiddleItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield5']"));
              }
            })))
            .setEndItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
              {
                add((new FieldReference()).setFieldPath("class.textModulesData['myfield6']"));
              }
            })))
          ));
          }
  })))
    

PHP

// Rest of class
    $textModulesData1 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData1->setBody("Some info 1");
    $textModulesData1->setHeader("Label 1");
    $textModulesData1->setId("myfield1");

    $textModulesData2 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData2->setBody("Some info 2");
    $textModulesData2->setHeader("Label 2");
    $textModulesData2->setId("myfield2");

    $textModulesData3 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData3->setBody("Some info 3");
    $textModulesData3->setHeader("Label 3");
    $textModulesData3->setId("myfield3");

    $textModulesData4 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData4->setBody("Some info 4");
    $textModulesData4->setHeader("Label 4");
    $textModulesData4->setId("myfield4");

    $textModulesData5 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData5->setBody("Some info 5");
    $textModulesData5->setHeader("Label 5");
    $textModulesData5->setId("myfield5");

    $textModulesData6 = new Google_Service_Walletobjects_TextModuleData();
    $textModulesData6->setBody("Some info 6");
    $textModulesData6->setHeader("Label 6");
    $textModulesData6->setId("myfield6");

    $textModulesDatas = array($textModulesData1, $textModulesData2, $textModulesData3,
                  $textModulesData4, $textModulesData5, $textModulesData6);

    $startItemField = new Google_Service_Walletobjects_FieldReference();
    $startItemField->setFieldPath("class.textModulesData['myfield1']");

    $startItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $startItemFirstValue->setFields(array($startItemField));

    $startItem = new Google_Service_Walletobjects_TemplateItem();
    $startItem->setFirstValue($startItemFirstValue);

    $middleItemField = new Google_Service_Walletobjects_FieldReference();
    $middleItemField->setFieldPath("class.textModulesData['myfield2']");

    $middleItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $middleItemFirstValue->setFields(array($middleItemField));

    $middleItem = new Google_Service_Walletobjects_TemplateItem();
    $middleItem->setFirstValue($middleItemFirstValue);

    $endItemField = new Google_Service_Walletobjects_FieldReference();
    $endItemField->setFieldPath("class.textModulesData['myfield3']");

    $endItemFirstValue = new Google_Service_Walletobjects_FieldSelector();
    $endItemFirstValue->setFields(array($endItemField));

    $endItem = new Google_Service_Walletobjects_TemplateItem();
    $endItem->setFirstValue($endItemFirstValue);

    $cardRowTemplate = new Google_Service_Walletobjects_CardRowThreeItems();
    $cardRowTemplate->setStartItem($startItem);
    $cardRowTemplate->setMiddleItem($middleItem);
    $cardRowTemplate->setEndItem($endItem);

    $cardRowTemplateInfo1 = new Google_Service_Walletobjects_CardRowTemplateInfo();
    $cardRowTemplateInfo1->setThreeItems($cardRowTemplate);

    $startItemField2 = new Google_Service_Walletobjects_FieldReference();
    $startItemField2->setFieldPath("class.textModulesData['myfield4']");

    $startItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $startItemFirstValue2->setFields(array($startItemField2));

    $startItem2 = new Google_Service_Walletobjects_TemplateItem();
    $startItem2->setFirstValue($startItemFirstValue2);

    $middleItemField2 = new Google_Service_Walletobjects_FieldReference();
    $middleItemField2->setFieldPath("class.textModulesData['myfield5']");

    $middleItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $middleItemFirstValue2->setFields(array($middleItemField2));

    $middleItem2 = new Google_Service_Walletobjects_TemplateItem();
    $middleItem2->setFirstValue($middleItemFirstValue2);

    $endItemField2 = new Google_Service_Walletobjects_FieldReference();
    $endItemField2->setFieldPath("class.textModulesData['myfield6']");

    $endItemFirstValue2 = new Google_Service_Walletobjects_FieldSelector();
    $endItemFirstValue2->setFields(array($endItemField2));

    $endItem2 = new Google_Service_Walletobjects_TemplateItem();
    $endItem2->setFirstValue($endItemFirstValue2);

    $cardRowTemplate2 = new Google_Service_Walletobjects_CardRowThreeItems();
    $cardRowTemplate2->setStartItem($startItem2);
    $cardRowTemplate2->setMiddleItem($middleItem2);
    $cardRowTemplate2->setEndItem($endItem2);

    $cardRowTemplateInfo2 = new Google_Service_Walletobjects_CardRowTemplateInfo();
    $cardRowTemplateInfo2->setThreeItems($cardRowTemplate2);

    $cardTemplateOverride = new Google_Service_Walletobjects_CardTemplateOverride();
    $cardTemplateOverride->setCardRowTemplateInfos(array($cardRowTemplateInfo1,
                  $cardRowTemplateInfo2));

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setCardTemplateOverride($cardTemplateOverride);

    $payload->setTextModulesData($textModulesDatas);
    $payload->setClassTemplateInfo($classTemplateInfo);
    

কোডটি নিম্নলিখিত কোড টেমপ্লেট বিভাগের ফর্ম্যাট সহ একটি পাস তৈরি করে:

লেবেল ওভাররাইডের উদাহরণ।

কোনও আইটেম খালি থাকলে, সেটি দেখানো হয় না। আরও জানতে, ফিল্ড রেফারেন্স দেখুন। কোনও সারির সব আইটেম খালি থাকলে, সেই সারি দেখানো হয় না। কোনও সারির সব আইটেম খালি না থাকলে, খালি নয় এমন আইটেমগুলি নতুন করে সাজানো হয় এবং কম আইটেম সহ একটি সারি হিসেবে দেখানো হয়।

আপনি কার্ড টেমপ্লেট ওভাররাইড না করলে, ডিফল্ট সারির সংখ্যা, ডিফল্ট আইটেমের সংখ্যা এবং ডিফল্ট ফিল্ড রেফারেন্স ব্যবহার করা হয়। আরও বিবরণের জন্য, ডিফল্ট টেমপ্লেট দেখুন।

আপনি অনেক বড় ছবি সংজ্ঞায়িত করার পরে, cardRowTemplateInfos তালিকায় একাধিক সারি থাকলে, এটি প্রথম সারির পরে বা শুধুমাত্র একটি সারি থাকলে, সারির উপরে দেখা যেতে পারে।

কার্ডের বারকোড

Android

কার্ডের বারকোড লেআউট এলিমেন্ট ও পজিশন
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type এবং object.barcode.value
    অথবা object.accountId
  4. object.barcode.alternateText
    বা object.accountId
    বা object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail
  6. object.heroImage
    বা class.heroImage

ওয়েব

কার্ডের বারকোড লেআউট এলিমেন্ট ও পজিশন
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type এবং object.barcode.value
    অথবা object.accountId
  4. object.barcode.alternateText
    বা object.accountId
    বা object.barcode.value
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

কার্ডের বারকোড বিভাগটি বারকোডের আগে এবং পরে অতিরিক্ত টেক্সট বা ছবি দেখানোর জন্য ব্যবহার করা হয়। এই বিভাগের কোনও ফিল্ড পূরণ করতে হবে না।

তিনটি ফিল্ড সিলেক্টর আছে যেগুলি বারকোডের আগে দুটি পাশাপাশি ফিল্ড এবং পরে একটি ফিল্ড নির্ধারণ করতে ব্যবহার করা যেতে পারে। এগুলি কোনও লেবেল ছাড়াই দেখানো হয় এবং এগুলি টেক্সট-ভিত্তিক স্ট্রাকচার্ড ডেটা ফিল্ড, টেক্সট মডিউল ফিল্ড বা ছবি মডিউল ফিল্ড হতে পারে। আপনি ছবি ব্যবহার করলে, সেগুলি ব্র্যান্ড গাইডলাইন মেনে চলতে হবে।

বারকোড ধরন ও ভ্যালু দ্বারা নির্ধারিত হয়। কাজ করে এমন বারকোডের ধরনের তালিকা দেখতে, রেফারেন্স দেখুন। এছাড়াও, বারকোডের ঠিক নিচে একটি টেক্সট দেখানো হতে পারে। এই টেক্সট বারকোড স্ক্যান করা আরও সহজ করে তুলতে পারে, অন্যান্য ব্যবহারের মধ্যে।

নিচের কোড স্যাম্পেল থেকে জানতে পারবেন যে বারকোডের উপরে ছবি দেখানোর জন্য পাসের বারকোড বিভাগ কীভাবে ওভাররাইড করতে হয়:

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"
                        }
                    ]
                }
            }
        }
    }
}
    

জাভা

//... rest of class
  .setImageModulesData((new ArrayList<ImageModuleData>() {
    {
      add((new ImageModuleData())
        .setId("myimage")
        .setMainImage((new Image()).setSourceUri((new ImageUri()).setDescription("Coffee beans")
          .setUri("http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg"))));
        }
      }))
      .setClassTemplateInfo((new ClassTemplateInfo())
        .setCardBarcodeSectionDetails((new CardBarcodeSectionDetails())
          .setFirstTopDetail((new BarcodeSectionDetail())
            .setFieldSelector((new FieldSelector())
              .setFields((new ArrayList<FieldReference>(){
                {
                  add((new FieldReference()).setFieldPath("class.imageModulesData['myimage'].mainImage"));
                }
            })))))
      }
    

PHP

//... rest of class
    $imageUri = new Google_Service_Walletobjects_ImageUri();
    $imageUri->setUri("https://farm8.staticflickr.com/7340/11177041185_a61a7f2139_o.jpg");
    $imageUri->setDescription("Baconrista flights image");
    $image = new Google_Service_Walletobjects_Image();
    $image->setSourceUri($imageUri);
    $imageModulesData = new Google_Service_Walletobjects_ImageModuleData();
    $imageModulesData->setMainImage($image);
            $imageModulesData->setId("myimage");

    $cardBarcodeFieldReference = new Google_Service_Walletobjects_FieldReference();
    $cardBarcodeFieldReference->setFieldPath("class.imageModulesData['myimage'].mainImage");

    $cardBarcodeFieldSelector = new Google_Service_Walletobjects_FieldSelector();
    $cardBarcodeFieldSelector->setFields(array($cardBarcodeFieldReference));

    $cardBarcodeDetail = new Google_Service_Walletobjects_BarcodeSectionDetail();
    $cardBarcodeDetail->setFieldSelector($cardBarcodeFieldSelector);

    $cardBarcodeSectionDetails = new Google_Service_Walletobjects_CardBarcodeSectionDetails();
    $cardBarcodeSectionDetails->setFirstTopDetail($cardBarcodeDetail);

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setCardBarcodeSectionDetails($cardBarcodeSectionDetails);

    $payload->setClassTemplateInfo($classTemplateInfo);
            $payload->setImageModuleData($imageModulesData);
    

কোডটি নিম্নলিখিত বারকোড বিভাগ ফর্ম্যাট সহ একটি পাস তৈরি করে:

কার্ড বারকোড ওভাররাইডের উদাহরণ।

আপনি বারকোড বিভাগ ওভাররাইড না করলে, ডিফল্ট বারকোড ফিল্ড ব্যবহার করা হয়। আরও তথ্যের জন্য, ডিফল্ট টেমপ্লেট দেখুন।

নিচের বিভাগ

Android

বিবরণ টেমপ্লেটের নিচের বিভাগ ও আইটেম
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

ওয়েব

বিবরণ টেমপ্লেটের নিচের বিভাগ ও আইটেম
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[3].item
  • ...

নিচের বিভাগটি হল আইটেমের তালিকা class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]। আইটেমে যেকোনও ধরনের স্ট্রাকচার্ড ডেটা ফিল্ড, টেক্সট মডিউল ফিল্ড, লিঙ্ক মডিউল ফিল্ড, ছবি মডিউল ফিল্ড বা মেসেজ থাকতে পারে।

প্রতিটি আইটেমকে একটি ফিল্ড সিলেক্টর (.firstValue), দুটি ফিল্ড সিলেক্টর (.firstValue এবং .secondValue) অথবা আগে থেকে নির্ধারিত আইটেম (.predefinedItem) হিসেবে সংজ্ঞায়িত করা যেতে পারে। বেছে নেওয়া ফিল্ডের মান এবং তাদের সংশ্লিষ্ট লেবেল, দুটিই দেখানো হয়। আপনি দুটি ফিল্ড সিলেক্টর নির্ধারণ করলে, বেছে নেওয়া ফিল্ডের ভ্যালু "/" বিভাজক দিয়ে দেখানো হয়। বেছে নেওয়া ফিল্ডের লেবেলের ক্ষেত্রেও একই কথা প্রযোজ্য। আরও জটিল রেন্ডারিং সংজ্ঞায়িত করতে পূর্বনির্ধারিত আইটেম ব্যবহার করা হয়। ইমেজ মডিউল ফিল্ড লেবেল ছাড়াই সম্পূর্ণ-প্রস্থে রেন্ডার করা হয়।

নিম্নলিখিত কোড স্যাম্পেল থেকে জানা যায় যে কীভাবে পাসের নিচের অংশ ওভাররাইড করে লেবেল সহ একটি 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
    

জাভা

 //... rest of class
  .setLinksModuleData((new ArrayList<LinksModuleData>() {
    {
      add((new LinksModuleData()).setDescription("Nearby Locations")
        .setUri("http://maps.google.com/")
        .setId("mylink"));
      }))
      .setClassTemplateInfo((new ClassTemplateInfo())
        .setDetailsTemplateOverride((new DetailsTemplateOverride())
          .setDetailsItemInfos(new ArrayList<DetailsItemInfo>(){
            {
              add((new DetailsItemInfo())
                .setItem((new TemplateItem()).setFirstValue((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
                  {
                    add((new FieldReference()).setFieldPath("class.linksModuleData.uris['mylink']"));
                  }
                }))));
              }
            }))
//... rest of class
    

PHP

    //... rest of class building
    $locationUri = new Google_Service_Walletobjects_Uri();
    $locationUri->setUri("http://maps.google.com/");
    $locationUri->setDescription("Nearby Locations");
    $locationUri->setId("mylink");

    $linksModuleData = new Google_Service_Walletobjects_LinksModuleData();
    $linksModuleData->setUris(array($locationUri));

    $detailItemFieldReference = new Google_Service_Walletobjects_FieldReference();
    $detailItemFieldReference->setFieldPath("class.linksModuleData.uris['mylink']");
    $detailItemFieldSelector = new Google_Service_Walletobjects_FieldSelector();
    $detailItemFieldSelector->setFields(array($detailItemFieldReference));

    $detailItem = new Google_Service_Walletobjects_TemplateItem();
    $detailItem->setFirstValue($detailItemFieldSelector);

    $detailsItemInfo = new Google_Service_Walletobjects_DetailsItemInfo();
    $detailsItemInfo->setItem($detailItem);

    $cardDetailsTemplateOverride = new Google_Service_Walletobjects_DetailsTemplateOverride();
    $cardDetailsTemplateOverride->setDetailsItemInfos(array($detailsItemInfo));

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setDetailsTemplateOverride($cardDetailsTemplateOverride);

    $payload->setClassTemplateInfo($classTemplateInfo);
    $payload->setLinksModuleData($linksModuleData);
    //... rest of class
    

কোডটি নিম্নলিখিত নিচের বিভাগের ফর্ম্যাট সহ একটি পাস তৈরি করে:

নিচের বিভাগ ওভাররাইড করার
                                                                             উদাহরণ।

কোনও আইটেম খালি থাকলে, সেটি দেখানো হয় না। আরও জানতে, ফিল্ড রেফারেন্স দেখুন।

আপনি নিচের বিভাগ ওভাররাইড না করলে, ডিফল্ট ক্রমে রেফারেন্স ফিল্ডের ডিফল্ট তালিকা দেখানো হয়। আরও তথ্যের জন্য, ডিফল্ট টেমপ্লেট দেখুন।

তালিকার টেমপ্লেট

টেমপ্লেট এলিমেন্টের তালিকা তৈরি করা হচ্ছে
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.programLogo
  4. class.hexBackgroundColor

Google Wallet অ্যাপের "পাস" ভিউতে কোন ফিল্ড দেখানো হবে তা বেছে নিতে তালিকা টেমপ্লেট বিভাগ ব্যবহার করা হয়। পাসটি তালিকায় লোগো, ব্যাকগ্রাউন্ডের রঙ এবং তিনটি সারির মাধ্যমে দেখানো হয়।

নিম্নলিখিত কোড স্যাম্পেল থেকে জানা যায় যে কীভাবে একটি পাসের তালিকা টেমপ্লেট ওভাররাইড করে তালিকা টেমপ্লেটের প্রথম সারিতে একটি পাসের অবজেক্টের মেয়াদ শেষ হওয়ার তারিখের ফিল্ড দেখানো যায়:

Python

#... rest of class definition
   "classTemplateInfo": {
        "listTemplateOverride":{
            "firstRowOption": {
                "fieldOption":{
                    "fields": [{
                        "fieldPath": "object.validTimeInterval.end"
                    }]
                }
            }
        }
   }
}
    

জাভা

//... 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
    

কোডটি নিম্নলিখিত তালিকা টেমপ্লেট রেন্ডিশন সহ একটি পাস তৈরি করে:

তালিকা ওভাররাইড করার
                                                                           উদাহরণ।

তিনটি সারি ফিল্ড সিলেক্টরের মাধ্যমে সংজ্ঞায়িত করা যেতে পারে। ফিল্ডগুলি কোনও লেবেল ছাড়াই দেখানো হয়।

লেবেল

সব স্ট্রাকচার্ড ডেটা ফিল্ডে Google-এর দেওয়া লেবেল থাকে। Google-এর দায়িত্ব হল এইসব লেবেলের প্রত্যেকটির জন্য কাজ করে এমন সব ভাষায় অনুবাদ প্রদান করা।

আপনি class.custom<name_of_the_field>Label ফিল্ডের মধ্যে একটি ব্যবহার করে এইসব লেবেলের মধ্যে কিছু কাস্টমাইজ করতে পারবেন। আপনি কোনও লেবেল কাস্টমাইজ করলে, আপনি যে সব ভাষায় সেটি দেখাতে চান, সেই সব ভাষায় ওই নির্দিষ্ট লেবেলের অনুবাদ দেওয়ার দায়িত্ব আপনারই।

ফিল্ড রেফারেন্স

টেমপ্লেটের বিভিন্ন অংশে ফিল্ড রেফারেন্স ব্যবহার করা হয়, যার ফর্ম হল class.classTemplateInfo.*.fields[]। ফিল্ড রেফারেন্সে স্ট্রাকচার্ড ডেটা ফিল্ড, টেক্সট মডিউল ফিল্ড, লিঙ্ক মডিউল ফিল্ড, ইমেজ মডিউল ফিল্ড বা মেসেজের পাথের তালিকা থাকে।

প্রতিটি ফিল্ড রেফারেন্সে সব ধরনের পাথ অনুমোদিত নয়। যেমন, কিছু ফিল্ড রেফারেন্স শুধুমাত্র টেক্সট-ভিত্তিক স্ট্রাকচার্ড ডেটা ফিল্ড বা টেক্সট মডিউল ফিল্ডের পাথকে অনুমতি দেয়। টেক্সট-ভিত্তিক স্ট্রাকচার্ড ফিল্ড হল স্ট্রিং, লোকালাইজড স্ট্রিং, তারিখ বা টাকার মতো স্ট্রাকচার্ড ডেটা ফিল্ড।

ফলব্যাক লজিক প্রয়োগ করার জন্য তালিকাটি ব্যবহার করা যেতে পারে। এর অর্থ হল, তালিকার প্রথম পাথটি যদি একটি খালি ফিল্ডে সমাধান করে, তাহলে পরবর্তী পাথটি মূল্যায়ন করা হয়। ফলব্যাক লজিক মূলত টেক্সট-ভিত্তিক স্ট্রাকচার্ড ডেটা ফিল্ড বা টেক্সট মডিউল ফিল্ডকে টার্গেট করে। একই তালিকায় বিভিন্ন ধরনের ফিল্ড মেশাবেন না। ফলব্যাক লজিক সতর্কতার সাথে এবং শুধুমাত্র নির্দিষ্ট পরিস্থিতিতে ব্যবহার করুন যখন আপনি কিছু অবজেক্টে বিদ্যমান ফিল্ডের একটি সামঞ্জস্যপূর্ণ প্যাটার্ন আশা করেন কিন্তু অন্যদের ক্ষেত্রে নয়। বেশিরভাগ ক্ষেত্রে, আলাদা আলাদা ব্যবহারের জন্য আলাদা আলাদা ক্লাস তৈরি করা সহজ।

কোনও ফিল্ড রেফারেন্স তালিকার সব পাথ যদি খালি ফিল্ডে গিয়ে শেষ হয়, তাহলে যে আইটেমটি ফিল্ড রেফারেন্স ব্যবহার করে সেটি দেখানো হয় না। আপনি যদি চান যে ফিল্ড রেফারেন্স ব্যবহার করে এমন আইটেমটি সবসময় উপস্থিত থাকুক, তাহলে নিশ্চিত করুন যে অন্তত একটি পাথ খালি নেই। আমরা সাজেস্ট করি যে আপনি নাল ভ্যালু দেখানোর জন্য কোনও ফিল্ডকে বিশেষ অক্ষর হিসেবে সেট করুন, যেমন ‘-’, এমনকি কিছু ফিল্ডে শুধু স্পেস সহ স্ট্রিংয়ের অনুমতি থাকলেও।

কোনও তালিকায় থাকা ফিল্ডের রেফারেন্স দিতে, আপনি তালিকায় ফিল্ডের ইন্ডেক্স ব্যবহার করতে পারেন অথবা, বেশিরভাগ ক্ষেত্রে, আপনি রেফারেন্স আইডি ব্যবহার করতে পারেন। আইডি দ্বারা রেফারেন্স করা যেতে পারে এমন তালিকার আইটেমে .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]

এই ক্ষেত্রে, পাসের বিবরণ বিভাগের প্রথম আইটেমটি হল অবজেক্টে ঘোষণা করা দ্বিতীয় ছবি। পাসের বিবরণ বিভাগের দ্বিতীয় আইটেমটি হল অবজেক্টে ঘোষণা করা প্রথম ছবি।

ডিফল্ট টেমপ্লেট

Android

ডিফল্ট পাস টেমপ্লেট লেআউট এলিমেন্ট ও পজিশন
  1. class.programLogo
  2. class.localizedIssuerName
    বা class.issuerName
  3. class.localizedProgramName
    বা class.programName
  4. object.barcode.type এবং object.barcode.value
    অথবা object.accountId
  5. object.barcode.alternateText
    বা object.accountId
    বা object.barcode.value
  6. পয়েন্ট
    বা object.loyaltyPoints.localizedLabel
    বা object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. পুরস্কার
    বা object.secondaryLoyaltyPoints.localizedLabel
    বা object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    বা class.heroImage
  12. মেম্বারের নাম
    বা class.localizedAccountNameLabel
    বা class.accountNameLabel
  13. object.accountName
  14. মেম্বার আইডি
    বা class.localizedAccountIdLabel
    বা class.accountIdLabel
  15. object.accountId
  16. পুরস্কারের টিয়ার
    বা class.localizedRewardsTierLabel
    বা class.rewardsTierLabel
  17. class.localizedRewardsTier
    বা class.rewardsTier
  18. সেকেন্ডারি পুরস্কারের টিয়ার
    বা class.localizedSecondaryRewardsTierLabel
    বা class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    বা class.secondaryRewardsTier
  20. class.messages[].header
  21. class.messages[].body
  22. object.messages[].header
  23. object.messages[].body
  24. class.textModulesData[0..9].header
  25. class.textModulesData[0..9].body
  26. object.textModulesData[0..9].header
  27. object.textModulesData[0..9].body
  28. class.linksModuleData.uris[].description
  29. object.linksModuleData.uris[].description
  30. class.homepageUri

ওয়েব

ডিফল্ট পাস টেমপ্লেট লেআউট এলিমেন্ট ও পজিশন
  1. class.programLogo
  2. class.localizedIssuerName
    বা class.issuerName
  3. class.localizedProgramName
    বা class.programName
  4. object.barcode.type এবং object.barcode.value
    অথবা object.accountId
  5. object.barcode.alternateText
    বা object.accountId
    বা object.barcode.value
  6. পয়েন্ট
    বা object.loyaltyPoints.localizedLabel
    বা object.loyaltyPoints.label
  7. object.loyaltyPoints.balance
  8. পুরস্কার
    বা object.secondaryLoyaltyPoints.localizedLabel
    বা object.secondaryLoyaltyPoints.label
  9. object.secondaryLoyaltyPoints.balance
  10. class.hexBackgroundColor
  11. object.heroImage
    বা class.heroImage
  12. মেম্বারের নাম
    বা class.localizedAccountNameLabel
    বা class.accountNameLabel
  13. object.accountName
  14. মেম্বার আইডি
    বা class.localizedAccountIdLabel
    বা class.accountIdLabel
  15. object.accountId
  16. পুরস্কারের টিয়ার
    বা class.localizedRewardsTierLabel
    বা class.rewardsTierLabel
  17. class.localizedRewardsTier
    বা class.rewardsTier
  18. সেকেন্ডারি পুরস্কারের টিয়ার
    বা class.localizedSecondaryRewardsTierLabel
    বা class.secondaryRewardsTierLabel
  19. class.localizedSecondaryRewardsTier
    বা class.secondaryRewardsTier
  20. class.messages[].header
  21. class.messages[].body
  22. object.messages[].header
  23. object.messages[].body
  24. class.textModulesData[0..9].header
  25. class.textModulesData[0..9].body
  26. object.textModulesData[0..9].header
  27. object.textModulesData[0..9].body
  28. class.linksModuleData.uris[].description
  29. object.linksModuleData.uris[].description
  30. class.homepageUri

ছবি মডিউল ফিল্ডের জন্য, আমরা ক্লাস থেকে একটি এবং শুধুমাত্র একটি ছবি মডিউল ফিল্ড এবং অবজেক্ট থেকে একটি এবং শুধুমাত্র একটি ছবি মডিউল ফিল্ড দেখাই। কোনও লেভেলে আপনার একাধিক ইমেজ মডিউল ফিল্ডের প্রয়োজন হলে, ডিফল্ট টেমপ্লেট ওভাররাইড করুন।

টেক্সট মডিউল ফিল্ডের জন্য, আমরা ক্লাস থেকে সর্বাধিক ২০টি টেক্সট মডিউল ফিল্ড এবং অবজেক্ট থেকে ২০টি টেক্সট মডিউল ফিল্ড দেখাই। অ্যারেতে যেভাবে ফিল্ডগুলি সংজ্ঞায়িত করা হয়েছে, সেই একই ক্রমে সেগুলি দেখানো হয়। যেকোনও লেভেলে ২০টির বেশি টেক্সট মডিউল ফিল্ডের প্রয়োজন হলে, ডিফল্ট টেমপ্লেট ওভাররাইড করুন।

মেসেজের ক্ষেত্রে, আমরা ক্লাস থেকে সর্বাধিক ২০টি মেসেজ এবং অবজেক্ট থেকে ২০টি মেসেজ দেখাই। মেসেজের ক্রমের ব্যাপারে আমরা কোনও গ্যারেন্টি দিই না। কোনও লেভেলে ২০টির বেশি মেসেজ প্রয়োজন হলে অথবা কোনও অর্ডারের জন্য গ্যারান্টি চাইলে, ডিফল্ট টেমপ্লেট ওভাররাইড করুন।

লিঙ্ক মডিউল ফিল্ডের জন্য, আপনি যতগুলি খুশি URI উল্লেখ করতে পারেন। প্রতিটি লেভেলের (ক্লাস বা অবজেক্ট) জন্য নিম্নলিখিত ক্রমে গ্রুপ করা URI দেখানো হয়:

  1. ম্যাপের স্থানাঙ্ক
  2. টেলিফোন নম্বর
  3. ইমেল আইডি
  4. ওয়েব পৃষ্ঠাসমূহ

প্রতিটি গ্রুপের জন্য, URI-গুলি একই ক্রমে প্রদর্শিত হয় যেভাবে সেগুলি অ্যারেতে সংজ্ঞায়িত করা হয়। আপনার অন্য কোনও ক্রমের প্রয়োজন হলে, ডিফল্ট টেমপ্লেট ওভাররাইড করুন।