Шаблон:GetField/doc: различия между версиями

Новая страница: «{{docpage}} {{OnLua|GetField}} Модуль предназначен для получения данных из кэшированных JSON-страниц и их использования в шаблонах. С его помощью можно получить поле по пути, найти id по значению или сразу собрать вызов шаблона по найденным данным. Поля берутся из json с...»
 
Нет описания правки
 
(не показано 11 промежуточных версий этого же участника)
Строка 11: Строка 11:
* <code>Участник:IanComradeBot/prototype/Проект/название</code> (пример: [[Участник:IanComradeBot/Goob/prototype/tag.json]])
* <code>Участник:IanComradeBot/prototype/Проект/название</code> (пример: [[Участник:IanComradeBot/Goob/prototype/tag.json]])


__TOC__
== Основные функции ==
== Основные функции ==


Строка 17: Строка 18:


Использование:
Использование:
* {{tji|GetField|get|id|pagePath}}
* {{tji|GetField|функция{{=}}get|id|pagePath|keyPath}}
* {{tji|GetField|get|id|pagePath|keyPath}}


Если <code>keyPath</code> не указан, функция вернёт всю запись. Простые значения возвращаются как текст, а таблицы в JSON-виде.
Простые значения возвращаются как текст, а таблицы в JSON-виде.


Примеры:
Например, json сущности <code>MopItem</code> из [[Участник:IanComradeBot/component/meleeWeapon.json]] выглядит так:
* {{tji|GetField|get|MopItem|entity/MopItem.json}}
<pre>
* {{tji|GetField|get|MopItem|entity/MopItem.json|name}}
"MopItem": {
* {{tji|GetField|get|SomeId|prototype/someGenerator.json|components.1}}
    "damage": {
        "types": {
            "Blunt": 10
        }
    },
...
},
</pre>
то мы можем получить значение как как:
* {{tji|GetField|функция{{=}}get|MopItem|component/meleeWeapon.json|damage}} -> "types": {"Blunt": 10}}
* {{tji|GetField|функция{{=}}get|MopItem|component/meleeWeapon.json|damage.types}} -> {"Blunt": 10}
* {{tji|GetField|функция{{=}}get|MopItem|component/meleeWeapon.json|damage.types.Blunt}} -> 10


{{Параметры|
{{Параметры|
{{Параметры/строка|1|Id записи.|Да}}
{{Параметры/строка|1|Id записи.|Да}}
{{Параметры/строка|2|Путь до JSON-страницы, например <code>entity/MopItem.json</code>.|Да}}
{{Параметры/строка|2|Путь до JSON-страницы, например <code>component/meleeWeapon.json</code>.|Да}}
{{Параметры/строка|3|Путь до поля внутри записи. Поддерживает вложенность через точку и индексы вида <code>field.1</code> или <code>field[1]</code>.|Нет; вся запись}}
{{Параметры/строка|3|Путь до поля внутри записи. Поддерживает вложенность через точку и индексы вида <code>field.1</code>|Да}}
}}
}}


=== getTpl ===
=== getTpl ===
Строит вызов шаблона для одного id и сразу обрабатывает его через препроцессор. Помимо <code>id</code>, в шаблон передаются развёрнутые поля записи.
Строит вызов шаблона для одного id передавая в него развёрнутые поля записи.


Использование:
Использование:
* {{tji|GetField|getTpl|id|pagePath|template}}
* {{tji|GetField|функция{{=}}getTpl|id|pagePath|template}}


Шаблон вызывается в виде <code><nowiki>{{Имя шаблона|id=...|...поля записи...}}</nowiki></code>. Вложенные таблицы передаются как плоские параметры, а также в JSON-виде там, где это нужно для сохранения структуры.
Шаблон вызывается в виде <code><nowiki>{{Имя шаблона|id=...|...поля записи...}}</nowiki></code>. Вложенные таблицы передаются как плоские параметры, а также в JSON-виде там, где это нужно для сохранения структуры.


Пример:
Пример:
* {{tji|GetField|getTpl|MopItem|entity/MopItem.json|Предмет}}
* {{tji|GetField|функция{{=}}getTpl|MopItem|entity/MopItem.json|Предмет}}


