사용자:IRTC1015/틀 도움말

읽기 쉬운 코드 쓰기편집

  • 변수 이름은 간단하고 알아보기 쉽게
  • 띄어쓰기와 줄바꿈

문법 요소(중괄호, 파이프, 등호 등) 사이의 공백이나 한 줄의 줄바꿈은 대개 무시되므로, 가독성을 위해 적절히 넣어주는 것이 좋다. 줄바꿈에 의한 오동작이 우려될 경우 HTML의 주석(<!-- -->)을 사용하여 가독성을 확보하는 수가 있다.(<!--\n--> 같은 식)

  • 주석
    코드가 복잡해지면 그것을 다른 사람이 읽을 때나, 심지어 작성자 본인이 시간이 흐른 뒤에 읽을 때도 해석에 시간이 오래 걸릴 수 있다. 코드가 너무 방대하다면 생각해 보자.

변수편집

{{{변수이름}}}이 기본. 틀을 불러올 때 {{틀이름 | 변수이름 = 변수내용 }}의 형식을 사용. {{{변수이름| foo }}}와 같이 이름 뒤에 파이프를 넣고 그 뒤에 내용을 쓰는 경우, 변수가 없을 때 파이프 뒤의 내용이 나타남. {{틀이름 | 변수이름 = }}과 같이 변수를 입력했으나 내용이 없는 경우는 “내용이 없는 변수”가 입력된 것이므로 파이프 뒤의 내용은 나타나지 않음.

