Передача списка в качестве параметра шаблона - PullRequest
0 голосов
/ 26 сентября 2018

Я создал шаблон в моем MediaWiki, которому я хочу передать «свободный текст».Для простоты представьте, что это таблица, в которой первый именованный параметр входит в ячейку 1, а другой именованный параметр - в ячейку 2.

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

{{MyTemplate|first=

    // code...

|other=

    // other code instead...

}}

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

Теперь у меня снова возникают проблемы, когда я пытаюсь передать список:

{{MyTemplate|first=

* Item 1a
* Item 2a

|other=

* Item 1b
* Item 2b

}}

И снова я получаю первый элемент (элемент 1a) , игнорируемый (не отображается как элемент списка), второй отображается нормально (элемент 2a, как элемент списка), , затем двойная труба, звездочка и "Item 1b" , затем список продолжается с "Item2b».

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

РЕДАКТИРОВАТЬ

Вот код моего шаблона:

{|
!First !!Other
|-
|{{{first|}}} ||{{{other|}}}
|}

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

@ Ivanhercaz Я попробовал ваше предложение (которое отличается от моего только для пустых строк) и все еще получил тот же результат.

Result

1 Ответ

0 голосов
/ 26 сентября 2018

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

{{{first|}}}
{{{other|}}}

По поводу вашего первого вопроса, вы можете использовать {{!}} для экранирования символа канала (|).В версии 1.24 это волшебное слово , но до решения этой проблемы нужно было создать шаблон с конвейером, а затем заменить | на {{!}}.Волшебное слово используется то же самое, но вам нет необходимости создавать шаблон.

По поводу вашего второго вопроса, учитывая, что у вас есть структура, аналогичная той, что я написал вверху этого ответа,если я написал страницу с таким текстом:

{{MyTemplate|first=

    * Item 1a
    * Item 2a

|other=

    * Item 1b
    * Item 2b

}}

я получу два списка и два блока кода: один список с «Элементом 1a» и первый блок кода с * Item 2a;перечислите два с "Элементом 2a" и второй блок кода с * Item 2b.Это не похоже на то, что вы визуализировали:

первый элемент (элемент 1a) игнорируется (не отображается как элемент списка), второй отображается нормально (элемент 2a, как элемент списка)затем двойная труба, звездочка и «Элемент 1b», затем список можно продолжить с «Элементом 2b».Это произошло из-за дополнительного пробела перед * в параметрах.

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

{{Test|first=
* Item 1a
* Item 2a
|other=
* Item 1b
* Item 2b
}}

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

Редактировать

Теперь с кодом шаблона я понимаю вашу проблему.Для корректной работы и без проблем с шаблонами, таблицами и списками вы должны учитывать, что * должен иметь разрыв строки после | и ||.Я рекомендую вам вставить эти разрывы строк

{|
! Wikitext !! Rendering
|- 
|
{{{first|}}}
||
{{{other|}}}
|}

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

{{Test
|first=* Item 1a
* Item 2a
|other=* Item 1b
* Item 2b
}}

Или другим способом:

{{Test
|first=
* Item 1a
* Item 2a
|other=
* Item 1b
* Item 2b
}}

У вас будет такая таблица (я добавляю class=wikitable кесть более красивая таблица, чтобы показать):

Template using a table and a lst

Я надеюсь, что этот трюк был полезен.

...