{{Параметры|
{{Параметры|
Строка 50: Строка 61:
}}
}}


=== getId / getTplId ===
=== searchId / searchIdTpl ===
Обе функции ищут id по значению в указанном поле. Разница в результате:
Обе функции ищут id по значению в указанном поле. Разница в результате:
* <code>getId</code> возвращает найденные id в виде JSON-массива.
* <code>searchId</code> возвращает найденные id в виде JSON-массива.
* <code>getTplId</code> по найденным id сразу вызывает шаблон.
* <code>searchIdTpl</code> по найденным id сразу вызывает шаблон.


Использование:
Использование:
* {{tji|GetField|getId|searchValue|pagePath|keyPath|searchType{{=}}value}}
* {{tji|GetField|функция{{=}}searchId|searchValue|pagePath|keyPath}}
* {{tji|GetField|getTplId|searchValue|pagePath|keyPath|template|searchType{{=}}value}}
* {{tji|GetField|функция{{=}}searchIdTpl|searchValue|pagePath|keyPath|template}}
* {{tji|GetField|getTplId|pagePath|keyPath|template|searchType{{=}}path}}
* {{tji|GetField|функция{{=}}searchIdTpl|pagePath|keyPath|template|searchType{{=}}path}}


Режимы поиска:
Режимы поиска:
* <code>searchType=value</code> — ищет id, у которых значение поля равно указанному значению. Это режим по умолчанию.
* <code>searchType=value</code> — ищет id, у которых значение поля равно указанному значению. Это режим по умолчанию.
* <code>searchType=key</code> — ищет id, у которых в поле-таблице существует ключ с указанным именем.
* <code>searchType=key</code> — ищет id, у которых в поле-таблице существует ключ с указанным именем.
* <code>searchType=path</code> — только для <code>getTplId</code>; выводит все id, у которых поле по указанному пути существует и не пустое. В этом режиме первым параметром передаётся <code>pagePath</code>, а не значение для поиска.
* <code>searchType=path</code> — только для <code>searchIdTpl</code>; выводит все id, у которых поле по указанному пути существует и не пустое. В этом режиме первым параметром передаётся <code>pagePath</code>, а не значение для поиска.


<code>getTplId</code> вызывает шаблон в виде <code><nowiki>{{Имя шаблона|id=...|...поля записи...}}</nowiki></code>. Если найдено несколько id, вызовы собираются подряд через пробел.
<code>searchIdTpl</code> вызывает шаблон в виде <code><nowiki>{{Имя шаблона|id=...|...поля записи...}}</nowiki></code>. Если найдено несколько id, вызовы собираются подряд через пробел.


Примеры:
Примеры:
* {{tji|GetField|getId|MopItem|prototype/itemGenerator.json|parent}}
* {{tji|GetField|функция{{=}}searchId|Elements|[[Участник:IanComradeBot/prototype/reaction.json|prototype/reaction.json]]|group}} -> {{GetField|функция=searchId|Stir|prototype/reaction.json|requiredMixerCategories}}
* {{tji|GetField|getId|Anchorable|entity/someEntity.json|components|searchType{{=}}key}}
* {{tji|GetField|getTplId|MopItem|prototype/itemGenerator.json|parent|Предмет}}
* {{tji|GetField|getTplId|prototype/itemGenerator.json|sprite|Предмет|searchType{{=}}path}}


