Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Многие ящики пользователей и другие шаблоны автоматически добавляют страницы, на которых они появляются, в различные категории . Эта функция не всегда желательна, и процесс отключения или подавления автоматической категоризации в шаблонах называется подавлением категорий . В этом руководстве описаны несколько различных методов подавления автоматической категоризации и приведены примеры для каждого метода. Нет никаких политик или строгих правил в отношении подавления категорий; однако в этом руководстве описаны методы де-факто, используемые для реализации подавления категорий в англоязычной Википедии.

Справочная информация [ править ]

Многие шаблоны и ящики пользователей предназначены для автоматического добавления страниц в одну или несколько категорий. Есть много причин, по которым это может быть полезно. Ящики пользователей могут группировать пользователей в различные категории Википедии на основе интересов. Заголовки WikiProject группируют связанные страницы, чтобы членам WikiProject было легче их найти. Другие шаблоны помечают статьи для определенных действий, добавляя статьи в административные категории.

Это может быть действительно полезная и мощная функция, но она также может немного сбивать с толку, если кто-то хочет отобразить шаблон где-то еще, а не там, где он был изначально предназначен, например, на странице справки или в галерее шаблонов. Страница справки или галерея будут помечены как любая другая страница, на которой появляется шаблон, а это часто нежелательно. Например, страницу, демонстрирующую шаблон удаления, не следует помечать для удаления. В этом случае желательно отключить автоматическую категоризацию страницы. Это называется подавлением категории .

В самом шаблоне довольно легко подавить такие проблемы категоризации с помощью разметки <includeonly> и <noinclude>. Однако эти функции не помогают при отображении шаблона в качестве примера на странице справки или в галерее.

За счет небольшой дополнительной обработки на сервере и того, что код шаблона становится немного сложнее для чтения людьми, шаблоны или простая функция синтаксического анализатора могут подавлять автоматическую категоризацию в определенных пространствах имен или в любом месте, когда используются определенные атрибуты шаблона.

На протяжении многих лет одновременно разрабатывались несколько различных методов подавления категорий, поэтому не существует единого или «лучшего» метода подавления категорий. Некоторые методы работают лучше в одних ситуациях, а другие - в других. Разработчики шаблонов могут выбирать любой из следующих методов для подавления автоматических категорий, но их просят четко задокументировать, какой метод используется в документации шаблона. Требуется, чтобы новые шаблоны следовали предпочтительным методам (когда несколько методов достигают одного и того же результата). Старые шаблоны, которые не используются активно, также могут быть изменены для использования предпочтительных методов. Нет смысла адаптировать часто используемые шаблоны для использования предпочтительных методов, если нет другой веской причины для изменения шаблона.

Использование [ править ]

Шаблоны, которые используют подавление на основе пространства имен , не требуют какой-либо настройки редактором для подавления автоматической категоризации вне предполагаемого пространства имен (например, шаблоны статей не будут классифицировать страницы обсуждения или страницы пользователей).

Шаблоны подавления на основе атрибутов используют либо |nocat=true(предпочтительно), либо |categories=no(альтернативный вариант) для подавления автоматической категоризации. Везде, где эта категоризация должна быть подавлена, просто добавьте |nocat=trueили |categories=noв качестве последнего атрибута для шаблона, и (при условии, что шаблон реализован правильно) шаблон не будет добавлять страницу ни в одну из категорий. Обратитесь к документации к каждому шаблону, чтобы определить, какой из двух атрибутов использовать.

Методы подавления категорий[ редактировать ]

Методы подавления категорий делятся на следующие методы:

  1. В зависимости от пространства имен страницы категоризация включена или отключена.
  2. Атрибуты шаблона передаются в шаблон специально для подавления автоматической категоризации страниц.
  3. Смешанное подавление использует оба других метода вместе для удовлетворения сложных потребностей.
  4. Использование черного списка имен страниц, которые не следует категоризировать - например, см. Шаблон: Обработчик категорий

Подавление на основе пространства имен[ редактировать ]

Обзор [ править ]

Шаблоны, предназначенные для добавления только на определенные типы страниц (статьи, страницы обсуждения, категории, другие шаблоны, страницы проектов и т. Д.), Вероятно, получат наибольшую выгоду от этого метода. Используя этот метод, шаблоны могут автоматически определять тип страницы, на которой они находятся, и классифицировать только страницы, которые находятся в правильном пространстве имен . Например, шаблон, который помечает статьи, требующие дополнительных ссылок, может использовать этот метод только для категоризации статей и подавления категоризации везде, где еще присутствует шаблон, например, на страницах документации шаблона.

