Использование подобъектов SMW без дублирования контента
Пример того, чего я хочу достичь
У меня есть много страниц исправлений ("Патч 1.4", "Патч 1.5" и т. Д.), В которых перечисляются изменения, которые были внесены в проект, где затронутые / измененные объекты связаны с соответствующими страницами ("Диалог подтверждения", "foo")., так далее.):
Патч 1.4
- Исправлено написание в [[диалоге подтверждения]]
Патч 1.5
- Добавлены две опции: [[foo]], [[bar]]
На страницах о том, что было изменено ("диалог подтверждения", "foo", …), я хочу автоматически показать все соответствующие изменения:
Foo
- [[Патч 1.5]]: добавлены две опции: [[foo]], [[bar]]
Подобъекты Semantic MediaWiki могут сделать это
#subobject
позволяет мне создавать (анонимный) объект для каждого изменения на страницах исправлений:
{{#subobject:|
|Changes=Added two options: [[foo]], [[bar]]
|Affects=Foo|Bar
}}
И на каждой странице ("Foo" и т. Д.) Я могу включить #ask
запрос подобъекта, чтобы перечислить все соответствующие подобъекты:
{{#ask: [[Affects::{{FULLPAGENAME}}]]
|? Changes
}}
Отлично.
Проблема: я должен дублировать запись об изменении.
На страницах исправлений запись об изменении выглядит следующим образом:
* Added two options: [[foo]], [[bar]] {{#subobject:|
|Changes=Added two options: [[foo]], [[bar]]
|Affects=Foo|Bar
}}
Поэтому я должен указать "Добавлены две опции: [[foo]], [[bar]]" два раза: один раз для видимого содержимого, один раз для невидимого подобъекта.
Есть ли способ в (Semantic) MediaWiki сделать это без дублирования контента?
Идеальное решение просто потребовало бы, чтобы я приложил запись об изменении и указал соответствующие страницы рядом с ней, например:
* {{ Added two options: [[foo]], [[bar]] }}((foo|bar))
Поскольку каждая страница патча может содержать сотни изменений, я не хочу создавать отдельную страницу для каждого изменения.
1 ответ
Если я ясно понимаю ваш вопрос, кажется, вам просто нужен простой запрос:
{{#ask: [[-Has subobject::{{FULLPAGENAME}}]]
| ?Changes
| format = ul
| headers = hide
| mainlabel = -
}}
Поскольку использование разметки SMW может быть утомительным и подверженным ошибкам, вы также можете использовать шаблоны MediaWiki. Вы можете упростить добавление изменений патча:
Шаблон: Изменить
<includeonly><!--
-->{{#subobject:|
| Changes = {{{1|}}}
| Affects = {{{2|}}}|+sep=;
}}<!--
--></includeonly><nowiki/>
{{{1}}}
а также {{{2}}}
позиционный параметр, с и Affects
свойство подобъекта использует ;
сепаратор (как труба |
является неоднозначным и может нарушать шаблоны, функции парсера и т. д.). <nowiki/>
это своего рода хакерское спасение от вздутия пустого пространства на страницах сайта вызовов.
Вы также можете добавить специальный шаблон, который инкапсулирует запрос изменений:
Шаблон: патч изменения
<includeonly><!--
-->{{#ask: [[-Has subobject::{{{1|{{FULLPAGENAME}}}}}]]
| ?Changes
| format = ul
| headers = hide
| mainlabel = -
}}<!--
--></includeonly><nowiki/>
По умолчанию шаблон запрашивает список изменений для текущей страницы (если аргумент позиционного параметра #1 пуст), или вы можете явно переопределить его на сайте вызова позже (скажем, {{Patch changes|Patch 1.5}}
).
Патч 1.4
{{Change | Fixed spelling in the [[confirmation dialog]] | Confirmation dialog}}
{{Patch changes}}
Патч 1.5
{{Change | Added two options: [[foo]], [[bar]] | Foo; Bar}}
{{Patch changes}}
соответственно.
Эти ссылки могут быть полезны позже: