Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Простой - в полном соответствии своему названию, является самым простым блоком. Он используется для указания статичных частей формата. Например, если нужно в формате использовать набор символов, который будет всегда присутствовать в итоговом результате. Представим, что требуется задать формат для наименования объекта Продукт с типом Авиабилет, в котором оно будет состоять просто из слова Авиабилет. Строка формата при этом будет выглядеть так:
Panel
Авиабилет

Для простого блока не требуется каким-либо образом выделять свою структуру. Статичные символы просто вносятся в формат как есть.

2. Ключевое слово - является блоком, в котором указанное ключевое слово, при применении формата, будет заменено на определенное значение. Этот блок имеет следующую структуру:

Panel
{<наименование_атрибута>=<значение_атрибута>}

Как видно, блок начинается с символа { (открывающая фигурная скобка) и заканчивается символом } (закрывающая фигурная скобка). Внутри блока расположены атрибуты. При задании атрибута необходимо внести его наименование, затем символ = (равно), после чего указать значение атрибута. Блок ключевого слова поддерживает несколько атрибутов:

      • id - наименование ключевого слова

      • default - значение по умолчанию, используемое в случае, если вычисленное значение пустое

      • separator - используется для указания разделителя значений, в случае если ключевое слово отвечает за коллекцию значений

      • pattern - шаблон, для форматирования вычисленного значения, например, если ключевое слово отвечает за дату или число

      • locale - используется для указания языка, на котором отображать локализуемое значение


Из всех указанных атрибутов, обязательным к указанию является лишь атрибут id. Остальные атрибуты являются опциональными. В качестве значения, указываемого для атрибута default можно использовать любой набор блоков. Если в блоке нужно указать несколько атрибутов, они должны быть отделены друг от друга символом | (вертикальная черта). При этом, последовательность, в которой выстраиваются атрибуты, не имеет значения. Предположим, что нужно задать формат наименования для продукта, содержащего его номер. Формат, при этом, будет выглядеть так:

Panel
{id=product:number}

Как видно из примера, значение для атрибута id указывается в виде двух элементов, соединенных символом : (двоеточие):

Panel
<объект>:<свойство>

Элемент объект определяет, какому объекту принадлежит свойство, которое необходимо отобразить, а элемент свойство определяется какое именно свойство этого объекта нужно отобразить. В примере выше, указано, что нужно отобразить свойство number, принадлежащее объекту product (список всех объектов и их свойств приведен в конце документа).


Вернемся к примеру из описания простого блока. После слова Авиабилет требуется указать его номер, а в случае, если номер отсутствует, вместо номера нужно подставить значение без номера. Формат примет следующий вид:

Panel
Авиабилет

...

{id=product:number|default=без

...

номера}

В случае, если у билета номер присутствует, результирующая строка будет выглядеть, например, так:

Panel
Авиабилет

...

1234567890

А в случае, если у билета номера нет, то вместо номера будет подставлено указанное значение по умолчанию:

Panel
Авиабилет

...

без

...

номера

Чтобы не загромождать шаблон, уберем из него атрибут default и немного усложним пример, добавив новое требование: в конце строки должна быть подставлена дата вылета, отделенная от номера символом - (тире):

Авиабилет {id=product:number} - {id=product:start_date}

...

При этом, если атрибут locale указать у элемента, значение которого является не локализуемым, то такое значение будет транслитерировано с кириллицы на латиницу в соответствии с ГОСТ Р 52535.1-2006.  

3.Опциональный - специальный блок, который в случае пустого значения будет полностью исключен из итоговой строки. Его полезно использовать, когда в формат нужно включить определенные данные, отсутствие которых у форматируемого объекта является допустимым. Этот блок имеет структуру, схожую со структурой предыдущего блока:

Panel
[<наименование_атрибута>=<значение_атрибута>]

Блок начинается с символа [ (открывающая квадратная скобка) и заканчивается символом ] (закрывающая квадратная скобка). Внутри блока расположены атрибуты, имеющие идентичный формат. Опциональный блок поддерживает следующие атрибуты:

      • value - значение

      • padding - набор статичных символов, подставляемых перед значением, но только в случае, если это не первая запись в строке

      • prefix - набор статичных символов, подставляемых перед значением

      • suffix - набор статичных символов, подставляемых после значения


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

Panel
Авиабилет

...

{id=product:number}

...

-

...

{id=product:start_date|pattern=yyyy.MM.dd}

Посмотрим, как будет выглядеть итоговая строка в случае, если дата вылета у авиабилета не задана:

Авиабилет

...

1234567890

...

-

В силу того, что даты вылета в авиабилете нет, ее значение в итоговую строку подставлено не будет. Однако символ - (тире), отделяющий дату от номера останется, т.к. он задан как статичный. Хочется этого избежать. Исправим формат и внесем в него опциональный блок:

...

В силу того, что символ - (тире) теперь является частью опционального блока, этот символ не будет добавлен в итоговую строку.

4. Условный блок - предназначен для вывода разных результатов, которые зависят от вычисленного значения. Работа данного блока заключается в том, что сначала вычисляется значение, а затем проверяется набор указанных ожидаемых результатов для этого значения. В случае, если вычисленное значение совпадает с одним из указанных результатов, тогда в итоговую строку будет выведено значение, назначенное этому результату. Этот блок имеет структуру, схожую со структурой предыдущих блоков:

<<наименование_атрибута>=<значение_атрибута>>

...