Плюсы [ править ]

  • Очень простой метод подавления категорий для шаблонов, которые должны категоризировать только одно пространство имен
  • Легко добавить функцию в шаблон
  • Не полагается на то, что кто-то помнит о добавлении особых атрибутов

Минусы [ править ]

  • Может быть не лучшим выбором для шаблонов, чем можно использовать более чем в одном пространстве имен.
  • Поддержку множественных пространств имен труднее реализовать правильно
  • Редакторы могут быть не так знакомы с этим методом, поскольку используют атрибуты.

Примеры приведены ниже.

Подавление на основе атрибутов[ редактировать ]

Обзор [ править ]

Автоматическая категоризация всегда включена в этих шаблонах по умолчанию. Любая страница, на которой появляется шаблон, автоматически классифицируется, если в шаблон не передан один из двух специальных атрибутов. Это хороший выбор для шаблонов, которые используются в нескольких пространствах имен . Например, шаблон для помощи при наборе текста, который можно использовать в статьях, страницах обсуждений, страницах проектов, страницах пользователей и порталах, может быть хорошим выбором.

Плюсы [ править ]

  • Простой и знакомый метод подавления автоматической категоризации по явному запросу редактора страницы
  • Легко добавить функцию в шаблон
  • Работает во всех пространствах имен

Минусы [ править ]

  • Заставляет редакторов не забывать подавлять автоматическую категоризацию на страницах, на которых требуется подавление категорий.
  • Возможно, это не лучший выбор для шаблонов, разработанных для одного пространства имен.

Примеры приведены ниже.

Смешанное подавление[ редактировать ]

Обзор [ править ]

Это наиболее универсальный и сложный метод подавления категорий. Используя оба предыдущих метода, вы можете комбинировать категоризацию / подавление по умолчанию на основе пространства имен с атрибутами, чтобы изменять действие по умолчанию в каждом конкретном случае. Это не обязательно для большинства шаблонов, но может быть полезно в некоторых более сложных мета-шаблонах, которые объединяют функции из нескольких связанных шаблонов в один большой шаблон. Это добавляет дополнительную степень сложности в разработке и сопровождении шаблона, которую следует учитывать только для шаблонов, которые уже являются сложными (и вряд ли будут редактироваться начинающими шаблонизаторами) или в которых два предыдущих метода не обеспечивают достаточного контроля.

Плюсы [ править ]

  • Невероятно гибкий и динамичный
  • Полный контроль над значениями по умолчанию и исключениями для автоматической категоризации и подавления
  • Мета-шаблоны могут поддерживать старые шаблоны, разработанные с использованием различных методов подавления категорий.

Минусы [ править ]

  • Дополнительная сложность затрудняет поддержку менее опытным шаблонизаторам.
  • Легко настроить неправильно, что может привести к широко распространенной неправильной классификации или видимым ошибкам шаблонов на нескольких страницах.
  • Логика автоматической категоризации и подавления может быть неочевидна без четкой документации.

Примеры приведены ниже.

Шаблоны оболочки [ править ]

  • {{Suppress categories|...}} могут быть размещены вокруг вызова шаблона независимо от того, поддерживает ли шаблон подавление категорий.
  • {{Draft categories|...}} может быть размещен вокруг списка категорий для отображения ссылок на категории вне основного пространства без добавления категорий.

Примеры подавления категорий [ править ]

Примеры подавления на основе пространства имен [ править ]

Этот метод является автоматическим и не требует параметров для включения подавления.