{{Параметры|
{{Параметры|
{{Параметры/строка|1|Для <code>getId</code> и обычного режима <code>getTplId</code> — значение для поиска. Для <code><nowiki>searchType=path</nowiki></code> у <code>getTplId</code> — путь до JSON-страницы.|Да}}
{{Параметры/строка|1|Значение для поиска.|Да}}
{{Параметры/строка|2|Для <code>getId</code> и обычного режима <code>getTplId</code> — путь до JSON-страницы. Для <code><nowiki>searchType=path</nowiki></code> у <code>getTplId</code> — путь до поля.|Да}}
{{Параметры/строка|2|Путь до JSON-страницы.|Да}}
{{Параметры/строка|3|Для <code>getId</code> — путь до поля. Для <code>getTplId</code> — путь до поля, либо имя шаблона в режиме <code><nowiki>searchType=path</nowiki></code>.|Да}}
{{Параметры/строка|3|Путь до поля внутри записи. Поддерживает вложенность через точку и индексы вида <code>field.1</code>|Да}}
{{Параметры/строка|4|Для <code>getTplId</code> — имя шаблона, который будет вызван для каждого найденного id.|Только для <code>getTplId</code>}}
{{Параметры/строка|4|Имя шаблона, который будет вызван для каждого найденного id.|Только для <code>searchIdTpl</code>}}
{{Параметры/строка|searchType|Режим поиска: <code>value</code>, <code>key</code> или <code>path</code>.|Нет; value}}
{{Параметры/строка|searchType|Режим поиска: <code>value</code>, <code>key</code> или <code>path</code>.|Нет; value}}
}}
}}
Строка 85: Строка 93:


Использование:
Использование:
* {{tji|GetField|hasComp|entityId|componentName}}
* {{tji|GetField|функция{{=}}hasComp|entityId|componentName}}


Возвращает строку <code>true</code> или <code>false</code>.
Возвращает строку <code>true</code> или <code>false</code>.


Пример:
Пример:
* {{tji|GetField|hasComp|MopItem|Item}}
* {{tji|GetField|функция{{=}}hasComp|MopItem|Item}}


{{Параметры|
{{Параметры|
Строка 97: Строка 105:
}}
}}


=== getGenerator / getTplGenerator ===
=== searchStore / searchStoreTpl ===
Эти функции работают с генераторами, описанными в общих хранилищах <code>prototype_store.json</code> и <code>component_store.json</code>.
Эти функции находят прототипы или компоненты содержащие указанный id, используя [[Участник:IanComradeBot/prototype_store.json]] или [[Участник:IanComradeBot/component_store.json]].


Использование:
Использование:
* {{tji|GetField|getGenerator|searchId|prototype|generatorId}}
* {{tji|GetField|функция{{=}}searchStore|searchId|prototype|Название}}
* {{tji|GetField|getGenerator|searchId|component|generatorId}}
* {{tji|GetField|функция{{=}}searchStore|searchId|component|Название}}
* {{tji|GetField|getTplGenerator|searchId|prototype|generatorId|template}}
* {{tji|GetField|функция{{=}}searchStoreTpl|searchId|prototype|Название|Шаблон}}


<code>getGenerator</code> возвращает JSON-массив id, найденных в генераторе. <code>getTplGenerator</code> по тем же id сразу вызывает шаблон, используя страницу вида <code>prototype/generatorId.json</code> или <code>component/generatorId.json</code>.
<code>searchStore</code> возвращает JSON-массив id, найденных в компонентах/прототипах. <code>searchStoreTpl</code> по тем же id сразу вызывает шаблон, используя страницу вида <code>prototype/Название.json</code> или <code>component/Название.json</code>.


Примеры:
Примеры:
* {{tji|GetField|getGenerator|MopItem|prototype|itemGenerator}}
* {{tji|GetField|функция{{=}}searchStore|MopItem|component|itemBorgModule}} -> {{GetField|функция=searchStore|MopItem|component|itemBorgModule}}
* {{tji|GetField|getTplGenerator|MopItem|prototype|itemGenerator|Предмет}}
* {{tji|GetField|функция{{=}}searchStore|MopItem|prototype|latheRecipe}} -> {{GetField|функция=searchStore|MopItem|prototype|latheRecipe}}


{{Параметры|
{{Параметры|
{{Параметры/строка|1|Id, который ищется в хранилище генераторов.|Да}}
{{Параметры/строка|1|Id, который ищется в хранилище.|Да}}
{{Параметры/строка|2|Тип генератора: <code>prototype</code> или <code>component</code>.|Да}}
{{Параметры/строка|2|Тип: <code>prototype</code> или <code>component</code>.|Да}}
{{Параметры/строка|3|Имя генератора без <code>.json</code>.|Да}}
{{Параметры/строка|3|Имя хранилищя без <code>.json</code>.|Да}}
{{Параметры/строка|4|Имя шаблона для <code>getTplGenerator</code>.|Только для <code>getTplGenerator</code>}}
{{Параметры/строка|4|Имя шаблона, который будет вызван для каждого найденного id.|Только для <code>searchStoreTpl</code>}}
}}
}}


