نموذج بطاقة النقل العام

عرض نموذج بطاقة النقل العام إذا لم يتم تحديد أي نموذج، سيتم استخدام النموذج التلقائي.

تعريف النموذج

يتم تحديد نموذج البطاقة على مستوى الفئة ويتم استخدامه لعرض أي عنصر مرتبط بالفئة. يحدد النموذج الحقول التي سيتم عرضها في الأقسام المختلفة من البطاقة.

يتم تقسيم النموذج إلى الأقسام التالية:

Android

نظرة عامة على النموذج

الويب

نظرة عامة على النموذج

عنوان البطاقة

Android

عناصر عنوان البطاقة عنوان البطاقة التلقائي
  1. class.logo
  2. class.localizedIssuerName
    أو class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    أو class.hexBackgroundColor

عنوان البطاقة ذات الشعار العريض
  1. class.wideLogo
  2. object.ticketLeg.originName
  3. object.ticketLeg.destinationName
  4. object.ticketLeg.originStationCode
  5. object.ticketLeg.destinationStationCode
  6. object.tripType
  7. object.hexBackgroundColor
    أو class.hexBackgroundColor

الويب

عناصر عنوان البطاقة
  1. class.logo
  2. class.localizedIssuerName
    أو class.issuerName
  3. object.ticketLeg.originName
  4. object.ticketLeg.destinationName
  5. object.ticketLeg.originStationCode
  6. object.ticketLeg.destinationStationCode
  7. object.tripType
  8. object.hexBackgroundColor
    أو class.hexBackgroundColor

يعرض قسم عنوان البطاقة الشعار واسم شركة النقل العام وملخّص الرحلة. كل هذه العناصر الثلاثة مطلوبة ولا يمكن تغيير مراجع الحقول المستخدَمة لتعبئتها أو تغيير موضعها.

ومع ذلك، يتيح منطق العرض بعض المرونة للصف العلوي. يتم التحكّم في الصف العلوي من البطاقة، والذي يمثّل ملخّص الرحلة، من خلال الحقول التالية في السمة TransitObject لرحلة تشمل مرحلة واحدة:

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

تعتمد طريقة عرض البطاقة على الحقول غير الفارغة. يمكن عرضه بالطرق التالية:

  • اسم نقطة الانطلاق فقط: اسم المصدر هو المعلومات الوحيدة المعروضة. ويُعدّ هذا الإجراء مفيدًا بشكل خاص للتذاكر التي تغطي منطقة معيّنة بدلاً من حجز رحلة معيّنة.
  • نقطة الانطلاق والوجهة: توجد نقطة الأصل على الجانب الأيسر وتقع الوجهة على الجانب الأيمن. ويعتمد الرمز الموجود بينهما على نوع الرحلة. يتم عرض نقطة الانطلاق والوجهة في أي مما يلي:
    • الأسماء ورموز المحطات: نعرض رموز المحطات مع الأسماء كنص أصغر في الأعلى.
    • الأسماء فقط: نعرض الأسماء.
    • رموز المحطات فقط: نعرض رموز المحطات.

تعمل كائنات TransitObject متعددة الساقين بشكل مشابه جدًا. وفي هذه الحالة، لا تستخدم السمة object.ticketLeg. بدلاً من ذلك، عليك استخدام قائمة object.ticketLegs[]. يجب تحديد كل من المصادر والوجهات. يجب استخدام الأسماء أو رموز المحطات أو كليهما بشكل متسق في كل مرحلة. المصدر المعروض هو أصل العنصر الأول في المصفوفة، بينما الوجهة المعروضة هي وجهة العنصر الأخير في المصفوفة.

إنّ لون خلفية البطاقة ليس حقلاً مطلوبًا، ويمكن تحديده على مستوى الفئة ومستوى العنصر. يتمتع حقل الكائن بأولوية أعلى ويمكن استخدامه لاستبدال حقل الفئة.

عند ضبط حقل الشعار العريض، يتم استبدال عنوان النموذج التلقائي الذي يتضمّن الشعار واسم جهة الإصدار بالشعار العريض على أجهزة 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']"
                            }]
                        }
                    },
                }
            }]
        }
    }
}
    

لغة Java

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

PHP

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ينشئ الرمز بطاقة بتنسيق قسم نموذج الرمز التالي:

مثال على إلغاء تصنيف

ولن يتم عرض أحد العناصر إذا كان فارغًا. لمزيد من التفاصيل، يُرجى الاطّلاع على مراجع الحقول. وإذا كانت جميع العناصر في أحد الصفوف فارغة، لن يتم عرض الصف. إذا كانت بعض العناصر غير الفارغة في صف فارغة، وليس كلها، تتم إعادة ترتيب العناصر غير الفارغة وعرضها على شكل صف يحتوي على عدد أقل من العناصر.

