Как я могу заменить волшебное слово только при включении шаблона без использования #invoke?

Я пытаюсь сделать шаблон, показывающий время его размещения. Я пробовал это:

This is a template ({{<includeonly>subst:</includeonly>CURRENTTIMESTAMP}})

но при включении он будет отображаться как This is a template ({{subst:CURRENTTIMESTAMP}}) вместо замены отметки времени. затем я попытался

This is a template ({{{{{|safesubst:}}}CURRENTTIMESTAMP}})

но это не заменило его; временная метка будет обновляться. Далее я попытался

This is a template ({{<includeonly>{{{|safesubst:}}}</includeonly>CURRENTTIMESTAMP}})

но без кубиков.

Я знаю, что это возможно с {{#invoke:}}, но у меня нет такой возможности. Может ли кто-нибудь помочь мне?


person Ken Hilton    schedule 18.07.2017    source источник
comment
Как шаблон узнает, что какая-то страница, включающая его, была отредактирована? Вы можете подставить шаблон, тогда ваш первый пример будет работать. В противном случае, где вы ожидаете, что временная метка будет храниться?   -  person Tgr    schedule 18.07.2017
comment
@Tgr Цель состоит в том, чтобы шаблон экономил время при его первом размещении (включение или замены), поскольку вики, над которой я работаю, мало что знает о замене.   -  person Ken Hilton    schedule 19.07.2017
comment
Ну, вы не сможете сделать это с помощью простой трансклюзии.   -  person Tgr    schedule 19.07.2017


Ответы (1)


Рассмотрим, как хранятся шаблоны. Если вы рекурсивно подставляете шаблон, содержимое шаблона сохраняется в вики-тексте включающей страницы с заменой CURRENTTIMESTAMP на фактическую метку времени. Если вы не подставите шаблон, викитекст будет содержать только {{MyTemplate}}, а временная метка редактирования нигде не сохраняется; когда синтаксический анализатор отображает статью и встречает CURRENTTIMESTAMP, он просто использует текущую временную метку. Обойти это невозможно, #invoke или нет.

Что вы можете сделать, так это сделать временную метку параметром, поэтому на странице включения вы должны написать {{MyTemplate|{{subst:CURRENTTIMESTAMP}}}}, а затем временная метка будет сохранена на странице. Вы можете создать шаблон-оболочку с точно таким же содержимым, чтобы пользователям нужно было набирать только {{subst:MyTemplateWrapper}}, что немного проще. Вы даже можете заставить шаблон показывать ошибку/добавлять категорию ошибки при использовании без подстановки, хотя это немного сложнее.

person Tgr    schedule 20.07.2017
comment
Благодарю вас! Думаю, я воспользуюсь вторым упомянутым вами методом ({{subst:TemplateWrapper}}) и добавлю сообщение об ошибке, если оно включено. Поскольку это ответило на мой вопрос, я отмечу его как принятый :) - person Ken Hilton; 21.07.2017
comment
На самом деле, я обнаружил, что {{{{{|safesubst:}}}CURRENTTIMESTAMP}} работает лучше (отредактировано, чтобы показать это). - person Ken Hilton; 21.07.2017