=== GeneratorId / GeneratorTplId ===
=== getAll / getAllTpl ===
Эти функции получают все id из генераторной JSON-страницы, где данные лежат в таблице <code>id</code>.
Эти функции получают все id прототипов или компонентов.


Использование:
Использование:
* {{tji|GetField|GeneratorId|pagePath}}
* {{tji|GetField|функция{{=}}getAll|pagePath}}
* {{tji|GetField|GeneratorId|pagePath|replace{{=}}{{tag|nowiki|style=regular|content=<nowiki>* \1</nowiki>}}}}
* {{tji|GetField|функция{{=}}getAllTpl|pagePath|template}}
* {{tji|GetField|GeneratorTplId|pagePath|template}}
 
<code>GeneratorId</code> по умолчанию возвращает JSON-массив id. Если указан <code>replace</code>, каждый id сначала прогоняется через <code>replace</code>, а затем строки собираются через перенос строки.


<code>GeneratorTplId</code> вызывает шаблон для каждого id из генератора в виде <code><nowiki>{{Имя шаблона|id=...|...поля записи...}}</nowiki></code>.
<code>getAll</code> по умолчанию возвращает JSON-массив id.
<code>getAllTpl</code> вызывает шаблон для каждого id в виде <code><nowiki>{{Имя шаблона|id=...|...поля записи...}}</nowiki></code>.


Примеры:
Примеры:
* {{tji|GetField|GeneratorId|prototype/itemGenerator.json}}
* {{tji|GetField|функция{{=}}getAll|component/staticPrice.json}} -> выводит все id сущностей с этим компонентом в формате JSON
* {{tji|GetField|GeneratorId|prototype/itemGenerator.json|replace{{=}}{{tag|nowiki|style=regular|content=<nowiki>* \1</nowiki>}}}}
* {{tji|GetField|функция{{=}}getAllTpl|component/staticPrice.json|component/staticPrice/wrapper}} -> выводит все id сущностей с этим компонентом обёрнутым в шаблон {{шс|component/staticPrice/wrapper}}
* {{tji|GetField|GeneratorTplId|prototype/itemGenerator.json|Предмет}}


{{Параметры|
{{Параметры|
{{Параметры/строка|1|Путь до генераторной JSON-страницы.|Да}}
{{Параметры/строка|1|Путь до JSON-страницы.|Да}}
{{Параметры/строка|2|Имя шаблона для <code>GeneratorTplId</code>.|Только для <code>GeneratorTplId</code>}}
{{Параметры/строка|2|Имя шаблона для <code>getAllTpl</code>.|Только для <code>getAllTpl</code>}}
{{Параметры/строка|replace|Строка замены для <code>GeneratorId</code>. Если задана, результат выводится построчно вместо JSON-массива.|Нет}}
{{Параметры/строка|replace|Строка замены для <code>getAll</code>. Если задана, результат выводится построчно вместо JSON-массива.|Нет}}
}}
}}


Строка 145: Строка 150:


Использование:
Использование:
* {{tji|GetField|jsonList|<nowiki>["a","b","c"]</nowiki>}}
* {{tji|GetField|функция{{=}}jsonList|<nowiki>["a","b","c"]</nowiki>}}
* {{tji|GetField|jsonList|<nowiki>{"MopItem":"Швабра"}</nowiki>}}
* {{tji|GetField|функция{{=}}jsonList|<nowiki>{"MopItem":"Швабра"}</nowiki>}}
* {{tji|GetField|jsonList|<nowiki>{"MopItem":"Швабра"}</nowiki>|type{{=}}enum}}
* {{tji|GetField|функция{{=}}jsonList|<nowiki>{"MopItem":"Швабра"}</nowiki>|type{{=}}enum}}