إذا لم تلغِ نموذج البطاقة، سيتم استخدام العدد التلقائي للصفوف والعدد التلقائي للعناصر ومراجع الحقول التلقائية. لمزيد من التفاصيل، راجِع النموذج التلقائي.

بعد تحديد صورة رئيسية، يمكن أن تظهر بعد الصف الأول، إذا كان هناك عدة صفوف في قائمة cardRowTemplateInfos، أو أعلى الصف في حال توفّر صف واحد فقط.

الرمز الشريطي للبطاقة

Android

عناصر الرمز الشريطي للبطاقة
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type وobject.barcode.value
    أو object.ticketNumber
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

الويب

عناصر الرمز الشريطي للبطاقة
  1. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstTopDetail
  2. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .secondTopDetail
  3. object.barcode.type وobject.barcode.value
    أو object.ticketNumber
  4. object.barcode.alternateText
  5. class.classTemplateInfo
      .cardBarcodeSectionDetails
      .firstBottomDetail

يُستخدم قسم الرمز الشريطي للبطاقة لعرض نصوص أو صور إضافية فوق الرمز الشريطي وتحته. ليس مطلوبًا ملء أي من الحقول في هذا القسم.

تتوفر ثلاث أدوات اختيار للحقول يمكن استخدامها لتحديد حقلَين جنبًا إلى جنب في الأعلى وواحد أسفل الرمز الشريطي. يتم عرض هذه العناصر بدون تصنيف، ويمكن أن تكون إما حقول بيانات منظَّمة مستندة إلى نص أو حقول وحدات نصية أو حقول وحدة صور. إذا كنت تستخدم صورًا، يجب أن تكون متوافقة مع إرشادات العلامة التجارية.

يتم تحديد الرمز الشريطي حسب نوع وقيمة. للحصول على قائمة بأنواع الرموز الشريطية المتوافقة، راجِع المرجع. بالإضافة إلى ذلك، يمكن عرض نص أسفل الرمز الشريطي مباشرةً. يسهّل هذا النص مسح الرموز الشريطية ضوئيًا، بالإضافة إلى استخدامات أخرى.

يعرض نموذج الرمز التالي كيفية إلغاء قسم الرمز الشريطي الخاص ببطاقة عرض صورة فوق الرمز الشريطي:

Python

#... rest of class
    "imageModulesData": [
        {
            "mainImage": {
                "sourceUri": {
                    "uri":  "http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg",
                    "description": "Coffee"
                }
            },
            "Id": "myimage"
        }
    ],
    "classTemplateInfo": {
        "cardBarcodeSectionDetails": {
            "firstTopDetail": {
                "fieldSelector": {
                    "fields": [
                        {
                        "fieldPath": "class.imageModulesData['myimage'].mainImage"
                        }
                    ]
                }
            }
        }
    }
}
    

لغة Java

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

PHP

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

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

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

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

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

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

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

ينشئ الرمز بطاقة بتنسيق قسم الرمز الشريطي التالي:

مثال على إلغاء الرمز الشريطي للبطاقة

في حال عدم إلغاء قسم الرمز الشريطي، سيتم استخدام حقول الرموز الشريطية التلقائية. لمزيد من المعلومات، يُرجى الاطّلاع على النموذج التلقائي.

نموذج التفاصيل

Android

أقسام نموذج التفاصيل
  • برنامج الرحلة لعدة أرجل
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • ...

الويب

أقسام نموذج التفاصيل
  • برنامج الرحلة لعدة أرجل
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[0].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[1].item
  • class.classTemplateInfo.detailsTemplateOverride
      .detailsItemInfos[2].item
  • ...

قسم نموذج التفاصيل هو قائمة بالعناصر class.classTemplateInfo.detailsTemplateOverride.detailsItemInfos[]. ويمكن أن تحتوي العناصر على أي نوع من حقول البيانات المنظَّمة أو حقول الوحدات النصية أو حقول وحدة الروابط أو حقول وحدة الصور أو الرسائل.

