Шаблон карты

Чтобы посмотреть подробную информацию, выберите категорию.


Для отображения проездных билетов используются шаблоны. Если определить шаблон не удается, используется шаблон по умолчанию.

Шаблон

Шаблон проездного билета определяется на уровне класса, и в соответствии с ним показываются объекты, связанные с этим классом. В зависимости от шаблона элементы билета располагаются по-разному.

На рисунке ниже представлены составные части шаблона.

Название карты

Раздел с названием карты

В раздел с названием карты, помимо самого названия, входят логотип и название транспортной компании, а также сведения о маршруте. Вся эта информация указана в верхней строке. Названные элементы обязательны, а ссылки на поля, которые используются, чтобы указать их значения, так же как и их положение, менять нельзя.

Тем не менее в логике отображения допускаются варианты. Для поездок без пересадок они обеспечиваются следующими элементами объекта TransitObject:

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

Внешний вид проездного билета зависит от того, какие поля заполнены. Так, в билете может быть указана следующая информация:

  • Только пункт отправления. Он особенно важен для билетов, которые действуют в пределах конкретного региона.
  • Пункт отправления и пункт назначения. Первый из них находится на карте слева, а второй – справа. Между элементами расположен символ-разделитель. Какой именно, зависит от типа поездки. На карте может быть указана следующая информация о пунктах отправления и назначения:
    • Названия и коды станций. При этом названия расположены выше кодов и написаны более мелким шрифтом.
    • Только названия станций.
    • Только коды станций.

С объектами TransitObject для поездок с пересадками ситуация похожая. Отличие лишь в том, что вместо объекта object.ticketLeg нужно использовать список object.ticketLegs[]. Необходимо добавить сведения обо всех станциях, включая промежуточные. Они должны быть оформлены единообразно. На билете будут указаны только начальный и конечный пункты всего маршрута.

При желании можно указать цвет фона – на уровне класса или на уровне объекта. При этом параметры, заданные на уровне объекта, имеют приоритет над теми, что относятся к классу.

Шаблон карты

В разделе с шаблоном карты содержатся дополнительные строки. Они могут быть представлены в виде полей с текстовыми структурированными данными или текстовыми модулями.

Вы можете указать число строк; от него будет зависеть количество объектов в списке class.classTemplateInfo.cardTemplateOverride.cardRowTemplateInfos[]. В списке может быть один или два объекта следующих типов:

  • oneItem с одним элементом:
    • item
  • twoItems с двумя элементами:
    • startItem
    • endItem
  • threeItems с тремя элементами:
    • startItem
    • midItem
    • 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 несколько строк, то оно будет отображаться под первой строкой. Если же строка одна, это изображение появится над ней.

Штрихкод карты

Элементы штрихкода карты

В разделе со штрихкодом содержатся дополнительные текстовые и графические элементы, которые отображаются под штрихкодом и над ним. Добавлять их необязательно.

В этом же разделе находятся ещё три поля для выбора значений: два расположены рядом друг с другом над штрихкодом, а одно – под ним. У этих полей нет ярлыков. Они могут содержать текстовые структурированные данные, а также текстовые или графические модули. Изображения должны соответствовать правилам фирменного оформления Google.

У штрихкода есть тип и значение. Поддерживаемые типы штрихкодов приведены здесь. Кроме того, под штрихкодом может находиться текст. Он нужен, чтобы упростить сканирование кода, но может использоваться и для других целей.

Ниже приведен пример кода, который позволяет переопределить штрихкоды карты таким образом, чтобы изображение показывалось над штрихкодом.

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

Код создает карту, где раздел со штрихкодом представлен в следующем формате:

Пример переопределения штрихкода карты

Если вы не перезапишете раздел со штрихкодом, то будут использоваться значения по умолчанию. Подробнее…

Шаблон подробных сведений

Раздел о шаблоне подробных сведений

В этом шаблоне представлен список элементов 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.

Поездки с пересадками

Шаблон списка

Раздел о шаблоне списка

Шаблон списка нужен для показа в приложении элементов раздела "Карты". В списке билет представлен с логотипом и на цветном фоне, а также с дополнительной информацией на трех строках.

Ниже приведен пример кода, который позволяет переопределить шаблон списка таким образом, чтобы показывать поле со сроком окончания действия одного объекта в первой строке шаблона.

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. Мы переводим их названия на все поддерживаемые языки.

Некоторые ярлыки можно изменить, используя поля 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]

В этом случае в подробных сведениях о билете первым элементом станет второе изображение, указанное в объекте, а вторым – первое.

Шаблон по умолчанию

Разделы о шаблоне по умолчанию

Для каждого класса и объекта может быть представлен только один графический модуль. Если вам нужно больше модулей для того или иного уровня, перезапишите шаблон по умолчанию.

Модулей типа "текст" можно добавить до 10 штук как для класса, так и для объекта. Поля отображаются в том порядке, в котором они представлены в массиве. Если вам нужно больше модулей для того или иного уровня, перезапишите шаблон по умолчанию.

Можно добавить до 10 сообщений как для класса, так и для модуля. Порядок сообщений не гарантирован. Если вам нужно больше модулей для того или иного уровня либо определенный порядок, перезапишите шаблон по умолчанию.

Для модуля ссылок ограничений нет. Для каждого уровня URI будут отображаться в следующем порядке:

  1. Координаты на карте
  2. Номера телефонов
  3. Адреса электронной почты
  4. Веб-страницы
URI отображаются в группах в том порядке, в котором они представлены в массиве. Если вам нужен другой порядок, перезапишите шаблон по умолчанию.

Разделы с шаблоном списка по умолчанию