Page semi-protected

도와 주세요.:치환

Help

대체는 편집자가 페이지를 저장할 때 Wiki 코드의 항목이 현재 값으로 영구적으로 대체되는 기능입니다.특히, 템플릿마법 단어는 트랜스클루전의 대안으로 대체될 수 있습니다.차이점은 템플릿이 페이지에서 대체될 때, 해당 페이지의 모양은 더 이상 템플릿 자체에 대한 이후의 변경사항의 영향을 받지 않습니다(트랜스클립티드 템플릿의 경우).

대체는 다음을 사용하여 수행됩니다.subst:이중 개방 가새 뒤에 있는 수식자.예를 들어 템플릿 {afd}을(를) 대체하려면 다음과 같이 입력합니다.{{subst:afd}}"변경사항 표시"를 눌러 저장하기 전에 결과 Wiki 텍스트를 확인할 수 있습니다("미리 보기"를 눌러 페이지가 어떻게 표시되는지 확인).

변수와 파서 함수를 대체할 수도 있습니다. 즉, 변수와 파서 함수의 현재 값은 페이지에 영구적으로 기록됩니다. 다른 사용자가 페이지를 볼 때마다 재평가되지 않습니다.

대체 사용 시기

일반적으로 템플릿은 대체되지 않고 변환되지만, 일부 템플릿은 대체되도록 특별히 설계된 것도 있습니다(변환되면 작동하지 않을 수도 있습니다).템플릿을 대체하는 몇 가지 이유는 다음과 같습니다.

  • 결과 페이지를 템플릿의 향후 변경과 무관하게 만들기
  • 다른 자동 대체가 발생할 수 있음(예: 템플릿에 4개의 타일이 포함될 수 있음)(템플릿이 대체된 경우 사용자 서명 및 타임스탬프로 대체됨)
  • 템플릿을 복사하지 않고 페이지를 다른 프로젝트로 복사할 수 있도록 설정
  • 서버의 페이지 렌더링 속도 향상
  • 위키텍스트와 렌더링된 페이지 간의 대응 관계를 이해하기 쉽게 만들기(그 반대도 적용될 수 있음)

대체의 단점은 다음과 같습니다.

  • 템플릿에 대한 업데이트는 대상 페이지에 반영되지 않습니다.
  • 결과적으로 나타나는 위키 텍스트는 더 길고 복잡합니다.
  • 다른 사용자는 텍스트가 템플릿을 사용하여 생성되었는지 확인할 수 없으며 템플릿 사용 방법을 배울 수 없습니다.
    • 많은 템플릿은 다음과 같은 숨겨진 주석을 추가합니다.<!-- Template:Foo -->이 문제를 완화하기 위해 출력의 끝까지.

시간 종속 변수는 렌더링된 페이지를 보는 시간과 독립적으로 만들기 위해 대체됩니다.페이지 종속 변수를 대체하면 결과 위키 텍스트는 페이지 이름 변경 및 다른 페이지로 복사와 무관합니다.

대체해야 하거나 대체해서는 안 되는 템플릿 목록을 포함한 자세한 지침은 위키백과를 참조하십시오.대체.

구문

템플릿을 대체하려면 트랜스클루전과 동일한 구문을 사용하지만 다음을 포함합니다.subst:이중 교정기를 연 후에.예를 들어 템플릿 {afd}을(를) 대체하려면 다음과 같이 입력합니다.{{subst:afd}}예를 들어, 매개변수는 트랜스클루전의 경우와 같이 포함될 수 있습니다.{{subst:afd Some article}}.

템플릿 네임스페이스에 없는 페이지도 대체할 수 있습니다.{{subst:User:Cleverclogs/My box}}메인스페이스에 있는 페이지의 현재 내용(즉, 네임스페이스 접두사가 없는 페이지)을 대체하려면, 다음과 같이 두 개의 콜론이 필요합니다.{{subst::Page}}대체된 페이지 또는 템플릿이 없는 경우 전체 식(괄호 및 하위:)은 위키 텍스트와 페이지에서 변경되지 않은 상태로 유지됩니다.

