Этот модуль Lua используется примерно на 4 720 000 страницах, или примерно на 9% всех страниц. Чтобы избежать серьезных сбоев и нагрузки на сервер, любые изменения следует тестировать на подстраницах модуля / sandbox или / testcases , или в изолированной программной среде вашего собственного модуля . Протестированные изменения могут быть добавлены на эту страницу одним редактированием. Обсудите изменения на странице обсуждения, прежде чем внедрять их. |
Этот модуль подлежит защите страницы . Это хорошо заметный модуль, который используется на очень большом количестве страниц или очень часто заменяется . Поскольку вандализм или ошибки могут повлиять на многие страницы, и даже простое редактирование может вызвать значительную нагрузку на серверы, они защищены от редактирования. |
Вспомогательный модуль для облегчения преобразования замещенного шаблона в шаблонное включение.
Шаблоны обслуживания, такие как {{ Требуется цитирование }} или {{ Refimprove }}, ни в коем случае нельзя заменять. Уловка, которую следует избегать, заключается в том, чтобы заменить включенную форму шаблоном.
Инфобоксы должны использовать Module: Unsubst-infobox , как и любые другие шаблоны с параметрами, перечисленными по умолчанию в формате блока.
Применение
Чтобы превратить шаблон в самозаменяющийся шаблон, оберните существующий код шаблона следующим образом:
{{SAFESUBST: <noinclude /> # invoke: Unsubst || $ B = [... существующий код шаблона ...]}}
Вики-текст, отображаемый без подстановки, должен быть обозначен как «$ B». Все остальные параметры, переданные в #invoke, будут скопированы в сгенерированный вызов шаблона как значения по умолчанию. Если значение любого из этих параметров по умолчанию равно __DATE__
, это значение в сгенерированном вызове шаблона будет текущим месяцем и годом.
Некоторые шаблоны имеют, <noinclude>
но не имеют соответствия </noinclude>
в конце шаблона. В таких случаях недостающее </noinclude>
должно быть добавлено перед финалом }}
.
Передовой
{{SAFESUBST: <noinclude /> # invoke: Unsubst || $ params = [параметры] | $ aliases = [псевдонимы] | $ flags = [flags] | $ B = [... существующий код шаблона ...]}}
Из-за ограничений Lua параметры обычно упорядочиваются случайным образом при замене шаблона. |$params=
можно использовать в #invoke: Unsubst для перечисления параметров шаблона по порядку, через запятую (например egg,bacon,sausage,cheese,spam
). Пронумерованные параметры должны быть перед другими в списке. Любые оставшиеся параметры добавляются в конец сгенерированного вызова.
Псевдонимы параметров могут быть перечислены в |$aliases=
(и не должны указываться в |$params=
) и будут заменены автоматически. Каждый псевдоним и его замена должны быть отформатированы как alias>replacement
, и каждая из этих пар должна быть разделена запятыми (например œuf>egg,melt>cheese
). Обратите внимание, что этот параметр может работать как с, так и без него |$params=
.
Параметр |$flags=
может использоваться для изменения других аспектов поведения модуля; записи разделяются запятыми. Допустимые флаги: override
(позволяет параметрам в #invoke: иметь приоритет над параметрами в исходном вызове шаблона); keep-whitespace
(предотвращает удаление пробелов из безымянных параметров); и remove-empty
(удаляет пустые параметры).
Этими параметрами можно управлять с помощью функций синтаксического анализатора для предоставления более сложных опций (обратите внимание, что в параметрах должна быть также указана любая функция синтаксического анализатора, шаблон или вызов модуля SAFESUBST:<noinclude />
).
Пример
Рассмотрим шаблон Template: пример, содержащий следующий код:
{{SAFESUBST: <noinclude /> # invoke: Unsubst || foo = bar | date = __ DATE__ | $ B = [... Код шаблона находится здесь ...]}}
Оригинал | Результат |
---|---|
{{subst:example}} | {{Example|date=May 2021}} |
{{subst:example|foo=X}} | {{Example|foo=X|date=May 2021}} |
{{subst:example|baz=X}} | {{Example|baz=X|date=May 2021}} |
{{subst:example|date=January 2001}} | {{Example|foo=bar|date=January 2001}} |
local checkType = require ( 'libraryUtil' ). checkTypeместный p = {}местное BODY_PARAM = '$ B'local specialParams = {[ '$ params' ] = 'список параметров' ,[ '$ aliases' ] = 'псевдонимы параметров' ,[ '$ flags' ] = 'флаги' ,[ '$ B' ] = 'содержимое шаблона'}функция p . основной ( каркас , корпус )- Если мы выполняем подстановку, эта функция возвращает вызов шаблона, а если- нет, возвращает тело шаблона. Тело шаблона можно указать в- параметр body или параметр шаблона, определенный в- Переменная BODY_PARAM. Эту функцию можно вызвать из Lua или из- #invoke.- Вернуть тело шаблона, если мы не выполняем подстановку.если не мв . isSubsting (), затемесли body ~ = nil, товернуть телоelseif кадр . args [ BODY_PARAM ] ~ = ноль, тогдавозвратный фрейм . аргументы [ BODY_PARAM ]ещеошибка ( string.format ("содержимое шаблона не указано (используйте параметр '% s' из #invoke)" ,BODY_PARAM), 2 )конецконец- Проверка работоспособности фрейм-объекта.если type ( frame ) ~ = 'table'или введите ( frame . getParent ) ~ = 'function'или нет кадра : getParent ()тогдаошибка («аргумент №1 для 'main' должен быть объектом фрейма с родителем» .."рамка доступна" ,2)конец- Найдите имя вызова.local mTemplateInvocation = require ( 'Модуль: вызов шаблона' )локальное имя = mTemplateInvocation . имя ( фрейм : getParent (): getTitle ())- Объединить переданные аргументы с переданными значениями по умолчаниюместные аргументы = {}если string.find ( ',' .. ( frame . args [ '$ flags' ] или '' ) .. ',' , ',% s * переопределяет% s *,' ), тодля k , v в парах ( frame : getParent (). args ) делаемargs [ k ] = vконецдля к , v в парах ( кадр . арг ) делаютесли не specialParams [ k ], тоесли v == '__DATE__' тоv = mw . getContentLanguage (): formatDate ( 'F Y' )конецargs [ k ] = vконецконецещедля к , v в парах ( кадр . арг ) делаютесли не specialParams [ k ], тоесли v == '__DATE__' тоv = mw . getContentLanguage (): formatDate ( 'F Y' )конецargs [ k ] = vконецконецдля k , v в парах ( frame : getParent (). args ) делаемargs [ k ] = vконецконец- Параметры обрезки, если не указано иноеесли не string.find ( ',' .. ( frame . args [ '$ flags' ] или '' ) .. ',' , ',% s * keep% -whitespace% s *,' ) тогдадля k , v в парах ( args ) do args [ k ] = mw . ustring . match ( v , '^% s * (. *)% s * $' ) или '' конецконец- Получение информации из псевдонимов параметровлокальные псевдонимы = {}если рамка . args [ '$ aliases' ] тогдалокальный список = mw . текст . split ( frame . args [ '$ aliases' ], '% s *,% s *' )для k , v в ipairs ( список ) сделатьместный tmp = mw . текст . split ( v , '% s *>% s *' )псевдонимы [ tonumber ( mw . ustring . match ( tmp [ 1 ], '^ [1-9] [0-9] * $' )) или tmp [ 1 ]] = (( tonumber ( mw . ustring . match ( tmp [ 2 ], '^ [1-9] [0-9] * $' ))) или tmp [ 2 ])конецконецдля к , v в пар ( псевдонимами ) делаютесли args [ k ] и ( не args [ v ] или args [ v ] == '' ), тоargs [ v ] = args [ k ]конецargs [ k ] = нольконец- Удалите пустые параметры, если они указаныif string.find ( ',' .. ( frame . args [ '$ flags' ] или '' ) .. ',' , ',% s * remove% -empty% s *,' ) тогдаместный tmp = 0для k , v в ipairs ( args ) делаемесли v ~ = '' или ( args [ k + 1 ] и args [ k + 1 ] ~ = '' ) или ( args [ k + 2 ] and args [ k + 2 ] ~ = '' ), тоtmp = kещеперерывконецконецдля k , v в парах ( args ) делаемесли v == '', тоесли нет ( type ( k ) == 'number' и k < tmp ), то args [ k ] = nil endконецконецконец- Параметры заказаесли рамка . args [ '$ params' ] тогдалокальные параметры , tmp = mw . текст . split ( frame . args [ '$ params' ], '% s *,% s *' ), {}для k , v в ipairs ( params ) делаемv = ToNumber ( мвт . ustring . сопрягать ( v , '^ [1-9] [0-9] * $' )) или vесли args [ v ], то tmp [ v ], args [ v ] = args [ v ], nil endконецдля k , v в парах ( args ) do tmp [ k ], args [ k ] = args [ k ], nil endargs = tmpконецвернуть mTemplateInvocation . вызов ( имя , аргументы )конецp [ '' ] = p . main - для обратной совместимостивернуть p