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

কার্ড টেমপ্লেট সেকশনটি অতিরিক্ত সারি প্রদর্শনের জন্য ব্যবহৃত হয়। এই সারিগুলোতে টেক্সট-ভিত্তিক স্ট্রাকচার্ড ডেটা ফিল্ড অথবা টেক্সট মডিউল ফিল্ড থাকতে পারে।
আপনি class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[] লিস্টে অবজেক্টের সংখ্যা নির্ধারণকারী সারির সংখ্যা নির্দিষ্ট করতে পারেন। লিস্টটিতে অন্তত একটি এলিমেন্ট থাকা আবশ্যক এবং আমরা সর্বাধিক দুটি এলিমেন্ট ব্যবহার করার পরামর্শ দিই। প্রতিটি এলিমেন্ট অবশ্যই নিম্নলিখিত প্রকারগুলির মধ্যে একটির হতে হবে:
-
oneItem, যা একটি আইটেম গ্রহণ করে:-
item
-
-
twoItems, যা দুটি আইটেম গ্রহণ করে:-
startItem -
endItem
-
-
threeItems, যা তিনটি আইটেম গ্রহণ করে:-
startItem -
middleItem -
endItem
-
প্রতিটি আইটেমকে একটি একক ফিল্ড সিলেক্টর ( .firstValue ), দুটি ফিল্ড সিলেক্টর ( .firstValue এবং .secondValue ), অথবা একটি প্রিডিফাইন্ড আইটেম ( .predefinedItem ) হিসেবে সংজ্ঞায়িত করা যেতে পারে। নির্বাচিত ফিল্ডের মান এবং তাদের নিজ নিজ লেবেল উভয়ই প্রদর্শিত হয়। যখন আপনি দুটি ফিল্ড সিলেক্টর সংজ্ঞায়িত করেন, তখন নির্বাচিত ফিল্ডগুলোর মান একটি "/" বিভাজক সহ প্রদর্শিত হয়। নির্বাচিত ফিল্ডগুলোর লেবেলের ক্ষেত্রেও একই নিয়ম প্রযোজ্য। আরও জটিল রেন্ডারিং সংজ্ঞায়িত করার জন্য প্রিডিফাইন্ড আইটেম ব্যবহার করা হয়।
নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে দুটি সারি নির্দিষ্ট করার জন্য কার্ড টেমপ্লেটের কার্ড সারি বিভাগগুলিকে ওভাররাইড করতে হয়। প্রতিটি সারিতে তিনটি আইটেম রয়েছে, যেগুলির প্রতিটি ছয়টি ক্লাস-স্তরের textModuleData কাস্টম ফিল্ড এবং তাদের হেডারগুলিকে লেবেল হিসাবে রেফারেন্স করে:
পাইথন
{ ... //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']")); } }))) )); } })))
পিএইচপি
// 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 তালিকায় একাধিক সারি থাকলে এটি প্রথম সারির পরে প্রদর্শিত হতে পারে, অথবা একটিমাত্র সারি থাকলে সারির উপরে প্রদর্শিত হতে পারে।
কার্ড বারকোড
অ্যান্ড্রয়েড
|
ওয়েব
|
কার্ড বারকোড সেকশনটি বারকোডের আগে ও পরে অতিরিক্ত লেখা বা ছবি প্রদর্শনের জন্য ব্যবহৃত হয়। এই সেকশনের কোনো ফিল্ডই আবশ্যক নয়।
বারকোডের আগে পাশাপাশি দুটি এবং পরে একটি ফিল্ড নির্ধারণ করার জন্য তিনটি ফিল্ড সিলেক্টর রয়েছে। এগুলো কোনো লেবেল ছাড়াই প্রদর্শিত হয় এবং এগুলো টেক্সট-ভিত্তিক স্ট্রাকচার্ড ডেটা ফিল্ড, টেক্সট মডিউল ফিল্ড অথবা ইমেজ মডিউল ফিল্ড হতে পারে। যদি আপনি ছবি ব্যবহার করেন, তবে সেগুলোকে অবশ্যই ব্র্যান্ডের নির্দেশিকা অনুসরণ করতে হবে।
বারকোড একটি প্রকার এবং একটি মান দ্বারা সংজ্ঞায়িত করা হয়। সমর্থিত বারকোড প্রকারের তালিকার জন্য, রেফারেন্স দেখুন। এছাড়াও, বারকোডের ঠিক নিচে একটি লেখা দেখানো যেতে পারে। অন্যান্য ব্যবহারের পাশাপাশি, এই লেখাটি বারকোড স্ক্যান করা সহজ করে তুলতে পারে।
নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে বারকোডের উপরে একটি ছবি প্রদর্শন করার জন্য একটি পাসের বারকোড অংশকে ওভাররাইড করতে হয়:
পাইথন
#... 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")); } }))))) }
পিএইচপি
//... 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);
কোডটি নিম্নলিখিত বারকোড সেকশন ফরম্যাট সহ একটি পাস তৈরি করে:

আপনি যদি বারকোড অংশটি পরিবর্তন না করেন, তাহলে ডিফল্ট বারকোড ফিল্ডগুলো ব্যবহৃত হবে। আরও তথ্যের জন্য, ডিফল্ট টেমপ্লেট দেখুন।
নিচের অংশ
অ্যান্ড্রয়েড
|
ওয়েব
|
নিচের অংশটি হলো class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[] -এর একটি আইটেমের তালিকা। আইটেমগুলোতে যেকোনো ধরনের স্ট্রাকচার্ড ডেটা ফিল্ড, টেক্সট মডিউল ফিল্ড, লিঙ্ক মডিউল ফিল্ড, ইমেজ মডিউল ফিল্ড বা মেসেজ থাকতে পারে।
প্রতিটি আইটেমকে একটি একক ফিল্ড সিলেক্টর ( .firstValue ), দুটি ফিল্ড সিলেক্টর ( .firstValue এবং .secondValue ), অথবা একটি প্রিডিফাইন্ড আইটেম ( .predefinedItem ) হিসেবে সংজ্ঞায়িত করা যেতে পারে। নির্বাচিত ফিল্ডের মান এবং তাদের নিজ নিজ লেবেল উভয়ই প্রদর্শিত হয়। যখন আপনি দুটি ফিল্ড সিলেক্টর সংজ্ঞায়িত করেন, তখন নির্বাচিত ফিল্ডগুলোর মান একটি "/" বিভাজক সহ প্রদর্শিত হয়। নির্বাচিত ফিল্ডগুলোর লেবেলের ক্ষেত্রেও একই নিয়ম প্রযোজ্য। আরও জটিল রেন্ডারিং সংজ্ঞায়িত করার জন্য প্রিডিফাইন্ড আইটেম ব্যবহার করা হয়। ইমেজ মডিউলের ফিল্ডগুলো লেবেল ছাড়া সম্পূর্ণ প্রস্থে রেন্ডার করা হয়।
নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে `pass`-এর নিচের অংশটি ওভাররাইড করে একটিমাত্র linksModuleData ফিল্ডকে তার লেবেল সহ প্রদর্শন করা যায়:
পাইথন
//... 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
পিএইচপি
//... 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
কোডটি নিম্নলিখিত বটম সেকশন ফরম্যাট সহ একটি পাস তৈরি করে:

কোনো আইটেম খালি থাকলে, তা প্রদর্শিত হয় না। আরও বিস্তারিত জানতে, ফিল্ড রেফারেন্স দেখুন।
আপনি যদি নিচের অংশটি ওভাররাইড না করেন, তাহলে রেফারেন্স ফিল্ডগুলির ডিফল্ট তালিকাটি ডিফল্ট ক্রমে প্রদর্শিত হবে। আরও তথ্যের জন্য, ডিফল্ট টেমপ্লেট দেখুন।
তালিকা টেমপ্লেট
|
গুগল ওয়ালেট অ্যাপের 'পাসেস' ভিউতে কোন ফিল্ডটি প্রদর্শন করা হবে তা নির্বাচন করতে লিস্ট টেমপ্লেট সেকশনটি ব্যবহৃত হয়। লিস্টটিতে পাসটিকে লোগো, ব্যাকগ্রাউন্ড কালার এবং তিনটি সারি দিয়ে উপস্থাপন করা হয়।
নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি পাসের তালিকা টেমপ্লেটকে ওভাররাইড করে সেই টেমপ্লেটের প্রথম সারিতে একটি নির্দিষ্ট পাসের অবজেক্টের মেয়াদ শেষ হওয়ার তারিখের ফিল্ডটি দেখানো যায়:
পাইথন
#... 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
পিএইচপি
//... 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
কোডটি নিম্নলিখিত তালিকা টেমপ্লেট উপস্থাপনা সহ একটি পাস তৈরি করে:

একটি ফিল্ড সিলেক্টরের মাধ্যমে তিনটি সারি নির্ধারণ করা যায়। ফিল্ডগুলো কোনো লেবেল ছাড়াই প্রদর্শিত হয়।
লেবেল
সকল স্ট্রাকচার্ড ডেটা ফিল্ডে গুগল কর্তৃক প্রদত্ত একটি লেবেল থাকে। গুগল সকল সমর্থিত ভাষায় এই লেবেলগুলোর প্রত্যেকটির অনুবাদ প্রদানের দায়িত্বে রয়েছে।
আপনি 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]
এক্ষেত্রে, পাসের ডিটেইলস সেকশনের প্রথম আইটেমটি হলো অবজেক্টে ঘোষিত দ্বিতীয় ইমেজ। অপরদিকে, পাসের ডিটেইলস সেকশনের দ্বিতীয় আইটেমটি হলো অবজেক্টে ঘোষিত প্রথম ইমেজ।
ডিফল্ট টেমপ্লেট
অ্যান্ড্রয়েড
|
ওয়েব
|
ইমেজ মডিউল ফিল্ডের ক্ষেত্রে, আমরা ক্লাস থেকে শুধুমাত্র একটি এবং অবজেক্ট থেকে শুধুমাত্র একটি ইমেজ মডিউল ফিল্ড দেখাই। যদি আপনার যেকোনো স্তরে একাধিক ইমেজ মডিউল ফিল্ডের প্রয়োজন হয়, তাহলে ডিফল্ট টেমপ্লেটটি ওভাররাইড করুন।
টেক্সট মডিউল ফিল্ডের ক্ষেত্রে, আমরা ক্লাস থেকে সর্বোচ্চ ২০টি এবং অবজেক্ট থেকে সর্বোচ্চ ২০টি টেক্সট মডিউল ফিল্ড প্রদর্শন করি। ফিল্ডগুলো অ্যারেতে যে ক্রমে সংজ্ঞায়িত করা হয়েছে, সেই একই ক্রমে প্রদর্শিত হয়। যদি আপনার যেকোনো স্তরে ২০টির বেশি টেক্সট মডিউল ফিল্ডের প্রয়োজন হয়, তবে ডিফল্ট টেমপ্লেটটি ওভাররাইড করুন।
মেসেজের ক্ষেত্রে, আমরা ক্লাস থেকে সর্বোচ্চ ২০টি এবং অবজেক্ট থেকে সর্বোচ্চ ২০টি মেসেজ দেখাই। আমরা মেসেজগুলোর ক্রমের নিশ্চয়তা দিই না। যদি আপনার যেকোনো স্তরে ২০টির বেশি মেসেজের প্রয়োজন হয়, অথবা কোনো নির্দিষ্ট ক্রমের নিশ্চয়তা চান, তাহলে ডিফল্ট টেমপ্লেটটি ওভাররাইড করুন।
লিঙ্কস মডিউল ফিল্ডের জন্য, আপনি যত খুশি ইউআরআই (uri) সংজ্ঞায়িত করতে পারেন, এর কোনো সীমা নেই। প্রতিটি লেভেলের (ক্লাস বা অবজেক্ট) জন্য ইউআরআইগুলো নিম্নলিখিত ক্রমে দলবদ্ধভাবে প্রদর্শিত হয়:
- মানচিত্র স্থানাঙ্ক
- টেলিফোন নম্বর
- ইমেল ঠিকানা
- ওয়েব পৃষ্ঠাগুলি
প্রতিটি গ্রুপের জন্য, URI-গুলো অ্যারেতে যে ক্রমে সংজ্ঞায়িত করা হয়েছে, সেই একই ক্রমে প্রদর্শিত হয়। যদি আপনার ভিন্ন কোনো বিন্যাসের প্রয়োজন হয়, তবে ডিফল্ট টেমপ্লেটটি ওভাররাইড করুন।
|