변수와 파서 함수를 대체하는 데 동일한 구문을 사용합니다.{{subst:PAGENAME}}또는{{subst:#switch:{{NUMBEROFADMINS}} 1=Foo 1000=Bar #default=Baz}}.

여는 중괄호와 "subst:" 사이에 공백이 있을 수 있습니다.그러나 "subst:" 바로 뒤에 공백이나 줄을 두지 않는 것이 좋습니다. 이것이 모든 경우에 효과적인 것은 아니기 때문입니다.

기술 구현

대체는 페이지를 저장할 때 수행되는 프로세스의 일부이며, 편집 결과로 저장된 위키 텍스트가 사용자가 편집 창에 실제로 입력한 텍스트와 다릅니다.이 프로세스 중에 수행되는 다른 대체 작업에는 파이프 트릭을 사용하여 링크를 확장하고 여러 타일을 서명 및 타임스탬프로 교체하는 작업이 포함됩니다.

이는 페이지 렌더링 시 수행되는 작업(저장된 위키 텍스트를 HTML로 변환) 전에 대체가 수행되어야 함을 의미합니다. 특히, 대체는 결론 이전에 수행됩니다.그래서 타이핑.{{subst:Help:L{{in(tut)}}k}}{{in(tut)}}: 텍스트 "in"을 반환하고 도움말:링크가 존재합니다.대체를 시도할 때 {{in(tut)}}의 트랜스클로즈가 아직 발생하지 않았습니다.그러나 대체{{in(tut)}}와 함께{{subst:in(tut)}}그리고 두 치환 모두 예상되는 순서로 수행됩니다.

마찬가지로:

  • 타자 치기{{subst:#if:{{x0}} yes no}}조건 매개 변수가 비어 있지 않은 문자열 "{{x0}}"로 평가되기 때문에 {{x0}}이(가) 빈 템플릿일지라도 위키 텍스트 "예"를 제공합니다.하지만{{subst:#if:{{subst:x0}} yes no}}내부 치환이 먼저 수행되므로 "아니오"가 생성됩니다.
  • 타자 치기{{subst:#expr:2*{{{p 3}}}}}오류를 반환합니다. 대체가 발생할 때 정의되지 않은 매개 변수 {{p}}이(가) 기본값(3)으로 대체되지 않았기 때문에 인식할 수 없는 구두점 문자 "{"가 반환됩니다.
  • {{t6}}에 "t2a"라는 텍스트가 포함된 경우,{{ {{subst:t6}} }}[[w:이름별 사용자 목록:a{{2}}a{{2}}]]로 렌더링된 위키 텍스트 "{{t2a}}"을 생성합니다. 이를 의 동작과 대조합니다.{{ {{t6}} }}파서가 파이프를 비분산 확장 단계에서 분리기로 재해석하지 않기 때문에, 이는 "{t2a}}"로 렌더링됩니다.(비슷하게,{{subst:{{subst:t6}} }}위키 텍스트 제공{{subst:t2 a }}다음 편집 시에만 [w:이름별 사용자 목록:a{{2}}a{{2}}a{{2}}]로 대체됩니다.)

편집 중에 "변경사항 표시" 단추를 누르면 대체 및 기타 즉시 대체가 수행된 후 발생하는 위키 텍스트가 표시됩니다.미리보기 표시를 누르면 이러한 대체 후 렌더링된 페이지의 모양이 표시됩니다.

페이지가 자신을 대체하는 경우(예: 템플릿 페이지의 no include 부분에서), 현재 편집 전과 마찬가지로 이전 버전을 대체합니다.

대체 템플릿의 확장 자체에 의 인스턴스가 포함된 경우subst:그런 다음 대체가 재귀적으로 수행됩니다.그러나 대체는 자동으로 재귀적이지 않습니다. 대체된 템플릿에 명시적으로 대체되지 않은 일반적인 결론이나 변수 및 파서 함수가 포함되어 있으면 이러한 변수는 대체되지 않습니다.

참고로 만약의 경우.subst:구문이 변환 중인 템플릿에 나타나면 변경되지 않은 상태로 렌더링됩니다("{proxy:...}})). 렌더링 단계에서는 위키텍스트를 대체할 수 없기 때문입니다.이 기능을 이용하여 템플릿 동작을 제어할 수 있습니다( § 템플릿을 변환하거나 대체할 때 다르게 동작하게 만들기 참조).그러나 이 경우 템플릿을 대체할 뿐만 아니라 트랜스크루드가 가능하도록 설계된 경우에는 불편할 수 있습니다.safesubst:대신 사용할 수 있습니다.subst:(§ 안전한 부분: 수식어 참조).

안전한 대체물: 수식어

subst:수식어는 대체 수식어로 대체할 수 있습니다.safesubst:템플릿의 대체되지 않은 확장(횡단 또는 직접 보기) 중에 발생하는 경우를 제외하고 두 개의 동작은 동일합니다.그런 상황에서, 코드는{{subst:...}}분석되지 않은 채로 남아 있는 반면,{{safesubst:...}}수식어가 없는 것처럼 처리되므로 하위 템플릿이 제외되거나 변수 또는 파서 함수가 평가됩니다.

그러므로safesubst:수식어는 대체될 때 재귀적인 대체를 생성하도록 설계된 템플릿 코드에 사용되지만, 전사되거나 단순히 직접 보기 위해 작동하기도 합니다.를 사용하는 것과 대조적입니다.subst:수식어, 이러한 템플릿은 이러한 트랜스클루전(그리고 아마도 직접 보기)의 경우에 손상될 것입니다.

이를 구현하는 방법(특히 템플릿 코드가 저장되는 즉시 대체가 수행되지 않도록 방지하는 방법)에 대한 자세한 내용은 § 재귀 대체를 참조하십시오.

재귀 치환

위에서 언급한 바와 같이 대체는 자동으로 재귀적이지 않습니다.따라서 대체된 템플릿에 다른 템플릿 및 파서 함수의 변환이 포함된 코드가 있는 경우 해당 코드는 "있는 그대로" 결과로 생성된 위키 텍스트에 복사되며, 변환된 항목 자체는 대체되지 않습니다.

대체가 반복적으로 작동하도록 하려면 다음을 포함해야 합니다.subst:호출 템플릿의 코드에 구문이 있습니다.그러나 템플릿을 저장하는 즉시 대체가 수행되므로 템플릿 내에 "subst:"를 입력하여 이 작업을 수행할 수는 없습니다.이 문제를 해결하는 두 가지 방법이 있습니다.

  • 사용하다subst:<noinclude/>평이한 대신에subst:no include 태그는 템플릿을 저장할 때 대체 구문을 분할하지만 나중에 대체할 때 제거되므로 내부 대체가 적용될 수 있습니다.또는 템플릿 코드의 더 큰 부분을 랩핑할 수 있습니다.<onlyinclude>...</onlyinclude>그런 다음 래핑된 코드는 템플릿 페이지 자체에서 무시되지만 변환되지 않을 때는 무시되지 않습니다.
  • 다음과 같은 매개 변수를 포함하는 식의 가능한 값을 "subst:"로 만듭니다.{{{subst-foo subst:}}}매개 변수 sub-foo가 설정되지 않은 경우 "sub:"로 평가됩니다.매개 변수를 통해 동작을 제어할 수 있기 때문에 보다 유연한 솔루션입니다.예를 들어, 이러한 템플릿은 다음을 사용하여 호출할 수 있습니다.{{subst:Templatename subst-foo= ..}}매개 변수에 빈 값을 할당하여 두 번째 대체 수준을 해제합니다.매개 변수를 사용할 계획이 없는 경우 매개 변수 이름은 종종 빈 문자열로 선택됩니다.{{{ subst:}}}.

템플릿이 대체되지 않고 제외된 경우에도 의도한 대로 작동하도록 하려면 대신 를 사용합니다.이는 템플릿을 자체 페이지에서도 직접 보려는 경우에도 적용됩니다(이 경우 위의 방법 중 첫 번째 방법을 사용하는 경우에도 일반 하위:는 계속 작동합니다. 포함만 태그를 사용하면 파서가 하위:를 직접 볼 때 무시하기 때문입니다.

모든 하위 템플릿 등을 명시적으로 대체할 필요 없이 완전히 확장했을 때 생성되는 템플릿을 확인하려면 특수:템플릿 확장 도구를 사용할 수 있습니다.

자세한 내용은 메타에서 위키 텍스트의 재귀 변환 도움말 페이지를 참조하십시오.도움말 참조:계산 § 치환, m:템플릿:계산, 대체 옵션(백링크 편집)하위 스톨의 피쳐 요청이 있는 예제 테이블.

가이드 투어에서의 재귀적 대체

가이드 투어는 위키 페이지의 내용을 토크 페이지에 자동으로 게시하는 등 사용자를 대신하여 게시물을 만들 수 있습니다.그러나, 일반적인 대체 또는 트랜스클루전과 달리, 가이드 투어의 이러한 기능은<includeonly>...</includeonly>마크업과 유사합니다.안내된 둘러보기 게시를 통해 재귀적 대체가 작동하도록 하려면 메타에 설명된 Delaying Template:ubst 메서드를 사용할 수 있습니다.

재귀 활동의 예

다음은 실제 템플릿을 사용한 예입니다.유사한, 그리고 가상의 템플릿:Foo. 템플릿을 포함하려고 합니다.Foo 및 간접적으로 템플릿:예를 들어, 세 번째 페이지에서 결론과 대체를 통해.템플릿:좋아요는 다음 기호를 표시합니다.👍 좋아요

예를 들어, 템플릿을 예로 들어 보겠습니다.Foo는 위키텍스트를 포함했습니다.{{Like}}만약 당신이 그것을 배제한다면, 위키텍스트를 사용하세요.{{Foo}}템플릿을 제외합니다.당신이 예상하는 것처럼.하지만 만약 당신이 위키텍스트를 사용한다면,{{subst:Foo}}저장하면 위키텍스트를 찾을 수 있습니다.{{Like}}페이지의 위키 텍스트가 아닌 대체됨 템플릿:예를 들어, 대체가 재귀적이지 않습니다.

재귀의 예로는 템플릿이 다음과 같은 경우가 있습니다.Foo는 위키텍스트를 포함했습니다.{{{{{ safesubst:}}}Like}}이제 그것을 배제한다면, 위키텍스트를 사용하여{{Foo}}템플릿을 제외합니다.예전처럼.그리고 당신이 저장한다면,{{subst:Foo}}템플릿의 전체 실제 위키 텍스트를 대체합니다.좋아요. 따라서 재귀적 대체를 달성했습니다.

추가 예제

참고: {{!…의 대용품

템플릿의 위키텍스트: Foo 템플릿을 볼 때:푸,
다음과 같이 표시됩니다.
{{Foo}} 결과
이 페이지에 포함된 경우
{{subst:Foo}} 결과
이 페이지에 포함된 경우
다음과 같이 저장: 렌더링 형식: 다음과 같이 저장: 렌더링 형식:
{{PAGENAME}}{#if:1 yes no}}

네.

{{Foo}}

치환

네.

{{PAGENAME}}{#if:1 yes no}}

치환

네.

하위 항목:{{{하위}:}}}}PAGENAME}}{{{subst:}}}#if: 1 yes no}
{{filename:!}}

{{filename}:PAGENAME}}

{{filename:#if:1 yes no}}

{{Foo}}
{{filename:!}}

{{filename}:PAGENAME}}

{{filename:#if:1 yes no}}

대체 예

치환

네.

안전 물질:{{{{안전한 물질:}}}}PAGENAME}}{{{safesubst:}}}#if: 1 yes no}

네.

{{Foo}}

치환

네.

대체 예

치환

네.

템플릿을 제외하거나 대체할 때 다르게 동작하도록 설정

때때로 템플릿을 변환할 때보다 대체할 때 다르게 동작하는 것이 바람직합니다.일반적인 방법은 다음과 같은 표현을 사용하는 것입니다.{{{{{subst subst:}}}ns:0}}이 값은 템플릿이 대체되는 경우(내부 대체가 적용되므로 네임스페이스 0의 접두사가 비어 있음) 빈 문자열로 평가되지만 템플릿이 트랜스클리어된 경우(트랜스클리어 후에 대체가 수행될 수 없으므로) "{subst:ns:0}}"로 평가됩니다.

일반적인 응용 프로그램은 대체할 수 있도록 설계된 템플릿에 있습니다. 템플릿을 사용하여 잘못 변환된 경우 경고를 생성할 수 있습니다.이 작업은 타임스탬프(예: 날짜가 지정된 범주에 페이지 추가)를 생성하도록 설계된 {prod}과(와) 같은 템플릿에서 수행되며, 제외된 경우에는 수행할 수 없습니다.

이를 단순화하기 위해 {issubst} 템플릿이 생성되었습니다.대체가 수행 중이면 "예"를 반환하고, 그렇지 않으면 빈 문자열을 반환합니다.그런 다음 이 매개 변수를 조건부 파서 함수의 매개 변수로 사용하여 템플릿이 제외되는 경우 경고 메서드를 표시하도록 하거나, 그렇지 않으면 템플릿이 제외되는지 또는 대체되는지 여부에 따라 템플릿의 동작을 변경할 수 있습니다.

대체 문서화

템플릿 사용 기간:subst:페이지 기록에 자동으로 표시되지 않습니다.따라서 편집 요약에서 "subst:"를 포함하는 위키 텍스트 행을 제공하는 것이 특히 유용합니다.

또한 대체 템플릿이 있는 페이지는 백링크에 표시되지 않으며, 편집 페이지의 변환된 템플릿 목록에 템플릿이 표시되지 않습니다.템플리트는 대체를 추적하기 위해 카테고리에 페이지를 추가할 수 있지만, 페이지에 이 카테고리를 나열하면 페이지가 있는 내용 기반 카테고리 목록이 복잡해질 수 있습니다.또한 no 이외의 주석은 태그를 포함하지 않습니다.따라서 주석을 사용하여 템플릿을 언급할 수 있습니다.매개 변수의 대체는 주석 내에서 작동하지 않지만, 이에 대한 해결 방법은 의도된 주석을 시작하는 것입니다.<!<noinclude />--한 번 제외되면 댓글로 바뀌게 됩니다.

한계

내부에서는 대체 기능을 사용할 수 없습니다.<ref>...</ref>그리고.<gallery>...</gallery>태그. 글을 쓰시면.{{subst:foo}}대체되거나 제외되지 않고 그대로 유지됩니다(알려진 버그입니다. 현재 상태는 T4700Gerrit:272916 참조).

그러나 마법 단어 #tag를 사용하여 이 제한을 우회할 수 있습니다.예를 들어, 당신이 글을 쓴다면,{{safesubst:#tag:ref content of the reference}}참조의 내용은 대체될 것이고 그리고.{{#tag:ref ...}}로 대체됩니다.<ref>...</ref>보다 구체적인 예:예를 들어 글을 쓴다면,{{safesubst:#tag:ref ...Title=ExampleTitle archivedate={{subst:TODAY}} Edition=Hardcover...}}그러면 소프트웨어는 마지막 필드 내의 텍스트에 대한 대체를 수행합니다.{{#tag:ref ...}}로 대체됩니다.<ref>...</ref>변경된 텍스트 주위에, 그리고 참조는 대체와 함께 저장됩니다; 그것은 "로 저장됩니다.{{ ...Title=ExampleTitle archivedate=29 January 2016 Edition=Hardcover ...}}와 함께<ref>...</ref>주위에즉, 먼저 소프트웨어가 템플릿을 확장한 다음 확장된 텍스트를 참조 태그 내에 배치합니다.

대체할 템플릿

  • {{public subst}}은(는) 하위 항목이 필요한 템플릿을 포장할 수 있습니다
  • {{issubst}} - 대체 시 "예"를 반환합니다.
  • {{ifsubst}} - #if와 유사: 마법 단어, 치환 여부로 판단

참고 항목