Использование семейства шаблонов {{ Main other }} [ править ]

  • Для автоматической категоризации статей ( главное пространство ) и исключения категорий везде:
    • {{Main other|[[Category:Example]]|<!-- Don't categorize when not in main (article) space. -->}}
  • Для всех страниц обсуждения ( Обсуждение: , Обсуждение: , Обсуждение файла: и другое Обсуждение пространств имен ):
    • {{Talk other|[[Category:Example]]|<!-- Don't categorize when not in talk space. -->}}
  • Для страниц-шаблонов ( Шаблон: пространство имен ):
    • <includeonly>{{Template other|[[Category:Example]]|<!-- Don't categorize when not in template space. -->}}</includeonly>
Если ваш шаблон классифицируется в пространстве шаблонов, вам необходимо окружить код категоризации <includeonly></includeonly>, иначе сам ваш шаблон будет отнесен к категории.

Существуют также {{ user other }}, {{ wikipedia other }}, {{ file other }}, {{ help other }}, {{ category other }} и {{ portal other }} для обработки других пространств имен.

Использование шаблона {{ Namespace detect }} [ править ]

Если автоматическая категоризация / подавление требуется в нескольких пространствах имен или если вам нужно использовать разные категории в разных пространствах имен, используйте мощный шаблон:{{Namespace detect}}

<includeonly> {{



Обнаружение пространства имен | main = [[Категория: Категория статьи ]] | ток = [[Категория: Обсуждение категории ]] | template = [[Категория: Категория шаблона ]] | other = <! - Не разделять по категориям, если они не находятся в основном месте, в разговоре или в пространстве шаблона ->}} </includeonly>

Использование функций парсера [ править ]

Использование семейства шаблонов - самый простой способ включить подавление категорий на основе пространства имен, но вы также можете использовать функции синтаксического анализатора #ifeq или #switch для достижения той же цели.{{Main other}}

  • Вот простой пример автоматической категоризации статей ( Основное пространство имен) и подавления категорий везде с помощью функции парсера #ifeq :
{{#ifeq: {{NAMESPACE}} | {{ns: 0}} | [[Категория: Категория статьи ]] | <! - Не разделять по категориям, если они не находятся в основном месте (статье). ->}}
  • Другой пример автоматической категоризации / подавления в нескольких пространствах имен с разными категориями с использованием функции парсера #switch :

<includeonly> {{#switch: {{NAMESPACE}}
| = [[Категория: Категория статьи ]]
| Обсуждение = [[Категория: Категория: Обсуждение ]]
| Шаблон = [[Категория: Категория шаблона ]]
| #default = <! - Не разделять по категориям, если они не находятся в основном месте, в разговоре или в пространстве шаблона ->}}
</includeonly>

Примеры подавления на основе атрибутов [ править ]

Следующий метод является рекомендуемым стандартным методом для метода подавления категорий на основе атрибутов.

  • Используется |nocat=falseдля включения автоматической категоризации (в случаях, когда по умолчанию она запрещена)
  • Используйте |nocat=, |nocat=trueили, чтобы подавить категоризацию|nocat=anything else

Другими словами, установка для «nocat» значения, отличного от «false» (даже ничего), не приведет к категоризации.

К сожалению, имена атрибутов подавления категорий ранее не были стандартизированы, что привело к нескольким вариациям. Следующие имена атрибутов, которые обычно используются, чтобы указать, когда следует выполнять подавление категорий:

  • |nocat=true - рекомендуемая стандартная методика
  • |categories=no - делает то же самое, но больше не является рекомендуемым атрибутом
  • |category= - альтернативный метод, но не рекомендуется для большинства ситуаций (причины обсуждаются ниже)
Пример использования, |nocat=когда по умолчанию используется автоматическая категоризация
<includeonly>{{#ifeq: {{lc:{{{nocat|false}}}}} | false |[[Category:Example]]|<!-- Category suppressed -->}}</includeonly>
  • Является функцией анализатора , который определяет ответ на вопрос, «Был ли атрибут с именем nocat передается в этот шаблон?» В противном случае принимается значение по умолчанию « ».{{#ifeq: {{lc:{{{nocat|false}}}}}false
  • Следующая часть | false |сравнивает значение nocat с false, чтобы увидеть, совпадают ли они (т. Е. Было ли nocat явно установлено на false или по умолчанию на false ). Соответствие будет означать, что подавление категорий не должно отключаться (т. Е. Должна выполняться автоматическая категоризация).
  • Если есть совпадение, отобразите категорию или категории, введенные между символами вертикальной черты (« | »).
  • Не забудьте изменить название категории « Пример » на правильную категорию. При необходимости вы можете добавить более одной категории.
  • Символ вертикальной черты и комментарий HTML ( |<!-- Category suppressed -->) - это дополнительная информация, помогающая редакторам понять, что делает шаблон, но их можно опустить для экономии места и пропускной способности.
  • Последние фигурные скобки ( }}) завершают функцию синтаксического анализатора.
Пример использования |categories=noдля подавления категоризации
<includeonly>{{#ifeq: {{lc:{{{categories}}}}} | no ||[[Category:Example]]}}</includeonly>
  • {{#ifeq: {{lc:{{{categories}}}}} | no Является функцией анализатора , который определяет ответ на вопрос, «был атрибут имени категория , переданной в шаблон с набором значений в нет ?» ( lc:преобразует весь текст в нижний регистр для облегчения сопоставления)
  • Следующая часть ||,, ничего не отображает (т. Е. Подавляет категорию), если ответ на этот вопрос верный.
  • Остальной код обычно используется для отображения категории, но появляется только если ответ на вопрос , является ложным (то есть, был не такой набор атрибута не ).
  • Не забудьте изменить название категории « Пример » на правильную категорию.
  • Финал }}завершает функцию парсера.
Примечания по реализации
  • |nocat=trueи |categories=noбыли разработаны для выполнения того же самого, но их очевидная логика обратная (один использует «истина», а другой - «нет», но оба позволяют подавление категорий). Поскольку |categories=noэто менее очевидно (для включения функции полагается на отрицание), и поскольку некоторые шаблоны используют атрибут с именем "категории" для других целей, " |nocat=" является предпочтительным именем атрибута для использования этой функции во всех новых шаблонах (и более старых. если кто-то захочет вернуться и обновить старые шаблоны).
  • Используемые шаблоны, разработанные до 17 мая 2007 г., |nocat=могут работать несколько иначе, чем описано здесь. Они могут распознавать только " |nocat=true", а другие значения могут быть неверно истолкованы.
  • Старые шаблоны могут не использовать lc:функцию синтаксического анализатора для принудительного присвоения значений атрибутов всем символам нижнего регистра для облегчения сопоставления; поэтому рекомендуется, чтобы редакторы всегда использовали строчные значения, чтобы быть в безопасности.
Категория = атрибут

|category=используется некоторыми шаблонами, чтобы избежать использования функции парсера #ifeq . Поскольку имя атрибута «категория» обычно используется для других целей во многих шаблонах (как и «категории» в меньшей степени), «категория» не является рекомендуемым именем атрибута для этой цели. По этой и другим причинам этот метод здесь не обсуждается. Обратите внимание, что он |nocat=может служить той же цели и является рекомендуемой альтернативой.

Примеры смешанного подавления [ править ]

Смешанное подавление объединяет в одном шаблоне методы подавления на основе атрибутов и пространств имен . Поскольку он сочетает в себе оба метода, сложность удваивается. Пожалуйста, убедитесь, что вы полностью понимаете оба других метода, прежде чем пытаться использовать смешанный метод в шаблоне.

Есть несколько способов смешивания. В следующем примере Willscrlt предпочитает реализовывать смешанное подавление (которое должно работать в большинстве случаев и рекомендуется для согласованности).

Процесс состоит в том, чтобы сначала проверить атрибуты, указывающие на то, что категории должны быть запрещены. Если атрибутом запрошено подавление категорий, он отменяет любую категоризацию по умолчанию на основе пространства имен. Если спецификация атрибута не найдена, используйте категоризацию по умолчанию на основе пространства имен. Если атрибут явно требует, чтобы подавление категорий не использовалось, используйте категоризацию по умолчанию на основе пространства имен, если по умолчанию не категоризация. Если по умолчанию не категоризация, используйте атрибут demospace, чтобы переопределить значение по умолчанию и все равно отобразить категорию. Вместе эти параметры предоставляют разработчикам шаблонов значительный контроль над автоматической категоризацией и подавлением категорий за счет более сложного кода шаблона.

Полный пример

<includeonly> {{#ifeq: {{lc: {{{ nocat | false }}}}} | ложь |
{{ Обнаружение пространства имен
| main = [[Категория: Категория статьи ]]
| ток = [[Категория: Обсуждение категории ]]
| template = [[Категория: Категория шаблона ]]
| другое = {{#ifeq: {{lc: {{{ nocat | false }}}}} | правда |
[[Категория: Другая категория ]]
| <! - Если не nocat = true, не разделять по категориям, когда они не находятся в основном, разговоре или пространстве шаблона ->}}
}}

| <! - Категория подавляется атрибутом nocat ->}} </includeonly>

  • Является функцией анализатора , который определяет ответ на вопрос, «Был ли атрибут с именем nocat передается в этот шаблон?» В противном случае принимается значение по умолчанию « ».{{#ifeq: {{lc:{{{nocat|false}}}}}false
  • Следующая часть | false |сравнивает значение nocat с false, чтобы увидеть, совпадают ли они (т. Е. Было ли nocat явно установлено на false или по умолчанию на false ). Соответствие будет означать, что подавление категорий не должно отключаться (т. Е. Должна выполняться автоматическая категоризация).
  • Если есть совпадение, то пространство имен определяется с помощью шаблона.{{Namespace detect}}
    • Если страница находится в основном пространстве имен (статья) ( | main = ), отнесите страницу к категории .[[Category:Article category]]
    • Если страница находится в любом из пространств имен обсуждения ( | talk = ), отнесите страницу к категории ниже .[[Category:Talk category]]
    • Если страница находится в пространстве имен шаблона ( | template = ), отнесите страницу к категории .[[Category:Template category]]
    • Если страница находится в любом другом пространстве имен ( | other = ), категоризация зависит от значения nocat.
      • Если nocatявно установлено значение «true» ( ), тогда отнесите страницу к категории .{{#ifeq: {{lc:{{{nocat|false}}}}}[[Category:Other category]]
      • В противном случае не отображайте ничего, кроме необязательного комментария HTML (символ вертикальной черты и комментарий HTML ( | <!-- Unless nocat=true, don't categorize when not in main, talk, or template space -->) являются дополнительной информацией, чтобы помочь редакторам понять, что делает шаблон, но могут быть опущены для экономии места и пропускной способности)
  • Если совпадений нет, не отображайте ничего, кроме необязательного комментария HTML (символ вертикальной черты и комментарий HTML ( |<!-- Category suppressed by nocat attribute -->) являются необязательной информацией, чтобы помочь редакторам понять, что делает шаблон, но могут быть опущены для экономии места и пропускной способности)
  • Не забудьте изменить названия различных категорий (« Категория статьи », « Категория обсуждения », « Категория шаблона », « Другая категория ») на соответствующие категории. При необходимости вы можете добавить более одной категории.
  • {{Namespace detect}}понимает гораздо больше пространств имен, чем показано здесь, и вы можете использовать любые пространства имен, которые подходят для вашей ситуации. Показанные здесь пространства имен «main», «talk» и «template» являются лишь примерами того, как вы можете использовать эту функцию.

Поддержка более старых реализаций в мета-шаблонах [ править ]

Если вы пытаетесь создать мета-шаблон (шаблон, который объединяет функции двух или более шаблонов в один шаблон), вам может потребоваться поддержка более одного метода подавления категорий, поскольку редакторы могут использовать разные методы запроса подавления категорий. в зависимости от исходного синтаксиса шаблона .

Следующий метод проверяет один из двух общих атрибутов ( |nocat=trueи |categories=no) и подавляет автоматическую категоризацию, если для любого из них задано подавление.

<includeonly> {{#ifexpr: {{
#ifeq: {{lc: {}}} | правда | 1 | 0}}
+ {{
#ifeq: {{lc: { {{ Categories | yes}}}}} | нет | 1 | 0}}
<1 |

[[Категория: Пример ]]
| <! - Категория подавлена ​​-> }} </includeonly>

  • {{#ifexpr:}}Является функцией синтаксического анализа , который оценивает арифметическое выражение (например , "0 + 0 = 0" или "1 + 0 = 1"). В этом случае он оценивает вывод двух других функций синтаксического анализатора.
    • Первая функция проверяет, было ли nocatявно установлено значение «истина». Если это так, выход номер один. В противном случае выход равен нулю.
    • Вторая функция проверяет, было ли categoriesустановлено явно «нет». Если это так, выход номер один. В противном случае выход равен нулю.
  • Функция #ifexpr складывает выходные данные двух функций вместе (возможные результаты: ноль [0 + 0 = 0], один [1 + 0 = 1 или 0 + 1 = 1] или два [1 + 1 = 2]). .
  • Если результат меньше единицы (т. Е. Ни один атрибут не был установлен для подавления автоматической категоризации), то отображаются категории.
  • Если результат был больше или равен единице, не отображать ничего, кроме необязательного комментария HTML (символ вертикальной черты и комментарий HTML ( |<!-- Category suppressed -->) являются необязательной информацией, чтобы помочь редакторам понять, что делает шаблон, но могут быть опущены для экономии места и пропускная способность)

См. Также [ править ]

  • Википедия: Подавление категорий WikiProject
  • mw: Справка: Расширение: Функции парсера
  • mw: Справка: Функции парсера в шаблонах
  • mw: Справка: Шаблоны
  • WP: Расширенное кодирование шаблонов