Основные параметры:
Основные параметры:
Строка 153: Строка 158:
* <code>prefix</code> — префикс строки для режима списка. По умолчанию <code>* </code>.
* <code>prefix</code> — префикс строки для режима списка. По умолчанию <code>* </code>.
* <code>sep</code> — разделитель между ключом и значением. По умолчанию <code>: </code>.
* <code>sep</code> — разделитель между ключом и значением. По умолчанию <code>: </code>.
* <code>replace</code> — дополнительная обработка уже собранной строки.
* <code>replace</code> — дополнительная обработка регулярным выражением уже собранной строки.
* <code>key_replace</code>, <code>value_replace</code> — обработка ключей и значений по отдельности.
* <code>key_replace</code>, <code>value_replace</code> — обработка ключей и значений регулярным выражением по отдельности.


Примеры:
Примеры:
* {{tji|GetField|jsonList|<nowiki>["a","b","c"]</nowiki>}}
* {{tji|GetField|функция{{=}}jsonList|<nowiki>["a","b","c"]</nowiki>}}
* {{tji|GetField|jsonList|<nowiki>{"MopItem":"Швабра"}</nowiki>|type{{=}}list}}
* {{tji|GetField|функция{{=}}jsonList|<nowiki>{"MopItem":"Швабра"}</nowiki>|type{{=}}list}}
* {{tji|GetField|jsonList|<nowiki>{"MopItem":"Швабра"}</nowiki>|type{{=}}none|key_replace{{=}}{{tag|nowiki|style=regular|content=<nowiki>[[\1]]</nowiki>}}}}
* {{tji|GetField|функция{{=}}jsonList|<nowiki>{"MopItem":"Швабра"}</nowiki>|type{{=}}none|key_replace{{=}}{{tag|nowiki|style=regular|content=<nowiki>[[\1]]</nowiki>}}}}


{{Параметры|
{{Параметры|
Строка 174: Строка 179:


Использование:
Использование:
* {{tji|GetField|json|<nowiki>{"MopItem":{"name":"Швабра"}}</nowiki>|Предмет}}
* {{tji|GetField|функция{{=}}json|<nowiki>{"MopItem":{"name":"Швабра"}}</nowiki>|Предмет}}


Если значение по id является объектом, его поля разворачиваются в параметры шаблона. Если значение простое, оно передаётся как <code>value=...</code>.
Если значение по id является объектом, его поля разворачиваются в параметры шаблона. Если значение простое, оно передаётся как <code>value=...</code>.
Строка 194: Строка 199:
* Если запись, поле или JSON-страница не найдены, функции обычно возвращают пустую строку.
* Если запись, поле или JSON-страница не найдены, функции обычно возвращают пустую строку.
* Функция <code>get</code> возвращает таблицы в JSON-виде.
* Функция <code>get</code> возвращает таблицы в JSON-виде.
* В <code>getId</code> и <code>getTplId</code> значения сравниваются как строки.
* В <code>searchId</code> и <code>searchIdTpl</code> значения сравниваются как строки.
* Параметр <code>keyPath</code> поддерживает доступ к вложенным полям и индексам.
* Параметр <code>keyPath</code> поддерживает доступ к вложенным полям и индексам.
* <code>getTpl</code> и <code>getTplId</code> удобны, когда нужно не получить сырые данные, а сразу отрендерить карточку или другой шаблон.
* <code>getTpl</code> и <code>searchIdTpl</code> удобны, когда нужно не получить сырые данные, а сразу отрендерить карточку или другой шаблон.
* Функции с <code>Generator</code> работают только с генераторными страницами и хранилищами, где структура данных уже подготовлена под поиск по id.
* Функции с <code>searchStore</code> работают только с генераторными страницами и хранилищами, где структура данных уже подготовлена под поиск по id.
* <code>json</code> и <code>jsonList</code> ожидают корректный JSON; если строка не разбирается, результат будет пустым.
* <code>json</code> и <code>jsonList</code> ожидают корректный JSON; если строка не разбирается, результат будет пустым.