يمكن تحديد كل عنصر على أنّه أداة اختيار حقل واحد (.firstValue)، أو أداتَي اختيار للحقل (.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
    

لغة Java

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

PHP



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

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

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

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

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

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

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

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

ينشئ الرمز بطاقة بتنسيق قسم التفاصيل التالي:

مثال على تجاهل التفاصيل

ولن يتم عرض أحد العناصر إذا كان فارغًا. لمزيد من التفاصيل، يُرجى الاطّلاع على مراجع الحقول.

إذا لم تلغِ نموذج التفاصيل، سيتم عرض القائمة التلقائية للحقول المرجعية بالترتيب التلقائي. لمزيد من المعلومات، راجِع النموذج التلقائي.

إذا كانت الرحلة تتضمّن عدة أرجل، سيظهر برنامج رحلة بسيط في أعلى القسم ولا يمكن نقله. إذا كانت الرحلة تتضمّن محطة واحدة فقط، يمكن عرض برنامج رحلة بسيط من خلال ضبط السمة class.enableSingleLegItinerary.

برنامج رحلة لعدّة أرجل
  1. class.tranistType
  2. object.ticketLegs[i].originName
    أو object.ticketLegs[i].originStationCode
  3. object.ticketLegs[i].departureDateTime (الوقت فقط)
  4. object.ticketLegs[i].transitOperatorName
  5. COACH أو class.customCoachLabel
  6. object.ticketLegs[i].ticketSeat.coach
    أو object.ticketLegs[i].ticketSeats[*].coach
  7. SEAT أو class.customSeatLabel
  8. object.ticketLegs[i].ticketSeat.seat
    أو object.ticketLegs[i].ticketSeat.seatAssignment
    أو object.ticketLegs[i].ticketSeats[*].seat
    أو object.ticketLegs[i].ticketSeats[*].seatAssignment
    أو ما من مقعد محدَّد
  9. object.hexBackgroundColor
    أو class.hexBackgroundColor
  10. object.ticketLegs[i].destinationName
    أو object.ticketLegs[i].destinationStationCode
  11. object.ticketLegs[i].arrivalDateTime (الوقت فقط)
  12. النقل إلى: المنصة
    أو النقل إلى: class.customPlatformLabel
    أو TRANSFER (في حال عدم تحديد منصة)
  13. object.ticketLegs[i+1].platform

نموذج القائمة

قائمة عناصر النموذج
  1. class.classTemplateInfo.listTemplateOverride
      .firstRowOption.fieldOption.fields[]
  2. object.ticketLeg.departureDateTime (مجمّع)
    أو class.classTemplateInfo.listTemplateOverride
      .secondRowOption.fields[]
  3. class.logo
  4. object.hexBackgroundColor
    أو class.hexBackgroundColor
  5. <# بطاقة> (مجمّعة)

يتم استخدام قسم نموذج القائمة لاختيار الحقل الذي سيتم عرضه في عرض "البطاقات" في تطبيق "محفظة Google". يتم تمثيل البطاقة في القائمة مع الشعار ولون الخلفية وثلاثة صفوف.

يعرض نموذج الرمز التالي كيفية إلغاء نموذج قائمة البطاقة من أجل عرض حقل تاريخ انتهاء صلاحية عنصر البطاقات الفردية في الصف الأول من نموذج القائمة:

Python


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

لغة Java

//... rest of class
  .setClassTemplateInfo((new ClassTemplateInfo())
    .setListTemplateOverride((new ListTemplateOverride())
      .setFirstRowOption((new FirstRowOption())
        .setFieldOption((new FieldSelector()).setFields(new ArrayList<FieldReference>(){
          {
            add((new FieldReference()).setFieldPath("object.validTimeInterval.end"));
          }
        }))))
//... rest of class
    

PHP

    //... rest of class
    $fieldReference = new Google_Service_Walletobjects_FieldReference();
    $fieldReference->setFieldPath("object.validTimeInterval.end");

    $fieldOption = new Google_Service_Walletobjects_FieldSelector();
    $fieldOption->setFields(array($fieldReference));

    $firstRowOption = new Google_Service_Walletobjects_FirstRowOption();
    $firstRowOption->setFieldOption($fieldOption);

    $listTemplateOverride = new Google_Service_Walletobjects_ListTemplateOverride();
    $listTemplateOverride->setFirstRowOption($firstRowOption);

    $classTemplateInfo = new Google_Service_Walletobjects_ClassTemplateInfo();
    $classTemplateInfo->setListTemplateOverride($listTemplateOverride);

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

ينشئ الرمز بطاقة باستخدام إصدار نموذج القائمة التالي:

مثال على إلغاء القائمة

يمكن تحديد الصف الأول باستخدام أداة اختيار الحقل أو يعرض ملخّص الرحلة. يمكن أن يكون تنسيق الملخص واحدًا مما يلي:

  • originAndDestinationCodes
  • originAndDestinationNames
  • originName

لا يمكن تحديد الصفين الثاني والثالث إلا باستخدام محدد الحقل. يتم عرض الحقول بدون تصنيف. بالنسبة إلى البطاقات المجمّعة، يعرض الصف الثاني دائمًا تاريخ المغادرة والصف الثالث دائمًا عدد البطاقات المجمّعة.

التصنيفات

تحتوي جميع حقول البيانات المنظَّمة على تصنيف توفّره 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.logo
  2. class.localizedIssuerName
    أو class.issuerName
  3. الاطّلاع على عنوان البطاقة
  4. عند المغادرة أو صالحة من
  5. object.ticketLeg.departureDateTime (التاريخ والوقت)
    أو object.validTimeInterval.start.date
  6. موعد الوصول أو العرض سارٍ حتى
  7. object.ticketLeg.arrivalDateTime (الوقت فقط)
    أو object.validTimeInterval.end.date
  8. الراكب
  9. object.passengerNames
  10. العربة أو class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH أو class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT أو class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    أو object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.type وobject.barcode.value
    أو object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    أو class.hexBackgroundColor
  19. برنامج الرحلة لعدة أرجل
  20. رقم التذكرة أو class.customTicketNumberLabel
  21. object.ticketNumber
  22. حالة طلب الدعم
  23. object.ticketStatus أو object.customTicketStatus
  24. المغادرة
  25. object.ticketLeg.departureDateTime
  26. إجراءات الوصول
  27. object.ticketLeg.arrivalDateTime
  28. اسم التذكرة أو class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. المنصة أو class.customPlatformLabel
  31. object.ticketLeg.platform
  32. المنطقة أو class.customZoneLabel
  33. object.ticketLeg.zone
  34. فئة السعر أو class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    أو object.ticketLeg.ticketSeat.customFareClass
  36. فئة التعلّم
    أو class.customConcessionCategoryLabel
  37. object.concessionCategory
    أو object.customConcessionCategory
  38. قيود المسارات
    أو class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. تفاصيل قيود المسارات
    أو class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. القيود الزمنية
    أو class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. قيود أخرى
    أو class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. رقم الاستلام
    أو class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. تاريخ الشراء
  49. object.purchaseDetails.purchaseDateTime
  50. رقم تعريف الحساب
  51. object.purchaseDetails.accountId
  52. رمز التأكيد
    أو class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. قيمة الوجه أو class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE أو class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. رسالة الخصم
    أو class.customDiscountMessageLabel
  59. object.purchaseDetails.ticketCost.discountMessage
  60. class.imageModulesData[0].mainImage
  61. object.imageModulesData[0].mainImage
  62. class.messages[].header
  63. class.messages[].body
  64. object.messages[].header
  65. object.messages[].body
  66. class.textModulesData[0..9].header
  67. class.textModulesData[0..9].body
  68. object.textModulesData[0..9].header
  69. object.textModulesData[0..9].body
  70. class.linksModuleData.uris[].description
  71. object.linksModuleData.uris[].description

الويب

عناصر النموذج التلقائي
  1. class.logo
  2. class.localizedIssuerName
    أو class.issuerName
  3. الاطّلاع على عنوان البطاقة
  4. عند المغادرة أو صالحة من
  5. object.ticketLeg.departureDateTime (التاريخ والوقت)
    أو object.validTimeInterval.start.date
  6. موعد الوصول أو العرض سارٍ حتى
  7. object.ticketLeg.arrivalDateTime (الوقت فقط)
    أو object.validTimeInterval.end.date
  8. الراكب
  9. object.passengerNames
  10. العربة أو class.customCarriageLabel
  11. object.ticketLeg.carriage
  12. COACH أو class.customCoachLabel
  13. object.ticketLeg.ticketSeat.coach
  14. SEAT أو class.customSeatLabel
  15. object.ticketLeg.ticketSeat.seat
    أو object.ticketLeg.ticketSeat.seatAssignment
  16. object.barcode.type وobject.barcode.value
    أو object.ticketNumber
  17. object.barcode.alternateText
  18. object.hexBackgroundColor
    أو class.hexBackgroundColor
  19. برنامج الرحلة لعدة أرجل
  20. رقم التذكرة أو class.customTicketNumberLabel
  21. object.ticketNumber
  22. حالة طلب الدعم
  23. object.ticketStatus أو object.customTicketStatus
  24. المغادرة
  25. object.ticketLeg.departureDateTime
  26. إجراءات الوصول
  27. object.ticketLeg.arrivalDateTime
  28. اسم التذكرة أو class.customFareNameLabel
  29. object.ticketLeg.fareName
  30. المنصة أو class.customPlatformLabel
  31. object.ticketLeg.platform
  32. المنطقة أو class.customZoneLabel
  33. object.ticketLeg.zone
  34. فئة السعر أو class.customFareClassLabel
  35. object.ticketLeg.ticketSeat.fareClass
    أو object.ticketLeg.ticketSeat.customFareClass
  36. فئة التعلّم
    أو class.customConcessionCategoryLabel
  37. object.concessionCategory
    أو object.customConcessionCategory
  38. قيود المسارات
    أو class.customRouteRestrictionsLabel
  39. object.ticketRestrictions.routeRestrictions
  40. تفاصيل قيود المسارات
    أو class.customRouteRestrictionsDetailsLabel
  41. object.ticketRestrictions.routeRestrictionsDetails
  42. القيود الزمنية
    أو class.customTimeRestrictionsLabel
  43. object.ticketRestrictions.timeRestrictions
  44. قيود أخرى
    أو class.customOtherRestrictionsLabel
  45. object.ticketRestrictions.otherRestrictions
  46. رقم الاستلام
    أو class.customPurchaseReceiptNumberLabel
  47. object.purchaseDetails.purchaseReceiptNumber
  48. تاريخ الشراء
  49. object.purchaseDetails.purchaseDateTime
  50. رقم تعريف الحساب
  51. object.purchaseDetails.accountId
  52. رمز التأكيد
    أو class.customConfirmationCodeLabel
  53. object.purchaseDetails.confirmationCode
  54. قيمة الوجه أو class.customPurchaseFaceValueLabel
  55. object.purchaseDetails.ticketCost.faceValue
  56. PRICE أو class.customPurchasePriceLabel
  57. object.purchaseDetails.ticketCost.purchasePrice
  58. رسالة الخصم
    أو class.customDiscountMessageLabel
  59. object.purchaseDetails.ticketCost.discountMessage
  60. class.imageModulesData[0].mainImage
  61. object.imageModulesData[0].mainImage
  62. class.messages[].header
  63. class.messages[].body
  64. object.messages[].header
  65. object.messages[].body
  66. class.textModulesData[0..9].header
  67. class.textModulesData[0..9].body
  68. object.textModulesData[0..9].header
  69. object.textModulesData[0..9].body
  70. class.linksModuleData.uris[].description
  71. object.linksModuleData.uris[].description

بالنسبة إلى حقول وحدة الصور، نعرض حقلاً واحدًا فقط لوحدة صورة من الفئة وحقل واحد فقط لوحدة صور واحدة من العنصر. إذا كنت بحاجة إلى أكثر من حقل واحد لوحدات الصور في أي من المستويَين، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى حقول الوحدات النصية، لا نعرض سوى 20 حقل وحدة نصية كحد أقصى من الفئة و20 حقلاً من حقول الوحدة النصية من العنصر. يتم عرض الحقول بالترتيب نفسه الذي تم تحديدها به في المصفوفة. إذا احتجت إلى أكثر من 20 حقل وحدة نصية في أيّ من المستويَين، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى الرسائل، سنعرض فقط 20 رسالة من الفئة و20 رسالة من العنصر كحدّ أقصى. نحن لا نضمن ترتيب الرسائل. إذا كنت بحاجة إلى أكثر من 20 رسالة في أي من المستويَين، أو إلى ضمان لأيّ طلبات، يمكنك إلغاء النموذج التلقائي.

بالنسبة إلى حقل وحدة الروابط، ليس هناك حد لعدد معرفات الموارد المنتظمة (URI) التي يمكنك تحديدها. ويتم تقسيم قيم URI بالترتيب التالي لكل مستوى (فئة أو كائن):

  1. إحداثيات الخريطة
  2. أرقام الهاتف
  3. عناوين البريد الإلكتروني
  4. صفحات الويب

لكل مجموعة، يتم عرض معرّفات الموارد المنتظمة (URI) بالترتيب نفسه الذي تم تحديدها به في الصفيف. إذا كنت بحاجة إلى ترتيب مختلف، يمكنك إلغاء النموذج التلقائي.

عناصر نموذج القائمة التلقائية
  1. (object.ticketLeg.originName
    وobject.ticketLeg.destinationName)
    أو (object.ticketLeg.originStationCode
    وobject.ticketLeg.destinationStationCode)
    أو object.ticketLeg.originName
  2. object.ticketLeg.departureDateTime
    أو object.validTimeInterval.end.date
  3. class.logo
  4. object.hexBackgroundColor
    أو class.hexBackgroundColor
  5. <# بطاقة> (مجمّعة)