cf) {{#if: {{{변수|}}} | {{{변수}}} | foo }}로 사용할 경우, if는 조건 부분이 “비면” false로 보기 때문에, {{틀이름 | 변수이름 = }}와 같이 사용하더라도 false의 내용인 foo를 반환.

onlyinclude, includeonly, noinclude편집

onlyinclude편집

끼워넣어질 때 태그 안쪽의 내용만을 불러오도록 지정. 사용하면 태그 밖에서 뭘 쓰든 틀 동작에는 영향을 미치지 않지만, 어쨌든 틀 문서 전체를 다 읽어온 뒤 어느 부분을 끼워넣을지 판단해야 하므로, 틀의 동작에 관계 없는 내용은 되도록 틀 문서에 적은 편이 좋다. 설명 등은 틀:틀 설명문서로.

includeonly편집

태그 안쪽의 내용을 끼워넣어질 때에만 불러오도록 지정. 틀 문서에서는 없는 부분으로 취급되기 때문에 주로 틀 사용과 함께 분류를 지정할 때 사용.

{{{변수명<includeonly>|</includeonly>}}} 트릭편집

{{{제목}}}
항목1 {{{변수1}}}
항목2 {{{변수2}}}

틀의 동작에는 전혀 영향이 없으나, 틀의 구조를 드러낼 때 상당히 유용한 트릭. 변수가 직접 나타나는 부분은 물론, #if 등 함수의 조건문에서 유용하게 사용된다. {{#if:{{{변수명<includeonly>|</includeonly>}}}| true | false }}로 썼을 때, 틀 문서에서는 includeonly의 효과로 파이프가 빠진 {{{변수명}}}만이 조건으로 들어가기 때문에, #if는 true를 반환. 실제 틀 사용시(즉, 틀이 끼워넣어질 경우)에는 includeonly 안의 내용이 포함된 {{{변수명|}}}이 포함되기 때문에, 변수가 없으면 {{{변수명|}}}은 공백이 되어 #if는 false를 반환.

noinclude편집

태그 안쪽의 내용을 끼워넣어질 때 불러오지 않도록 지정.

틀 내용까지 풀어쓰기편집

  • <includeonly>풀기:</includeonly>
  • 안전풀기:
  • {{{|안전풀기:}}} 혹은 <includeonly>안전풀기:</includeonly>

ParserFunctions편집

초보자는 대부분 못 알아보지만, 틀 작성에 익숙해지면 안 쓸 일이 거의 없는 물건. 멀쩡한 설명이 필요하면 mw:Help:Extension:ParserFunctions를 참조.

#time, #timel편집

코드 설명 출력
연도
Y 4자리 연도 2021
y 2자리 연도. 엔간하면 그냥 Y 쓰자. 21
L 그 해가 윤년이면 1, 아니면 0. 0
o ISO 8601 연 번호(ISO 주 정의 참조). 2021
n 월(숫자). 0 채우지 않기(1, 2, …, 12 ). 1
m 월(숫자). 0 채우기(01, 02, …, 12 ). 01
M 사이트 언어로 된 월 이름의 약어. 한국어에서는 n과 같음. 1
F 사이트 언어로 된 월 이름. 1월
W ISO 8601 주 번호. 0 채우기. 04
j 날짜. 0 채우지 않기. 28
d 날짜. 0 채우기. 28
z 그 해 1월 1일로부터 지난 날 수(1월 1일 = 0, 1월 2일: 1, …). 27
D 요일(약어).
l 요일. 목요일
N ISO 8601 요일 번호(월 = 1, 일 = 7). 4
w 요일 번호(일 = 0, 토 = 6). 4
a am/pm am
A AM/PM AM
g 12시간제로 표기된 시. 0 채우지 않기. 9
h 12시간제로 표기된 시, 0 채우기. 09
G 24시간제로 표기된 시. 0 채우지 않기. 9
H 24시간제로 표기된 시, 0 채우기. 09
분·초
i 분. 0 채우기. 54
s 초. 0 채우기. 37
U 1970년 1월 1일 0시 0분 0초+00:00으로부터 지난 초. 1611827677
기타
L 윤년 여부(1 = 윤년) 0
t 그 달의 날 수. 31

#time과 #timel의 차이는 표준시냐 지역 시간대(서버 설정, 한국어 위키백과는 UTC+9)냐의 차이.

{{#time: 형식 | 시간 }}

여기에 입력하는 시간은 절대적일 수도 있고 상대적일 수도 있고, 둘을 섞을 수도 있다. “2010년 1월 1일 0시 0분”, “(지금으로부터) 6일 뒤”, “2012년 12월 21일 12시 34분으로부터 1일 18초 뒤” 같은 게 모두 된다는 소리. 다만 뒤의 시간은 php에서 인식할 수 있는 형식이어야 하고, 한국어로 입력하면 당연하게도(?) 안 된다.

0이 채워진 형식만 제공될 경우, #expr로 감싸주면 0을 뗄 수 있다.

#switch편집

{{#switch: 조건 | 경우1 = 결과1 | 경우2 = 결과2| ... }}

조건을 받아서, 경우 중 조건과 일치하는 것의 결과를 출력한다. 모두 일치하지 않는 경우 기본값(설정되어 있지 않으면 null)을 출력한다. 기본값은 switch문 맨 마지막에 등호 없이 ... | 기본값 }}의 형태로 입력하며, 출력되는 값에 등호가 필요할 경우 ... | #default = 기본값 }}의 형식을 사용할 수 있다.

조건은 모두 문자열로 취급되지만, 내부에 사용된 특수 함수나 틀은 파싱이 이루어진 상태에서 비교한다. {{#switch:{{{1}}}| {{ foo }} = A | B }}라는 코드에서, {{{1}}}에 중괄호와 틀 이름 사이에 공백이 없는 {{foo}}를 써도, 틀 foo를 불러온 결과는 같기 때문에 이 코드는 A를 출력한다. {{#switch:{{{1}}}| [[ foo ]] = A | B }}의 경우에는, {{{1}}}에 [[foo]]가 입력되면 파서는 [[foo]][[ foo ]]가 같지 않다고 보기 때문에 B가 출력된다.

여러 경우에 대해 같은 결과를 출력할 때는, 같은 결과가 필요한 경우를 연속해서 배열한 뒤 마지막에 원하는 결과를 쓰면 된다. 이를테면, {{#switch:{{{1|}}}| a | b | c = A | B }}라는 코드가 있을 때, {{{1}}}에 a나 b, c가 입력되면 모두 A를 출력하고, 그 외의 값에 대해서는 기본값인 B를 출력한다. 이 코드는 {{#switch:{{{1|}}}| a = A | b = A | c = A | #default = B }}와 완전히 같은 동작을 한다.

조건이 빈 문자열일 때에는, ... | = 결과의 형식으로 써 주면 된다.

같은 함수 내에서 같은 조건에 대해 다른 결과가 여러 번 지정된 경우에는 맨 처음 지정된 값이 출력된다. {{#switch:{{{1|}}}| a | b | c = A | b = B }}에서 {{{1}}}에 b가 올 경우, 먼저 지정된 결과인 A가 출력되고 나중에 지정된 결과인 B는 무시된다.

#if편집

{{#if: 조건 | | 거짓 }}}}

사용법이 가장 간단하고, 가장 쓸 일도 많은 함수. 조건에 줄바꿈과 공백을 제외한 문자 있다면 참의, 아니면 거짓의 내용을 반환. 거짓을 쓰지 않으면 그냥 빈 문자열을 반환. 조건에는 {{{변수명|}}}으로 변수를 넣는 경우가 절대 다수이고(당연하지만), 조건에 필요한 변수가 여럿이면 {{{변수1|}}}{{{변수2|}}} 식으로 여러 변수를 넣기도.

#ifeq편집

{{#ifeq: 조건1 | 조건2 | | 거짓 }}}} 조건1과 조건2가 일치하면 참을, 아니면 거짓을 반환. 조건이 숫자면 숫자를 비교하고, 숫자 말고 다른 게 들어가 있으면 문자열로 취급해서 비교. 대소문자를 구분한다.

  • {{#ifeq: 01 | 1 | 참 | 거짓 }}}} → 참
  • {{#ifeq: "01" | "1" | 참 | 거짓 }}}} → 거짓

#ifexpr편집

{{#ifexpr: 조건 | | 거짓 }}

수식의 결과에 따라 참과 거짓을 반환. 다른 프로그래밍 언어에서 흔히 보는 if는 사실 이거다. 물론 논리식도 사용 가능.

#iferror편집

{{#iferror: 조건 | 오류일 때 값 | 정상일 때 값 }}

조건의 식이 오류이면(정확히는, 조건의 결과로 출력된 문자열이 class가 "error"인 HTML 엘리먼트를 포함하는 경우) 오류일 때 값을, 그렇지 않은 경우 정상일 때 값을 반환. 결과값 둘은 모두 생략 가능하며, 정상일 때 값이 생략된 경우 조건이 정상이면 조건의 결과를 그대로 출력하고, 오류일 때 값을 생략하면 빈 문자열을 반환한다.

#ifexist편집

{{#ifexist: 조건 | | 거짓 }}

조건에 문서명을 넣고, 그 문서가 존재하면(≒빨간 링크가 아니면) 참, 존재하지 않으면 거짓을 반환.

파일의 존재 여부는 미디어 이름공간(ns:-2)으로 판정할 수 있다. 파일 이름공간은 로컬의 파일 설명 문서를 나타내는 데에 주의.

#expr편집

종류 연산자
묶음 ( )
1234.5   e (2.718)   pi (3.142)
이항 연산자 e(지수 표기법), 단항 연산자 +, -(부호)
단항 연산 not ceil trunc floor abs exp ln sin cos tan acos asin atan
이항 연산 ^
* / div mod
+ -
round
논리/비교 = != <> > < >= <=
and
or

{{#expr: 수식 }} 수학 연산. zero-padding을 해제(예: 01 → 1)하는 데도 사용. 논리 연산도 가능한데, 값이 0이 아니면 참으로 본다. 논리식이 참일 경우 1, 거짓일 경우 0을 반환. 참과 거짓에 따라 다른 내용을 표시하고 싶다면 #ifexpr을 참조. 수식이 비면 빈 문자열을 반환하고, 수식이 아닌 것(주로 문자열)이 들어있으면 에러를 출력한다.

  • {{#expr: 1 and 0 }} → 0
  • {{#expr: 1 and -1 }} → 1
  • {{#expr: 1>0 and 2=2 }} → 1

#property편집

{{#property: P(속성 번호) 혹은 레이블 }} 현재 문서 연결된 위키데이터 항목에서 속성의 값을 가져온다. 레이블보다는 번호로 쓰는 게 부하 감소 측면에서는 바람직. 값이 여럿 있을 경우 값1, 값2, 값3 등으로 반환.

같이 보기편집