Шаблоны- оболочки - это внешние шаблоны, которые охватывают более простые внутренние шаблоны, чтобы значительно расширить базовую функциональность внутренних шаблонов. Идея состоит в том, чтобы структурировать базовые внутренние шаблоны, которые будут использоваться в качестве служебных инструментов различными внешними шаблонами-оболочками.
Опыт показал, что когда базовые шаблоны были реструктурированы с добавлением полного набора опций, которые должны быть использованы, были созданы многочисленные варианты шаблонов-оболочек для расширения функциональности шаблонов с помощью большого количества новых функций.
Шаблоны оболочки могут быть полезны для консолидации , поскольку они позволяют шаблонам строиться друг на друге, тогда как копирование и вставка шаблонов может усложнить их обслуживание.
Простой пример
Функция Template: Exams состоит в том, чтобы разместить на своей пользовательской странице поле с сообщением о том, что он проходит вики-перерыв, чтобы сосредоточиться на экзаменах. Более общий шаблон для wikibreaks, Template: Wikibreak , уже существует, поэтому вместо его дублирования, {{ Exams }} просто состоит из вызова {{ Wikibreak }} с некоторыми указанными параметрами, такими как изображение книг, а не изображение заката по умолчанию.
Пример с заменой
Шаблон: «Не пинговать» - вставляет на страницу обсуждения сообщение о том, что пользователь следит за страницей и не нуждается в пинге в ответах. Он вызывает Template: Please ping с no
указанным параметром. Это становится немного сложнее, потому что можно заменить {{ Не пинговать }}. Для решения этой проблемы используется фактический код {{safesubst:
.
Более сложный пример
Одним из наиболее успешных приложений использования шаблонов-оболочек было расширение возможностей Template: Convert , который изначально мог обрабатывать только однозначные или двухзначные диапазоны преобразований измерений как простые числа в тексте. Однако после того как внутренние подшаблоны {Convert} были изменены, чтобы при необходимости отображать только необработанные значения, названия единиц измерения или символы единиц измерения, было создано множество шаблонов оболочки для обработки сложных диапазонов из 4 величин с числами, отформатированными как цифры с пробелами или прописанные слова:
- Шаблон: Convert - оригинальный конвертер для одно- или двухзначных диапазонов.
- {{Convert / 2}} - конвертер для любого диапазона, за пределами Convert
- {{Convert / 3}} - конвертер для трехзначных диапазонов, не разрешенный {Convert} до 2014 г.
- {{Convert / 4}} - конвертер для 4-значных диапазонов с текстом произвольной формы, выходящим далеко за рамки {Convert}
Шаблон {Convert / 4} можно использовать для преобразования 4 сумм одновременно, как одну мысль, например, показать общие размеры пиломатериалов для 2 досок одновременно или, возможно, для 2 спален одновременно:
- {{convert / 4 | 2 | x | 4 | или широкий | 1 | x | 6 | дюйм | см}} → {{convert / 4 | 2 | x | 4 | или широкий | 1 | x | 6 | дюйм | см}}
- {{convert / 4 | 15 | x | 18 | со второй спальней | 12 | x | 15 | ft | m}} → {{convert / 4 | 15 | x | 18 | со второй спальней | 12 | x | 15 | ft | m}}
Между тем, {Convert / spell} без добавления сложности внутри {Convert} может отображать огромные числа, простые дроби или десятичные дроби, все как прописанные слова:
- {{convert / spell | 67 | km | mi}} → шестьдесят семь километров (42 миль)
- {{convert / spell | 67 | km | mi | words = out}} → шестьдесят семь километров (сорок две мили)
- {{convert / spell | 3/8 | lb | кг}} → три восьмых фунта (0,17 кг)
В конце концов, после доработки {Convert / spell}, {Convert} был переписан в скрипте Lua с новыми опциями "spell = in" или "spell = on":
- {{convert | spell = in | 1,000,3 | m | ft}} → одна тысяча целых три метра (3 282 фута)
- {{convert | spell = on | 7,500,000,000,004 | mi | ly}} → семь триллионов пятьсот миллиардов четыре мили (одна целая две семь пять восемь ноль восемь четыре шесть два шесть семь пять один световой год)
- {{convert | spell = on | 9 | ft | m | frac = 10}} → девять футов (две и семь десятых метра)
Форматирование чисел в слова настолько сложное, с таким большим количеством деталей, что потребовались месяцы, чтобы выявить проблемы в некоторых конкретных фразах с большими числами. Если исходный шаблон {Convert} был изменен, чтобы попытаться отобразить слова или обработать 4-значные диапазоны, то, возможно, потребовались бы годы, чтобы переписать {Convert} и расширить все связанные тысячи подшаблонов, чтобы обеспечить тот же уровень точность как шаблоны обертки.
Шаблоны
- {{ использует Infobox person }}
- {{ wrapper }}
- {{ шаблон оболочки }}
- {{ wraps infobox }}
Смотрите также
- Википедия: Расширенное редактирование статей
- Википедия: Расширенное форматирование таблиц
- Википедия: Расширенное форматирование текста
- Википедия: Консолидация инфобоксов
- Википедия: ошибка Фонда Викимедиа