Использование подобъектов 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}}

соответственно.

Эти ссылки могут быть полезны позже:

Другие вопросы по тегам