Help:Extension:ParserFunctions

From mediawiki.org
This page is a translated version of the page Help:Extension:ParserFunctions and the translation is 95% complete.
Outdated translations are marked like this.

ParserFunctions uzantısı, MediaWiki'de zaten mevcut olan "sihirli kelimeleri " tamamlamak için on bir ek ayrıştırıcı işlevi sağlar. (Dize işleme için ek ayrıştırıcı işlevleri sağlamak üzere yapılandırılabilir; bu dize işlevleri başka yere belgelenmiştir.) Bu uzantı tarafından sağlanan tüm ayrıştırıcı işlevleri şu şekildedir:

{{#işlevadı: değişken 1 | değişken 2 | değişken 3 ... }}
PD Not: Bu sayfayı düzenlerken katkınızı CC0 altında yayınlamayı kabul edersiniz. Daha fazla bilgi için Kamu Malı Yardım Sayfalarına bakın. PD

#expr

Tür Operatörler
Gruplama (parantezler) ( )
Sayılar 1234.5   e (2.718)   pi (3.142)
ikili operatör e   tekli +,-
Tekli not ceil trunc floor abs exp ln sin cos tan acos asin atan
İkili ^
* / div mod
+ -
Yuvarlama round
Mantık = != <> > < >= <=
and
or

Bu işlev, matematiksel bir ifadeyi değerlendirir ve hesaplanan değeri döndürür. Bu işlev, mw.ext.ParserFunctions.expr işlevi aracılığıyla Scribunto olarak da kullanılabilir.

{{#expr: ifade }}

Basic example

{{#expr: 1 + 1 }}2

Kullanılabilir operatörler, öncelik sırasına göre sağda listelenir. Her operatörün işleviyle ilgili daha fazla ayrıntı için Help:Hesaplama sayfasına bakın. Döndürülen sonucun doğruluğu ve biçimi, vikiyi çalıştıran sunucunun işletim sistemine ve site dilinin sayı biçimine bağlı olarak değişecektir.

Boole cebri kullanılarak değerlendirme yapılırken, sıfır false olarak değerlendirilir ve pozitif veya negatif herhangi bir sıfır olmayan değer true olarak değerlendirilir:

{{#expr: 1 and -1 }}1
{{#expr: 1 and 0 }}0
{{#expr: 1 or -1 }}1
{{#expr: -1 or 0 }}1
{{#expr: 0 or 0 }}0

Boş bir giriş ifadesi boş bir dize döndürür. Geçersiz ifadeler, #iferror işlevi kullanılarak yakalanabilecek birkaç hata mesajından birini döndürür:

{{#expr: }}
{{#expr: 1+ }}Expression error: Missing operand for +.
{{#expr: 1 = }}Expression error: Missing operand for =.
{{#expr: 1 foo 2 }}Expression error: Unrecognized word "foo".

Bir sayıdan önce veya sonra toplama ve çıkarma işlenenlerinin sırası anlamlıdır ve hatalı girdi içeren bir işlenen yerine pozitif veya negatif bir değer olarak kabul edilebilir:

{{#expr: +1 }}1
{{#expr: -1 }}-1
{{#expr: + 1 }}1
{{#expr: - 1 }}-1

Sihirli kelimelerin çıkışını kullanıyorsanız, virgülleri kaldırmak ve sayıları çevirmek için bunları ham formatlamanız gerektiğini unutmayın. Örneğin, $numberofusers, $numberofusers2 kullanılarak elde edilebilecek $nou-result-raw ile istediğimiz yerde $nou-result ile sonuçlanır. Bu, özellikle sayıların çevrildiği bazı dillerde önemlidir. Örneğin, Bengalce'de $numberofusers3, $bengali üretir. For example, {{NUMBEROFUSERS}} results in 17.826.990, where we want 17826990, which can be obtained using {{formatnum :{{NUMBEROFUSERS}}|R}}. This is especially important in some languages, where numerals are translated. For example, in Bengali, {{NUMBEROFUSERS}} produces ৩০,০৬১.

{{#expr:{{NUMBEROFUSERS}}+100}} 117.826
{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}17827090
Uyarı Uyarı: mod operatörü, ikinci bağımsız değişkenin bazı değerleri için yanlış sonuçlar veriyor:
{{#expr: 123 mod (2^64-1)}}Division by zero. (boş bir dize üretir; 123 olmalı)
Tarihlere dayalı hesaplamalar yapmak istiyorsanız (örneğin, geçerli tarih ve saatin başka bir tarih ve saatten sonra olup olmadığını test edin), önce {{#time: xNU }} kullanarak zamanı 1 Ocak 1970'den sonraki saniye sayısına dönüştürün, ardından basitçe ekleyebilir ve tarihleri sayı olarak çıkarın.

Yuvarlama

Yuvarlaklar soldaki sayıyı bir kuvvete yükseltilmiş 1/10'un katına çıkarır, üs sağda verilen sayının kesik değerine eşittir.

Yukarı veya aşağı yuvarlamak için sırasıyla tekli ceil veya floor kullanın.

Test durumu Sonuç Yuvarlama yöntemi
{{#expr: 1/3 round 5 }} 0.33333 Son rakam < 5 olduğundan belirgin bir yuvarlama oluşmaz (0.333333… → 0.33333)
{{#expr: 1/6 round 5 }} 0.16667 Son rakam ≥ 5 olduğundan yuvarlanır (0.166666… → 0.16667)
{{#expr: 8.99999/9 round 5 }} 1 Yine, sonuç son basamağa yuvarlanır, bu da ek yuvarlama ile sonuçlanır (0.999998… → 1.00000 → 1)
{{#expr: 1234.5678 round -2 }} 1200 Negatif değerler ondalık noktanın soluna yuvarlandığından en yakın 100'e yuvarlanır
{{#expr: 1234.5678 round 2 }} 1234.57 Pozitif değerler ondalık noktanın sağına yuvarlandığından en yakın 100'e yuvarlanır
{{#expr: 1234.5678 round 2.3 }} 1234.57 Yuvarlama dizinindeki ondalık sayılar, yuvarlanan sonuçta hiçbir fark yaratmaz
{{#expr: trunc 1234.5678 }} 1234 Ondalık kısım kesildi (doğranmış)
En yakın tam sayıya yuvarlama
{{#expr: 1/3 round 0 }} 0 Sıfır olan en yakın tamsayıya kadar
{{#expr: 1/2 round 0 }} 1 Bir olan en yakın tamsayıya kadar
{{#expr: 3/4 round 0 }} 1 Bir olan en yakın tamsayıya kadar
{{#expr: -1/3 round 0 }} -0 Sıfır olan en yakın tamsayıya kadar
{{#expr: -1/2 round 0 }} -1 Negatif olan en yakın tam sayıya kadar
{{#expr: -3/4 round 0 }} -1 Negatif olan en yakın tam sayıya kadar
tavan ve zemin ile yukarı veya aşağı yuvarlama
{{#expr: ceil(1/3) }} 1 Bir sonraki daha büyük tam sayıya kadar
{{#expr: floor(1/3) }} 0 Sıfır olan bir sonraki daha küçük tam sayıya kadar
{{#expr: ceil(-1/3) }} -0 Sıfır olan bir sonraki daha büyük tam sayıya kadar
{{#expr: floor(-1/3) }} -1 Negatif olan bir sonraki daha küçük tam sayıya kadar
{{#expr: ceil 1/3 }} 0.33333333333333 1 zaten bir tam sayı olduğundan yuvarlanmaz
Uyarı Uyarı: Tahmin edebileceğiniz gibi ceil(1/3) olarak değil, (ceil 1)/3 olarak yorumlandı

Dizeler

İfadeler yalnızca sayı benzeri değerlerle çalışır, dizeleri veya karakterleri karşılaştıramazlar. Bunun yerine #ifeq kullanılabilir.

{{#expr: "a" = "a" }}Expression error: Unrecognized punctuation character """.
{{#expr: a = a }}Expression error: Unrecognized word "a".
{{#ifeq: a | a | 1 | 0 }}1

#if

Bu işlev, bir test dizesini değerlendirir ve boş olup olmadığını belirler. Yalnızca boşluk içeren bir test dizisi boş olarak kabul edilir.

{{#if: test dizesi | test dizisi boş değilse değer | test dizisi boşsa (veya yalnızca beyaz boşluk) değer }}
{{#if: ilk parametre | ikinci parametre | üçüncü parametre }}

Bu işlev, ilk olarak ilk parametrenin boş olup olmadığını test eder. İlk parametre boş değilse, işlev ikinci bağımsız değişkeni görüntüler. İlk parametre boşsa veya yalnızca boşluk karakterleri (boşluklar, yeni satırlar vb.) içeriyorsa, üçüncü bağımsız değişkeni görüntüler.

{{#if: | yes | no}}no
{{#if: string | yes | no}}yes
{{#if:      | yes | no}}no
{{#if:

| yes | no}}
no

Test dizesi her zaman saf metin olarak yorumlanır, bu nedenle matematiksel ifadeler değerlendirilmez (bunun için #ifexpr sayfasına bakın):

{{#if: 1==2 | yes | no }}yes
{{#if: 0 | yes | no }}yes

Son parametre (false) atlanabilir:

{{#if: foo | yes }} yes
{{#if: | yes }}
{{#if: foo | | no}}

İşlev iç içe olabilir. Bunu yapmak için, #if işlevinin bir parametresi yerine iç #if işlevini tam biçiminde yuvalayın. Yedi seviyeye kadar iç içe yerleştirme mümkündür, ancak bu vikiye veya bir bellek sınırına bağlı olabilir.

{{#if: test dizesi | test dizisi boş değilse değer | {{#if: test dizesi | test dizisi boş değilse değer | test dizisi boşsa (veya yalnızca beyaz boşluk) değer }} }}

#if ifadenizde test dizesi olarak bir parametre de kullanabilirsiniz. Değişken adından sonra | (boru sembolü) eklediğinizden emin olmanız gerekir. (Böylece parametrenin bir değeri yoksa, "{{{1}}}" dizesi yerine boş bir dize olarak değerlendirilir.)

{{#if:{{{1|}}}|1 değişkeninde metin girdiniz|1 değişkeninde metin yok}}

Bu ayrıştırıcı işlevine ilişkin daha fazla örnek için Help:Şablonlarda ayrıştırıcı işlevler sayfasına bakın.

#ifeq

Bu ayrıştırıcı işlevi, iki giriş dizesini karşılaştırır, özdeş olup olmadıklarını belirler ve sonuca göre iki dizeden birini döndürür. Daha fazla karşılaştırma ve çıkış dizisi gerekiyorsa, #switch kullanmayı düşünün.

{{#ifeq: string 1 | string 2 | value if identical | value if different }}

Her iki dizi de geçerli sayısal değerlerse, diziler sayısal olarak karşılaştırılır:

{{#ifeq: 01 | 1 | equal | not equal}}equal
{{#ifeq: 0 | -0 | equal | not equal}}equal
{{#ifeq: 1e3 | 1000 | equal | not equal}}equal
{{#ifeq: {{#expr:10^3}} | 1000 | equal | not equal}}equal

Aksi hâlde karşılaştırma metin olarak yapılır; bu karşılaştırma büyük/küçük harf duyarlıdır:

{{#ifeq: foo | bar | equal | not equal}}not equal
{{#ifeq: foo | Foo | equal | not equal}}not equal
{{#ifeq: "01" | "1" | equal | not equal}}not equal  (yukarıdaki benzer örnekle tırnak işaretleri olmadan karşılaştırın)
{{#ifeq: 10^3 | 1000 | equal | not equal}}not equal  (yukarıdaki benzer örnekle karşılaştırın, önce #expr geçerli bir sayı döndürür)

Pratik bir örnek olarak, kısa ve uzun olmak üzere iki standart zaman arasında seçim yapmak için ayrıştırıcıyı kullanan mevcut bir Template:Timer şablonu düşünün. "short" dizesiyle karşılaştırılacak ilk giriş olarak parametreyi alır. Sıralama için bir konvansiyon yoktur, ancak parametre önce giderse okunması daha kolaydır. Şablon kodu şu şekilde tanımlanır:

{{#ifeq: {{{1|}}} | short | 20 | 40 }}

aşağıdakiler ortaya çıkar:

{{timer|short}}20
{{timer|20}}40
{{timer}}40
Uyarı Uyarı: Bir ayrıştırıcı işlevi içinde kullanıldığında, tüm ayrıştırıcı etiketleri ve diğer ayrıştırıcı işlevleri geçici olarak benzersiz bir kod ile değiştirilmelidir. Bu, karşılaştırmaları etkiler:
{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | equal | not equal}}not equal
{{#ifeq: <math>foo</math> | <math>foo</math> | equal | not equal}}not equal
{{#ifeq: {{#tag:math|foo}} | {{#tag:math|foo}} | equal | not equal}}not equal
{{#ifeq: [[foo]] | [[foo]] | equal | not equal}}equal
Karşılaştırılacak dizeler, bu etiketleri içeren aynı şablon için eşit çağrılar olarak verilirse, koşul doğrudur, ancak bu tür etiketleri içeren aynı içeriğe sahip iki şablon olması durumunda yanlıştır.
Uyarı Uyarı: Site yapılandırmasına bağlı olarak sayfa-adı sihirli kelimeler ile birebir karşılaştırmalar başarısız olabilir. Örneğin, vikiye bağlı olarak {{FULLPAGENAME}}, ilk harfi büyük yazabilir ve tüm alt çizgileri boşluklarla değiştirir.

Bu sorunu çözmek için sihirli kelimesini her iki parametreye de uygulayın:

{{#ifeq: {{FULLPAGENAME: L'Aquila}} | {{FULLPAGENAME}} | equal | not equal}}equal

#iferror

Bu işlev bir giriş dizesi alır ve iki sonuçtan birini döndürür; giriş dizesi, #expr, #time ve #rel2abs gibi diğer ayrıştırıcı işlevler tarafından oluşturulan $hatalı bir HTML nesnesi içeriyorsa, döngüler ve özyinelemeler gibi şablon hataları varsa, işlev true olarak değerlendirilir, ve diğer "failsoft" ayrıştırıcı hataları.

{{#iferror: test string | value if error | value if correct }}

Dönüş dizelerinden biri veya her ikisi atlanabilir. correct dizesi atlanırsa, hatalı değilse test string döndürülür. error dizesi de atlanırsa, bir hata durumunda boş bir dize döndürülür:

{{#iferror: {{#expr: 1 + 2 }} | error | correct }}correct
{{#iferror: {{#expr: 1 + X }} | error | correct }}error
{{#iferror: {{#expr: 1 + 2 }} | error }}3
{{#iferror: {{#expr: 1 + X }} | error }}error
{{#iferror: {{#expr: 1 + 2 }} }}3
{{#iferror: {{#expr: 1 + X }} }}
{{#iferror: {{#expr: . }} | error | correct }}correct
{{#iferror: <strong class="error">a</strong> | error | correct }}error

Some errors may cause a tracking category to be added, using {{#iferror:}} will not suppress the addition of the category.

#ifexpr

Bu işlev, matematiksel bir ifadeyi değerlendirir ve sonucun boole değerine bağlı olarak iki dizeden birini döndürür:

{{#ifexpr: expression | value if true | value if false }}

expression girişi tam olarak yukarıdaki #expr için olduğu gibi değerlendirilir ve aynı operatörler kullanılabilir. Çıkış daha sonra bir boole ifadesi olarak değerlendirilir.

Boş bir giriş ifadesi false olarak değerlendirilir:

{{#ifexpr: | yes | no}}no

Yukarıda bahsedildiği gibi, sıfır false olarak değerlendirilir ve sıfır olmayan herhangi bir değer true olarak değerlendirilir, bu nedenle bu işlev yalnızca #ifeq ve #expr kullanan bir işleve eşdeğerdir:

{{#ifeq: {{#expr: expression }} | 0 | value if false | value if true }}

boş veya yanlış bir giriş ifadesi dışında (bir hata mesajı boş bir dize olarak değerlendirilir; sıfıra eşit değildir, bu nedenle value if true alırız).

{{#ifexpr: = | yes | no }} Expression error: Unexpected = operator.

karşılama

{{#ifeq: {{#expr: = }} | 0 | no | yes }} yes

Dönüş değerlerinden biri veya her ikisi atlanabilir; uygun dal boş bırakıldığında çıkış verilmez:

{{#ifexpr: 1 > 0 | yes }}yes
{{#ifexpr: 1 < 0 | yes }}
{{#ifexpr: 0 = 0 | yes }} yes
{{#ifexpr: 1 > 0 | | no}}
{{#ifexpr: 1 < 0 | | no}} no
{{#ifexpr: 1 > 0 }}

Boolean operators of equality or inequality operators are supported.

{{#ifexpr: 0 = 0 or 1 = 0 | yes}}yes
{{#ifexpr: 0 = 0 and 1 = 0 | | no}}no
{{#ifexpr: 2 > 0 or 1 < 0 | yes}}yes
{{#ifexpr: 2 > 0 and 1 > 0 | yes | no}}yes
Uyarı Uyarı: #ifexpr ile sayısal karşılaştırmaların sonuçları her zaman #ifeq ve #switch sonuçlarıyla eşleşmez. Bu son ikisi #ifexpr değerden daha doğrudur ve eşdeğer sonuçlar döndürmez.

Değiştirilen son rakamla bu karşılaştırmayı düşünün:

{{#ifeq: 12345678901234567 | 12345678901234568 | equal | not equal}}not equal
{{#switch: 12345678901234567 | 12345678901234568 = equal | not equal}}not equal

#ifeq ve #switch içinde kullanılan PHP, tamsayı türünde iki sayıyı karşılaştırdığından, beklenen sonucu doğru şekilde döndürür. #ifexpr ve aynı sayılarla:

{{#ifexpr: 12345678901234567 = 12345678901234568 | equal | not equal}}equal

Farklı rakamla, eşittir sonucu aslında yanlıştır.

#ifexpr değerindeki bu davranış, MediaWiki'nin ifadelerdeki değişmez sayıları, bunun gibi büyük tamsayılar için yuvarlamayı içeren float türüne dönüştürmesinden kaynaklanır.

#ifexist

Bu işlev bir giriş dizesi alır, onu sayfa başlığı olarak yorumlar ve sayfanın yerel vikide bulunup bulunmadığına bağlı olarak iki değerden birini döndürür.

{{#ifexist: page title | value if exists | value if doesn't exist }}

Sayfa mevcutsa, içerik barındırıyorsa, görünür şekilde boşsa (kategori bağlantıları veya sihirli kelimeler gibi meta veriler içeriyorsa, ancak görünür bir içerik sayfası yoksa işlev true olarak değerlendirir.), boş veya bir yönlendirme değerlendirilir. Sayfanın önceden var olduğu ancak silindiği de dahil olmak üzere, yalnızca kırmızı bağlantı verilen sayfalar false olarak değerlendirilir.

{{#ifexist: Help:Extension:ParserFunctions/tr | exists | doesn't exist }}exists
{{#ifexist: XXHelp:Extension:ParserFunctions/trXX | exists | doesn't exist }}doesn't exist

İşlev, özelleştirilmiş sistem mesajları ve yazılım tarafından tanımlanan özel sayfalar için true olarak değerlendirilir.

{{#ifexist: Special:Watchlist | exists | doesn't exist }}exists
{{#ifexist: Special:CheckUser | exists | doesn't exist }}exists (çünkü bu vikide Checkuser uzantısı yüklüdür)
{{#ifexist: MediaWiki:Copyright | exists | doesn't exist }}exists (çünkü MediaWiki:Copyright özelleştirildi)

Bir sayfa #ifexist: kullanarak bir hedefi kontrol ederse, o sayfa hedef sayfanın Special:WhatLinksHere listesinde görünür. Dolayısıyla, {{#ifexist:Foo }} kodu bu sayfaya (Help:Extension:ParserFunctions/tr) canlı olarak dahil edildiyse, Special:WhatLinksHere/Foo Help:Extension:ParserFunctions/tr sayfasını listeleyecektir.

Paylaşılan bir medya deposu kullanan wikilerde, bir dosyanın depoya yüklenip yüklenmediğini kontrol etmek için #ifexist: kullanılabilir, ancak vikinin kendisine yüklenmez:

{{#ifexist: File:Example.png | exists | doesn't exist }}doesn't exist
{{#ifexist: Image:Example.png | exists | doesn't exist }}doesn't exist
{{#ifexist: Media:Example.png | exists | doesn't exist }}exists

Dosya için yerel bir açıklama sayfası oluşturulmuşsa, yukarıdakilerin tümü için sonuç var olur.

#ifexist: vikiarası bağlantıları ile çalışmaz.

ifexist sınırları

#ifexist:, "zengin bir ayrıştırıcı işlevi" olarak kabul edilir; herhangi bir sayfaya yalnızca sınırlı sayıda dahil edilebilir (yansıtılmış şablonların içindeki işlevler dahil). Bu sınır aşıldığında, hedef sayfanın var olup olmadığına bakılmaksızın diğer #ifexist: işlevleri otomatik olarak false döndürür ve sayfa Category:Pages with too many expensive parser function calls olarak sınıflandırılır. İzleme kategorisi adı vikinizin içerik diline göre değişebilir.

Bazı kullanım durumlarında, a.new (var olmayan sayfalara bağlantılar seçmek için) veya a:not(.new) (mevcut sayfalara bağlantı seçmek için) seçicilerini kullanarak CSS ile ifexist efektini taklit etmek mümkündür. Ayrıca, tek bir sayfada kullanılabilecek pahalı ayrıştırıcı işlevlerin sayısı $wgExpensiveParserFunctionLimit ile kontrol edildiğinden, gerekirse LocalSettings.php içindeki sınırı da arttırılabilir.

ifexist ve istenen sayfalar

Mevcut olmayan ve #ifexist kullanımı için test edilen bir sayfa İstenen Sayfalar'da yer alacaktır. Nedeni için görev T14019 ve bir geçici çözüm için w:Template:Linkless exists sayfasına bakın.

#rel2abs

Bu işlev, göreli bir dosya yolunu mutlak bir dosya yoluna dönüştürür.

{{#rel2abs: path }}
{{#rel2abs: path | base path }}

path girişi içinde aşağıdaki sözdizimi geçerlidir:

  • . → mevcut düzey
  • .. → bir düzey yukarı çıkın
  • /foo → /foo alt dizinine bir düzey aşağı inin

base path belirtilmezse, bunun yerine sayfanın tam sayfa adı kullanılacaktır:

{{#rel2abs: /quok | Help:Foo/bar/baz }}Help:Foo/bar/baz/quok
{{#rel2abs: ./quok | Help:Foo/bar/baz }}Help:Foo/bar/baz/quok
{{#rel2abs: ../quok | Help:Foo/bar/baz }}Help:Foo/bar/quok
{{#rel2abs: ../. | Help:Foo/bar/baz }}Help:Foo/bar

/. veya /./ gibi geçersiz sözdizimi yoksayılır. İkiden fazla ardışık nokta izin verilmediğinden, ardışık ifadeleri ayırmak için aşağıdaki gibi diziler kullanılabilir:

{{#rel2abs: ../quok/. | Help:Foo/bar/baz }}Help:Foo/bar/quok
{{#rel2abs: ../../quok | Help:Foo/bar/baz }}Help:Foo/quok
{{#rel2abs: ../../../quok | Help:Foo/bar/baz }}quok
{{#rel2abs: ../../../../quok | Help:Foo/bar/baz }}Error: Invalid depth in path: "Help:Foo/bar/baz/../../../../quok" (tried to access a node above the root node).

For a similar group of functions see also Help:Magic words#URL data. Built-in parser functions include: 'localurl:', 'fullurl:', 'anchorencode:' etc.

#switch

Ayrıca bakınız: w:Help:Switch parser function

Bu işlev, bir giriş değerini birkaç test durumuyla karşılaştırır ve bir eşleşme bulunursa ilişkili bir dize döndürür.

{{#switch: comparison string
 | case = result
 | case = result
 | ...
 | case = result
 | default result
}}

Örnekler:

{{#switch: baz | foo = Foo | baz = Baz | Bar }} Baz
{{#switch: foo | foo = Foo | baz = Baz | Bar }} Foo
{{#switch: zzz | foo = Foo | baz = Baz | Bar }} Bar

Kısmi yansıtma etiketli #switch, şablon kodlamasına aşina olmayan bir düzenleyicinin yapılandırılabilir ögeleri görüntülemesini ve düzenlemesini sağlayan bir yapılandırma dosyasını etkileyebilir.

Varsayılan

case dizesi karşılaştırma dizesi ile eşleşmezse, varsayılan sonuç döndürülür:

{{#switch: test | foo = Foo | baz = Baz | Bar }} Bar

Bu sözdiziminde, varsayılan sonuç son parametre olmalı ve ham eşittir işareti içermemelidir ({{}} olmadan bir eşittir işareti). Varsa, büyük/küçük harf karşılaştırması olarak kabul edilecek ve hiçbir vaka eşleşmediyse hiçbir metin görüntülenmeyecektir. Bunun nedeni, varsayılan değerin tanımlanmamış olmasıdır (boş). Ancak bir durum eşleşirse, ilişkili dizesi döndürülür.

{{#switch: test | Bar | foo = Foo | baz = Baz }} →
{{#switch: test | foo = Foo | baz = Baz | B=ar }} →
{{#switch: test | test = Foo | baz = Baz | B=ar }} → Foo

Alternatif olarak, varsayılan sonuç, bir case "#default" dizesiyle açıkça bildirilebilir.

{{#switch: comparison string
 | case = result
 | case = result
 | ...
 | case = result
 | #default = default result
}}

Bu şekilde bildirilen varsayılan sonuçlar, işlev içinde herhangi bir yere yerleştirilebilir:

{{#switch: test | foo = Foo | #default = Bar | baz = Baz }} Bar

default parametresi atlanırsa ve eşleşme olmazsa, hiçbir sonuç döndürülmez:

{{#switch: test | foo = Foo | baz = Baz }}

Gruplandırma sonuçları

Birkaç case dizgisinin aynı sonuç dizgisini döndürdüğü 'geçiş' değerlerine sahip olmak mümkündür. Bu, çoğaltmayı en aza indirir.

{{#switch: comparison string
 | case1 = result1
 | case2 
 | case3 
 | case4 = result234
 | case5 = result5
 | case6 
 | case7 = result67
 | #default = default result
}}

Burada 2, 3 ve 4 numaralı durumların tümü result234 döndürür; durum 6 ve 7'nin her ikisi de result67 döndürür. Yukarıdaki durumda son parametredeki "#default = " atlanabilir.

Parametrelerle kullanın

İşlev, test dizesi olarak parametrelerle birlikte kullanılabilir. Bu durumda, boruyu parametre adından sonra yerleştirmek gerekli değildir, çünkü "{{{parameter name}}}" dizesi olarak bir büyük/küçük harf ayarlamayı seçmeniz pek olası değildir. (Bu, boru yoksa ve parametre yoksa veya bir değere sahipse parametrenin varsayılan olarak alacağı değerdir. Help:Şablonlarda ayrıştırıcı işlevler sayfasına bakın.)

{{#switch: {{{1}}} | foo = Foo | baz = Baz | Bar }}

Yukarıdaki durumda, {{{1}}}, foo ile eşitse, işlev Foo döndürür. baz ile eşitse, işlev Baz döndürür. Parametre boşsa veya mevcut değilse, işlev Bar döndürür.

Yukarıdaki bölümde olduğu gibi, durumlar tek bir sonuç verecek şekilde birleştirilebilir.

{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | Bar }}

Burada {{{1}}}, foo, zoo veya roo ile eşitse, işlev Foo döndürür. baz ile eşitse, işlev Baz döndürür. Parametre boşsa veya mevcut değilse, işlev Bar döndürür.

Ek olarak, test parametre değeri herhangi bir durumla eşleşmezse hiçbir şey döndürmek istemiyorsanız varsayılan sonuç atlanabilir.

{{#switch: {{{1}}} | foo = Foo | bar = Bar }}

Bu durumda, işlev, {{{1}}} mevcut olmadığı ve foo veya bar ile eşit olmadığı sürece boş bir dize döndürür; bu durumda sırasıyla Foo veya Bar döndürür.

Bu, varsayılan sonucu boş olarak bildirmekle aynı etkiye sahiptir.

{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | }}

Herhangi bir nedenle bir durumu "{{{parameter name}}}" olarak ayarlamaya karar verirseniz, parametre olmadığında veya bir değeri olmadığında işlev bu durumun sonucunu döndürür. İşlevin varsayılan sonucunu döndürmek için parametrenin var olması ve "{{{parameter name}}}" dizesinden başka bir değere sahip olması gerekir.

({{{1}}} olmadığında veya boş olduğunda):
{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }} Foo
({{{1}}} "test" değerine sahip olduğunda):
{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }} Bar
({{{1}}}, "{{{1}}}" değerine sahip olduğunda):
{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }} Foo


Bu varsayımsal durumda, boruyu ({{{1|}}}) parametresine eklemeniz gerekir.

Karşılaştırma davranışı

#ifeq ile olduğu gibi, karşılaştırma dizesi ve test edilen durum dizisinin her ikisi de sayısal ise karşılaştırma sayısal olarak yapılır; veya aksi takdirde büyük/küçük harfe duyarlı bir dize olarak:

{{#switch: 0 + 1 | 1 = one | 2 = two | three}} → three
{{#switch: {{#expr: 0 + 1}} | 1 = one | 2 = two | three}} → one
{{#switch: 02 | +1 = one | +2 = two | three}} → two
{{#switch: 100 | 1e1 = ten | 1e2 = hundred | other}} → hundred
{{#switch: a | a = A | b = B | C}} → A
{{#switch: A | a = A | b = B | C}} → C

Bir case dizesi boş olabilir:

{{#switch: | = Nothing | foo = Foo | Something }}Nothing

Bir eşleşme bulunduğunda, sonraki cases yoksayılır:

{{#switch: b | f = Foo | b = Bar | b = Baz | }}Bar
Uyarı Uyarı: #switch ve #ifeq ile yapılan sayısal karşılaştırmalar, ifadelerdeki karşılaştırmalara eşdeğer değildir (yukarıya da bakın):
{{#switch: 12345678901234567 | 12345678901234568 = A | B}} → B
{{#ifexpr: 12345678901234567 = 12345678901234568 | A | B}} → A


Ham eşittir işaretleri

"Case" dizeleri ham eşittir işaretleri içeremez. Bu sorunu çözmek için, tek bir eşittir işareti içeren bir $tpl şablonu oluşturun: $code1 veya eşittir işaretini HTML kodu &#61; ile değiştirin.

Örnek:

Yazdığın Yaptığın
{{#switch: 1=2
 | 1=2 = raw
 | 1<nowiki>=</nowiki>2 = nowiki
 | 1{{=}}2 = template
 | default
}}
template
{{#switch: 1=2
 | 1&#61;2 = html
 | default
}}
html
Bu işlevin kullanımının basit bir gerçek yaşam örneği için [$enwp-nba-color Template:NBA color] sayfasını kontrol edin. $tpl-ext ve w:Template:BOTREQ altında iki karmaşık örnek bulunabilir.


#ifeq değiştirme

#switch, genişleme derinliğini azaltmak için kullanılabilir.

Örneğin:

  • {{#switch:{{{1}}} |condition1=branch1 |condition2=branch2 |condition3=branch3 |branch4}}

eşdeğerdir

  • {{#ifeq:{{{1}}}|condition1 |branch1 |{{#ifeq:{{{1}}}|condition2 |branch2 |{{#ifeq:{{{1}}}|condition3 |branch3 |branch4}}}}}}

yani derin yuvalama, doğrusal:

{{#ifeq:{{{1}}}|condition1
  |<!--then-->branch1
  |<!--else-->{{#ifeq:{{{1}}}|condition2
                |<!--then-->branch2
                |<!--else-->{{#ifeq:{{{1}}}|condition3
                              |<!--then-->branch3
                              |<!--else-->branch4}}}}}}

Öte yandan, anahtarın değiştirilmesi, her iki dalda iç içe geçmiş IF'ler için karmaşık/pratik olabilir (girinti alternatifleriyle gösterilir, her iki tarafta girintili), tam simetrik ağaç yapar:

{{#ifeq:{{{1}}}|condition1
 |<!--then-->branch1t{{
  #ifeq:{{{1}}}|condition2
   |<!--then-->branch1t2t{{#ifeq:{{{1}}}|condition4|<!--then-->branch1t2t4t|<!--else-->branch1t2t4e}}
   |<!--else-->branch1t2e{{#ifeq:{{{1}}}|condition5|<!--then-->branch1t2e5t|<!--else-->branch1t2e5e}}
  }}
 |<!--else-->branch1e{{#ifeq:{{{1}}}|condition3
   |<!--then-->branch1e3t{{#ifeq:{{{1}}}|condition6|branch1e3t6t|branch1e3t6e}}
   |<!--else-->branch1e3e{{
    #ifeq:{{{1}}}|condition7
     |branch1e3e7t
     |branch1e3e7t
    }}
  }}
}}

#time

Bu ayrıştırıcı işlevi bir tarih ve/veya saat (Miladi takvimde) alır ve verilen sözdizimine göre biçimlendirir. Bir tarih/saat nesnesi belirtilebilir; varsayılan değer sihirli kelime {{CURRENTTIMESTAMP}} – diğer bir deyişle, sayfanın en son HTML'ye dönüştürüldüğü zaman.

{{#time: format string }}
{{#time: format string | date/time object }}
{{#time: format string | date/time object | language code }}
{{#time: format string | date/time object | language code | local }}

Kabul edilen biçimlendirme kodlarının listesi sağdaki tabloda verilmiştir. Biçimlendirme dizesindeki tanınmayan herhangi bir karakter değiştirilmeden geçirilir; bu aynı zamanda boşluklar için de geçerlidir (sistemin kodları yorumlamak için bunlara ihtiyacı yoktur). Biçimlendirme dizesindeki karakterlerden kaçmanın da iki yolu vardır:

  1. Bir biçimlendirme karakterinin ardından gelen bir ters eğik çizgi, tek bir değişmez karakter olarak yorumlanır
  2. Çift tırnak içine alınmış karakterler, değişmez karakterler olarak kabul edilir ve tırnak işaretleri kaldırılır.

Ek olarak, xx digrafı tek bir değişmez "x" olarak yorumlanır. Any character in the formatting string that is not recognized is passed through unaltered; this applies also to blank spaces (the system does not need them for interpreting the codes). There are also two ways to escape characters within the formatting string:

  1. A backslash followed by a formatting character is interpreted as a single literal character
  1. Characters enclosed in double quotes are considered literal characters, and the quotes are removed.

In addition, the digraph xx is interpreted as a single literal "x".

Biçimlendirme kodları listesi gelişmeye devam ettikçe (yeni takvimlerin veya farklı şekilde hesaplanan ve biçimlendirilen yeni tarih alanlarının desteğiyle), iletilmesi gereken tüm değişmez karakterlerden (yalnızca şu anda biçimlendirme kodlarında kullanılan ASCII harflerini değil) kaçınmalısınız.

Ne yazık ki, şimdilik, ASCII tek tırnak işareti, hâlihazırda desteklenen ASCII çift tırnak işaretine değişmez metni işaretlemek için basit bir alternatif olarak ve ters eğik çizgiler (JSON, C, C++, PHP, JavaScript, Lua dahil olmak üzere birçok dil tarafından kullanılan dize sabitlerinde de kaçılması gerekir) tanınmamaktadır (örneğin, JSON, C, C++... içinde dize değerlerinin sınırlandırılması gibi diğer kullanımlar için çift tırnak zorunludur). Dolayısıyla, herhangi bir çifte alıntıyı ters eğik çizgi ile çıkarmadan gömemezsiniz (veya bunun yerine başka kıvırcık, açısal veya kare tırnak işaretleri kullanabilirsiniz).

{{#time: Y-m-d }}2023-09-24
{{#time: [[Y]] m d }}2023 09 24
{{#time: [[Y (year)]] }}2023 (23UTCamSun, 24 Sep 2023 11:21:27 +0000)
{{#time: [[Y "(year)"]] }}2023 (year)
{{#time: i's" }}21'27"

tarih/zaman nesnesi PHP'nin strtotime() işlevi tarafından kabul edilen herhangi bir biçimde olabilir. Mutlak (ör. 20 December 2000), göreli (ör. +20 hours) ve birleşik zamanlar (ör. 30 July +1 year) kabul edilir.

{{#time: r|now}}Sun, 24 Sep 2023 11:21:27 +0000
{{#time: r|+2 hours}}Sun, 24 Sep 2023 13:21:27 +0000
{{#time: r|now + 2 hours}}Sun, 24 Sep 2023 13:21:27 +0000
{{#time: r|20 December 2000}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|December 20, 2000}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|2000-12-20}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|2000 December 20}}Error: Invalid time.

ISO 639-3 (?) içindeki dil kodu, dizenin seçilen dilde görüntülenmesini sağlar

{{#time:d F Y|1988-02-28|nl}}28 februari 1988
{{#time:l|now|uk}}неділя
{{#time:d xg Y|20 June 2010|pl}}20 czerwca 2010

local parametresi, tarih/saat nesnesinin yerel saat dilimine mi yoksa UTC'ye mi atıfta bulunduğunu belirtir.

Bu bir boole parametresidir: değeri, bağımsız değişkenin değeri kullanılarak belirlenir (dizenin boole değerlerine nasıl dönüştürüldüğüne ilişkin ayrıntılar için resmi PHP belgelerine bakın).

Lütfen, $wgLocaltimezone değişkeni UTC olarak ayarlanırsa, local, true veya false olarak ayarlandığında çıktıda hiçbir fark olmadığını unutmayın.

Ayrıntılar için aşağıdaki örneklere bakın:

{{#time: Y F d H:i:s|now|it|0}}2023 settembre 24 11:21:27
{{#time: Y F d H:i:s|now|it|1}}2023 settembre 24 11:21:27
{{#time: Y F d H:i:s|+2 hours||0}}2023 Eylül 24 13:21:27
{{#time: Y F d H:i:s|+2 hours||1}}2023 Eylül 24 13:21:27
{{#time:c|2019-05-16T17:05:43+02:00|it}}2019-05-16T15:05:43+00:00
{{#time:c|2019-05-16T17:05:43+02:00|it|0}}2019-05-16T15:05:43+00:00
{{#time:c|2019-05-16T17:05:43+02:00|it|true}}2019-05-16T15:05:43+00:00

Bir Unix zaman damgası hesapladıysanız, onu önceden bir @ sembolü ekleyerek tarih hesaplamalarında kullanabilirsiniz.

{{#time: U | now }}1695554487
{{#time: r | @1695554487 }}Sun, 24 Sep 2023 11:21:27 +0000
Uyarı Uyarı: Sayısal zaman damgası değerlerinden önce @ öneki olmadan, sonuç çoğu zaman bir hatadır veya beklenmeyen bir değerdir:
{{#time: r | 1970-01-01 00:16:39 }}Thu, 01 Jan 1970 00:16:39 +0000
{{#time: U | 1970-01-01 00:16:39 }}999
{{#time: r | @999 }}Thu, 01 Jan 1970 00:16:39 +0000 (doğru)
{{#time: r | 999 }}Error: Invalid time. (desteklenmeyen yıl biçimi)
{{#time: r | 1970-01-01 00:16:40 }}Thu, 01 Jan 1970 00:16:40 +0000
{{#time: U | 1970-01-01 00:16:40 }}1000
{{#time: r | @1000 }}Thu, 01 Jan 1970 00:16:40 +0000 (doğru)
{{#time: r | 1000 }}Wed, 24 Sep 1000 00:00:00 +0000 (geçerli ay ve ayın günü ile bir yıl olarak yorumlanır)
{{#time: r | 1970-01-01 02:46:39 }}Thu, 01 Jan 1970 02:46:39 +0000
{{#time: U | 1970-01-01 02:46:39 }}9999
{{#time: r | @9999 }}Thu, 01 Jan 1970 02:46:39 +0000 (doğru)
{{#time: r | 9999 }}Fri, 24 Sep 9999 00:00:00 +0000 (geçerli ay ve ayın günü ile bir yıl olarak yorumlanır)
{{#time: r | 1970-01-01 02:46:40 }}Thu, 01 Jan 1970 02:46:40 +0000
{{#time: U | 1970-01-01 02:46:40 }}10000
{{#time: r | @10000 }}Thu, 01 Jan 1970 02:46:40 +0000 (doğru)
{{#time: r | 10000 }}Error: Invalid time. (desteklenmeyen yıl biçimi)
Uyarı Uyarı: Kabul edilebilir giriş aralığı 1 Ocak 0111 → 31 Aralık 9999'dur. 100 ile 110 yılları için çıktı tutarsızdır, Y ve artık yıllar 100-110 yılları gibidir, r, D, l ve U bu yılları şu şekilde 2000-2010 yorumlamak gibidir.
{{#time: d F Y | 29 Feb 0100 }}01 Mart 0100
(doğru, artık yıl yok), ancak
{{#time: r | 29 Feb 0100 }}Mon, 01 Mar 0100 00:00:00 +0000 (yanlış, 100, 2000 olarak yorumlansa bile, çünkü o artık bir yıldır)
{{#time: d F Y | 15 April 10000 }}Error: Invalid time.
{{#time: r | 10000-4-15 }}Sat, 15 Apr 2000 10:00:00 +0000

0-99 arasındaki yıl sayıları 2000-2069 ve 1970-1999 olarak yorumlanır, ancak başta sıfırlar ile 4 basamaklı biçimde yazıldığında:

{{#time: d F Y | 1 Jan 6 }}01 Ocak 2006
{{#time: d F Y | 1 Jan 06 }}01 Ocak 2006
{{#time: d F Y | 1 Jan 006 }}01 Ocak 2006
{{#time: d F Y | 1 Jan 0006 }}01 Ocak 0006 (4-digit format)
Hafta içi, 100-110 yılları için sağlanır ve 1753'ten itibaren 111-1752 yılları için r-çıkışı "Bilinmeyen" ve l-çıkışı "<>" gösterir. Sonuç olarak, r-çıkışı bu yıllar için giriş olarak kabul edilmemektedir.

Tam veya kısmi mutlak tarihler belirtilebilir; işlev, geçerli değerler kullanılarak belirtilmeyen tarihin bölümlerini "doldurur":

{{#time: Y | January 1 }}2023
Uyarı Uyarı: Doldurma özelliği tutarlı değil; bazı kısımlar mevcut değerler kullanılarak doldurulur, diğerleri doldurulmaz:
{{#time: Y m d H:i:s | June }}2023 06 24 00:00:00 Günün başlangıcını, ancak ayın geçerli gününü ve geçerli yılı verir.
{{#time: Y m d H:i:s | 2003 }}2003 09 24 00:00:00 Günün başlangıcını, ancak yılın geçerli gününü verir.

Doldurulan günün istisna durumu var:

{{#time: Y m d H:i:s | June 2003 }}2003 06 01 00:00:00 Günün başlangıcını ve ayın başlangıcını verir.

Dört basamaklı bir sayı her zaman bir yıl olarak yorumlanır, asla saat ve dakika olarak yorumlanmaz:[1]

{{#time: Y m d H:i:s | 1959 }}1959 09 24 00:00:00

Altı basamaklı bir sayı, mümkünse saat, dakika ve saniye olarak yorumlanır, ancak aksi takdirde bir hata olarak yorumlanır (örneğin, bir yıl ve ay değil):

{{#time: Y m d H:i:s | 195909 }}2023 09 24 19:59:09 Giriş, yıl+ay kodu yerine zaman olarak değerlendirilir.
{{#time: Y m d H:i:s | 196009 }}Error: Invalid time. 19:60:09 geçerli bir zaman olmasa da 196009, Eylül 1960 olarak yorumlanmaz.

İşlev, belirli bir miktarda tarih matematiği gerçekleştirir:

{{#time: d F Y | January 0 2008 }}31 Aralık 2007
{{#time: d F | January 32 }}Error: Invalid time.
{{#time: d F | February 29 2008 }}29 Şubat
{{#time: d F | February 29 2007 }}01 Mart
{{#time:Y-F|now -1 months}}2023-Ağustos

#time çağrılarının biçim dizelerinin toplam uzunluğu 6000 karakterle sınırlıdır.[2]

Saat Dilimi sorunu

Bu #time ayrıştırıcı işlevinde (daha özel olarak PHP DateTime içinde), göreli zaman dilimi ofsetleri olarak tamsayı olmayan ögelerin iletilmesine izin vermeyen bir hata var. Bu sorun, EDT gibi bir saat dilimi kullanıldığında geçerli değildir. Örneğin:

  • {{#time:g:i A | -4 hours }} → 7:21 AM

Ancak Hindistan, UTC'den +5.5 saatlik bir zaman farkı üzerindedir ve bu nedenle kendi saat dilimini kullanmak, normal olarak göreli bir zaman dilimi farkının doğru hesaplanmasına izin vermez. İşte olanlar:

  • {{#time:g:i A | +5.5 hours }} → 11:21 AM

Bu soruna geçici bir çözüm bulmak için, zamanı şu şekilde dakikalara veya saniyelere dönüştürmeniz yeterlidir:

  • {{#time:g:i A | +330 minutes }} → 4:51 PM
  • {{#time:g:i A | +19800 seconds }} → 4:51 PM

(Bu işlevin geliştiricisi Tim Starling, bu çözüm için tam sözdizimini sağladı.)

#timel

Bu işlev, local parametresi true olarak ayarlandığında {{#time: ... }} ile aynıdır, bu nedenle her zaman vikinin yerel saatini kullanır ($wgLocaltimezone içinde ayarlandığı gibi).

İşlevin sözdizimi şöyledir:

{{#timel: format string }}
{{#timel: format string | date/time object }}
{{#timel: format string | date/time object | language code }}
Lütfen, $wgLocaltimezone değişkeni UTC olarak ayarlanırsa, local, true veya false olarak ayarlandığında çıktıda hiçbir fark olmadığını unutmayın
Saat diliminin UTC olmadığı bir sunucudan #time ve #timel ayrıştırıcı işlevlerinin kullanımına örnek

Örneğin, aşağıdaki örneklere bakın:

{{#time:c|now|it}}2023-09-24T11:21:28+00:00
{{#time:c|now|it|0}}2023-09-24T11:21:28+00:00
{{#time:c|now|it|1}}2023-09-24T11:21:28+00:00
{{#timel:c|now|it}}2023-09-24T11:21:28+00:00
https://no.wikipedia.org/wiki/Maldiskusjon:Sommertid üzerinden uyarı örneği
Uyarı Uyarı: U'nun hem zaman hem de zaman dilimi için 1970-01-01 00:00:00 UTC'den farklı zaman dilimlerine sahip Vikipedi'lerde UTC'den (önceden GMT olarak biliniyordu) aynı sayıda saniye döndüreceğini unutmayın.
U Unix zamanı. 1 Ocak 1970 00:00:00 GMT'den bu yana saniyeler.
Z Saniye cinsinden zaman dilimi farkı.
{{#time: U}}1695554487
{{#timel: U}}1695554487
{{#time: Z}}0
{{#timel: Z}}0

#titleparts

Bu işlev, bir sayfa başlığını eğik çizgilere göre bölümlere ayırır ve ardından bu bölümlerden bazılarını çıkış olarak döndürür.

{{#titleparts: sayfa adı | döndürülecek segment sayısı | geri dönen ilk segment }}

Döndürülecek segment sayısı parametresi belirtilmemişse, varsayılan olarak "0" olur ve döndürülecek ilk segment üzerinden (dahil) tüm segmentleri döndürür. döndürülecek ilk segment parametresi belirtilmemişse veya "0" ise varsayılan olarak "1" olur:

{{#titleparts: Talk:Foo/bar/baz/quok }}Talk:Foo/bar/baz/quok
{{#titleparts: Talk:Foo/bar/baz/quok | 1 }}Talk:Foo See also {{ROOTPAGENAME }}.
{{#titleparts: Talk:Foo/bar/baz/quok | 2 }}Talk:Foo/bar
{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2 }}bar/baz
{{#titleparts: Talk:Foo/bar/baz/quok | | 2 }}bar/baz/quok
{{#titleparts: Talk:Foo/bar/baz/quok | | 5 }}

Her iki değer için de negatif değerler kabul edilir. döndürülecek segment sayısı parametresi için negatif değerler, dizenin sonundaki segmentleri etkin bir şekilde şerit eder. döndürülecek ilk segment için negatif değerler "bu segment sağdan sayılarak başla" anlamına gelir:

{{#titleparts: Talk:Foo/bar/baz/quok | -1 }}Talk:Foo/bar/baz Dizenin sonundan bir segment çıkarır. Ayrıca bakınız {{BASEPAGENAME}}.
{{#titleparts: Talk:Foo/bar/baz/quok | -4 }} Dizenin sonundan 4 parçayı da çıkarır
{{#titleparts: Talk:Foo/bar/baz/quok | -5 }} Dizenin sonundan 5 parça çıkarır (var olandan fazla)
{{#titleparts: Talk:Foo/bar/baz/quok | | -1 }} quok Son segmenti döndürür. Ayrıca bakınız {{SUBPAGENAME}}.
{{#titleparts: Talk:Foo/bar/baz/quok | -1 | 2 }} bar/baz Dizenin sonundan bir segmenti çıkarır, ardından ikinci segmenti ve ötesini döndürür
{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2 }} baz İkinci son öğeden kopyalamaya başlayın; dizenin sonundan bir segmenti çıkarın

İşlemeden önce, sayfa adı parametresinin kodu HTML ile çözülür: eğer bazı standart HTML karakter varlıkları içeriyorsa, bunlar düz karakterlere dönüştürüleceklerdir (UTF-8 ile dahili olarak kodlanmıştır, yani bu ayrıştırıcı işlevini kullanan MediaWiki kaynak sayfasındakiyle aynı kodlama).

Örneğin, sayfa adı içindeki herhangi bir &quot;, &#34; veya &#x22; oluşumu " ile değiştirilecektir.
HTML'den düz metne başka bir dönüşüm gerçekleştirilmez, bu nedenle HTML etiketleri, sayfa başlıklarında geçersiz olsalar bile bu ilk adımda olduğu gibi bırakılır.
MediaWiki'nin ({{PAGENAME }} ve benzeri gibi) bazı sihirli anahtar kelimeleri veya ayrıştırıcı işlevlerinin, kendi giriş parametreleri HTML olarak kodlanmamış olsa bile, gereksiz yere HTML kodlu dizeler döndürdüğü bilinmektedir:

titleparts ayrıştırıcı işlevi daha sonra, bu döndürülen dizeleri, parametrede bir sayfa adı alan ({{PAGESINCAT: }} gibi ancak hâlâ HTML-kodlanmış giriş dizeleri ile düzgün çalışmayan) diğer bazı ayrıştırıcı işlevler tarafından doğru şekilde işlenebilmeleri için dönüştürmek için bir geçici çözüm olarak kullanılabilir.

Örneğin, geçerli sayfa Category:Côte-d'Or ise, o zaman:

  • {{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }} ve {{#ifeq: {{FULLPAGENAME}} | Category:Côte-d&apos;Or | 1 | 0 }} kodunun her ikisi de 1; (#ifeq ayrıştırıcı işlevi, giriş parametrelerinin HTML kodunu çözme işlemini gerçekleştirir).
  • {{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }} ve {{#switch: {{FULLPAGENAME}} | Category:Côte-d&apos;Or = 1 | #default = 0 }}'nin her ikisi de 1; (#switch ayrıştırıcı işlevi, giriş parametrelerinin HTML kodunu çözme işlemini gerçekleştirir).
  • {{#ifexist: {{FULLPAGENAME}} | 1 | 0 }}, {{#ifexist: Category:Côte-d'Or | 1 | 0 }} ve hatta {{#ifexist: Category:Côte-d&apos;Or | 1 | 0 }}, eğer o kategori sayfası varsa, 1 değerini döndürür (#ifexist ayrıştırıcı işlevi, giriş parametrelerinin HTML kodunu çözme işlemini gerçekleştirir);
  • {{PAGESINCAT: Côte-d'Or }} sıfır olmayan bir sayı döndürür, eğer o kategori sayfalar veya alt kategoriler içeriyorsa ancak:
  • {{PAGESINCAT: {{CURRENTPAGENAME}} }}, tıpkı aşağıdaki gibi koşulsuz olarak 0 döndürebilir:
  • {{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
  • {{PAGESINCAT: {{PAGENAME:Category:Côte-d&apos;Or}} }}

Bu beklenmedik davranışın nedeni, MediaWiki'nin güncel sürümlerinde iki uyarı olmasıdır:

  • {{FULLPAGENAME}}, hatta {{FULLPAGENAME:Côte-d'Or}} bile, beklenen Category:Côte-d'Or değil, gerçekte HTML kodlu Category:Côte-d&apos;Or dizesini döndürebilir ve:
  • {{PAGESINCAT: Côte-d&apos;Or }} koşulsuz şekilde 0 döndürür (PAGESINCAT sihirli anahtar kelimesi, giriş parametresinin HTML kodunu çözmez).

titleparts kullanan basit geçici çözüm (ki bu, MediaWiki'nin sonraki bir sürümünde iki uyarı düzeltilirse çalışmaya devam edecektir):

  • {{PAGESINCAT: {{#titleparts: {{CURRENTPAGENAME}} }} }}
  • {{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
  • {{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d&apos;Or}} }} }}, hepsi aynı kategorideki gerçek sayfa sayısını döndürür.

Ardından, kodu çözülen sayfa adı mümkün olduğunca MediaWiki tarafından desteklenen standart bir sayfa başlığına standart hâle getirilir:

  1. Tüm alt çizgiler otomatik olarak boşluklarla değiştirilir:
    {{#titleparts: Talk:Foo/bah_boo|1|2}}bah boo Orijinaldeki alt çizgiye rağmen bah_boo değil.
  2. Dize en fazla 25 kez bölünür; daha fazla eğik çizgi yok sayılır ve 25. öğe dizenin geri kalanını içerecektir. Dize ayrıca sayfa başlığı olarak kabul edildiğinden 255 karakterle sınırlıdır:
    {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee | 1 | 25 }}y/z/aa/bb/cc/dd/ee
    Herhangi bir nedenle bu işlevi sınırına kadar zorlamanız gerekiyorsa, pek olası olmasa da, işlev çağrılarını iç içe geçirerek 25 bölme sınırını atlamak mümkündür:
    {{#titleparts: {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee| 1 | 25 }} | 1 | 2}}z
  3. Son olarak, ilk alt dize yerel vikinin büyük harf kullanımı ayarlarına göre büyük harfle yazılır (bu alt dize de yerel bir ad alanı adıyla başlıyorsa, bu ad alanı adı da normalleştirilir).
    {{#titleparts: talk:a/b/c }}Talk:A/b/c
Uyarı Uyarı: #titleparts ile küçük bir "dize ayrıştırıcı ve dönüştürücü" olarak kullanabilirsiniz, ancak bunun büyük harfli ilk alt dizeyi döndürdüğünü düşünün:
{{#titleparts: one/two/three/four|1|1 }}One
{{#titleparts: one/two/three/four|1|2 }}two

Küçük harf gerekiyorsa, çıkışı kontrol etmek için lc: işlevini kullanın:

{{lc: {{#titleparts: one/two/three/four|1|1 }} }}one

Doğru ilk alt dize büyük harf kullanımını (büyük harf veya küçük harf) elde etmek için dizenin başına bir sahte eğik çizgi ekleyebilirsiniz. döndürülecek ilk segment için 1 yerine 2 kullanın:

{{#titleparts: /one/two/three/four|1|2 }}one
{{#titleparts: /One/two/three/four|1|2 }}One
Uyarı Uyarı: Bir sayfa başlığında geçersiz olan belirli karakterler, #titleparts ögesinin dizeyi ayrıştırmamasına neden olur:
{{#titleparts: {one/two} | 1 | 1 }}{one/two}. Beklenen üretmez: {one
{{#titleparts: [[page]]/123 | 1 | 2 }}page/123. Sayfa başlıklarında köşeli parantezler geçersiz olduğundan ve bu ayrıştırıcı işlevi, MediaWiki sözdizimini veya diğer HTML veya MediaWiki etiketlerini kullansalar bile, giriş sayfa adı parametresine gömülü bağlantıları işlemediği için çalışmaz.
{{#titleparts: red/#00FF00/blue | 1 | 3 }} → "". Sayfa başlıklarında "#" da yasa dışı olduğu için çalışmıyor.
Uyarı Uyarı: Başlığın herhangi bir kısmı yalnızca "." veya ".." ise, #titleparts dizeyi ayrıştırmaz:
{{#titleparts: one/./three | 1 | 1 }}one/./three. Tüm dize döndürülür. Bekleneni üretmiyor: one
Uyarı Uyarı: Giriş UTF-8'de 255 baytı aşarsa bu işlev düzgün bir şekilde bozulmaz. Giriş dizesi 256 bayt veya daha fazlaysa, tüm dize döndürülür.


StringFunctions

Bu işlevlerin tümü (len, pos, rpos, sub, replace, explode), StringFunctions uzantısından entegre edildi, ancak yalnızca bir hizmetli LocalSettings.php ile $wgPFEnableStringFunctions = true; ayarlarsa kullanılabilir.

Bu işlevlerin tümü O(n) zaman karmaşıklığında çalışır ve onları DoS saldırılarına karşı güvenli kılar.

  1. Bu işlevlerin bazı parametreleri, kötüye kullanımı önlemek için genel ayarlarla sınırlandırılmıştır. Bundan sonraki Sınırlar bölümüne bakın.
  2. Büyük/küçük harfe duyarlı işlevler için, bazı durumlarda geçici çözüm olarak sihirli kelime {{lc:string}} kullanabilirsiniz.
  3. Bir MediaWiki sunucusunun bu işlevleri etkinleştirip etkinleştirmediğini belirlemek için, Special:Version cinsinden desteklenen Genişletilmiş ayrıştırıcı işlevleri listesini kontrol edin.
  4. Dize uzunluğu $wgPFStringLengthLimit değişkeni ile sınırlıdır, varsayılan olarak 1000 ile sınırlıdır.

#len

#len ayrıştırıcı işlevi, sürüm 1.2.0'dan itibaren StringFunctions uzantısından birleştirilmiştir.
  1. len işlevi, verilen dizenin uzunluğunu döndürür.

Sözdizimi:

{{#len:string}}

Dönüş değeri her zaman dize kaynağındaki bir karakter sayısıdır (şablon çağrılarının genişletilmesinden sonra, ancak HTML'ye dönüştürülmesinden önce). Dize belirtilmezse, dönüş değeri sıfırdır.

  • Bu işlev, UTF-8 çok baytlı karakterlerle güvenlidir. Örnek:
    • {{#len:Žmržlina}}8
  • Baştaki ve sondaki boşluklar veya yeni satırlar sayılmaz, ancak ara boşluklar ve yeni satırlar dikkate alınır. Örnekler:
    • {{#len:Icecream }}8
    • {{#len: a   b }}5 - 2 karakter arasında 3 boşluk
  • Kaynak olarak verilen karakterler dönüştürülmez, kaynak biçimlerine göre sayılır.
    • {{#len:&nbsp;}}6 - adlandırılmış karakter kaynakları
    • {{#len:&#32;}}5 - sayısal karakter kaynakları, burada bir boşluk olmasına rağmen göz ardı edilmez.
  • ‎<nowiki> ve diğer etiket uzantıları gibi etiketlerin uzunluğu her zaman sıfır olacaktır, çünkü içerikleri ayrıştırıcıdan gizlenmiştir. Örnek:
    • {{#len:<nowiki>This is a </nowiki>test}}4

#pos

#pos ayrıştırıcı işlevi, sürüm 1.2.0'dan itibaren StringFunctions uzantısından birleştirilmiştir.
  1. pos işlevi, dize içindeki belirli bir arama teriminin konumunu döndürür.

Sözdizimi:

{{#pos:string|arama terimi|offset}}

offset parametresi, belirtilirse, bu işlevin aramaya başlaması gereken bir başlangıç konumunu söyler.

arama terimi bulunursa, dönüş değeri dize içindeki ilk konumun sıfır tabanlı bir tamsayıdır.

arama terimi bulunamazsa, işlev boş bir dize döndürür.

  • Bu işlev büyük/küçük harfe duyarlıdır.
  • Arama terimi yerinin izin verilen maksimum uzunluğu, $wgStringFunctionsLimitSearch küresel ayar ile sınırlandırılmıştır.
  • Bu işlev, UTF-8 çok baytlı karakterlerle güvenlidir. Örnek: {{#pos:Žmržlina|žlina}} 3 döndürür.
  • #len, ‎<nowiki> ve diğer etiket uzantılarında olduğu gibi, karakter konumu açısından 1 uzunluğa sahip olarak değerlendirilir.
Örnek: {{#pos:<nowiki>This is a </nowiki>test|test}} 1 döndürür.

#rpos

#rpos ayrıştırıcı işlevi, sürüm 1.2.0'dan itibaren StringFunctions uzantısından birleştirilmiştir.
  1. rpos işlevi, dize içindeki belirli bir arama teriminin son konumunu döndürür.

Sözdizimi:

{{#rpos:string|arama terimi}}

arama terimi bulunursa, dönüş değeri dize içindeki son konumunun sıfır tabanlı bir tamsayıdır.

arama terimi bulunamazsa, işlev -1 ile döner.

Son sınırlayıcıyı aramak için bunu kullanırken, son sınırlayıcıdan sonraki konumu almak için sonuca +1 ekleyin. Bu, sınırlayıcı bulunmadığında da çalışır, çünkü "-1 + 1", verilen değerin başlangıcı olan sıfırdır.
  • Bu işlev büyük/küçük harfe duyarlıdır.
  • Arama terimi yerinin izin verilen maksimum uzunluğu, $wgStringFunctionsLimitSearch küresel ayar ile sınırlandırılmıştır.
  • Bu işlev, UTF-8 çok baytlı karakterlerle güvenlidir. Örnek: {{#rpos:Žmržlina|lina}} 4 döndürür.
  • #len, ‎<nowiki> ve diğer etiket uzantılarında olduğu gibi, karakter konumu açısından 1 uzunluğa sahip olarak değerlendirilir.
Örnek: {{#rpos:<nowiki>This is a </nowiki>test|test}} 1 döndürür.

#sub

#sub ayrıştırıcı işlevi, sürüm 1.2.0'dan itibaren StringFunctions uzantısından birleştirilmiştir.
  1. sub işlevi, verilen dizeden bir alt dize döndürür.

Sözdizimi:

{{#sub:string|start|length}}

start parametresi, pozitifse (veya sıfırsa), döndürülecek ilk karakterin sıfır tabanlı bir dizinini belirtir.

Örnek: {{#sub:Icecream|3}} cream döndürür.

{{#sub:Icecream|0|3}} Ice döndürür.

start parametresi negatifse, sondan kaç karakter döndürüleceğini belirtir.

Örnek: {{#sub:Icecream|-3}} eam döndürür.

length parametresi, varsa ve pozitifse, döndürülen dizenin maksimum uzunluğunu belirtir.

Örnek: {{#sub:Icecream|3|3}} cre döndürür.

length parametresi negatifse, dizenin sonundan kaç karakterin çıkarılacağını belirtir.

Örnek: {{#sub:Icecream|3|-3}} cr döndürür.

start parametresi negatifse, sondan kaç karakter döndürüleceğini belirtir. length parametresi, varsa ve pozitifse, döndürülen dizenin başlangıç noktasından itibaren maksimum uzunluğunu belirtir.

Örnek: {{#sub:Icecream|-3|2}} ea döndürür.

  • length parametresi sıfır ise, hiçbir şekilde kesme için kullanılmaz.
    • Örnek: {{#sub:Icecream|3|0}} cream döndürür. {{#sub:Icecream|0|3}} Ice döndürür.
  • start, eksi length parametresi ile sondan itibaren kesmenin ötesinde bir konumu ifade ediyorsa, boş bir dize döndürülür.
    • Örnek: {{#sub:Icecream|3|-6}} boş bir dize döndürür.
  • Bu işlev, UTF-8 çok baytlı karakterlerle güvenlidir. Örnek: {{#sub:Žmržlina|3}} žlina döndürür.
  • #len, ‎<nowiki> ve diğer etiket uzantılarında olduğu gibi, karakter konumu açısından 1 uzunluğa sahip olarak değerlendirilir.
Örnek: {{#sub:<nowiki>This is a </nowiki>test|0}} test döndürür.

#count

#count ayrıştırıcı işlevi, 1.2.0 sürümünden itibaren StringFunctions uzantısına eklenmiştir.
  1. count işlevi, verilen metinde belirli bir alt dizenin kaç kez göründüğünü döndürür.
{{#count:string|substring}}

#replace

#replace ayrıştırıcı işlevi, sürüm 1.2.0'dan itibaren StringFunctions uzantısından birleştirilmiştir.
  1. replace işlevi, verilen dizeyi, bir arama teriminin tüm oluşumları yerine bir ikame terimle değiştirilerek döndürür.
{{#replace:string|search term|replacement term}}

search term belirtilmemişse veya boşsa, tek bir boşluk aranacaktır.

replacement term belirtilmemişse veya boşsa, search term tüm oluşumları dize üzerinden kaldırılacaktır.

  • Bu işlev büyük/küçük harfe duyarlıdır.
  • search term yerinin izin verilen maksimum uzunluğu, $wgStringFunctionsLimitSearch küresel ayarıyla sınırlıdır.
  • replacement term yerinin izin verilen maksimum uzunluğu, $wgStringFunctionsLimitReplace küresel ayarıyla sınırlıdır.
  • replacement term bir boşluk olsa bile boş bir dize kullanılır. Bu, MediaWiki ayrıştırıcısının bir yan etkisidir. replacement term olarak bir boşluk kullanmak için, onu nowiki etiketlerine koyun.
    • Örnek: {{#replace:My_little_home_page|_|<nowiki> </nowiki>}} My little home page döndürür.
    • Bu işe yaramazsa, kendi kendine kapanan iki etiketle {{#replace:My_little_home_page|_|<nowiki/> <nowiki/>}} deneyin.
    • Değiştirme teriminde bunun nowiki kabul edilebilir tek kullanımı olduğuna dikkat edin, aksi takdirde nowiki, çıkışa isteğe bağlı olarak çok sayıda karakter enjekte ederek $wgStringFunctionsLimitReplace atlamak için kullanılabilir. Bu nedenle, değiştirme süresi içindeki tüm ‎<nowiki> veya diğer etiket uzantıları boşluklarla değiştirilir.
  • Bu işlev, UTF-8 çok baytlı karakterlerle güvenlidir. Örnek: {{#replace:Žmržlina|ž|z}} Žmrzlina döndürür.
  • Tek bir metin dizesindeki birden çok ögenin değiştirilmesi gerekiyorsa, Extension:ReplaceSet da düşünülebilir. Bir dizi değiştirme için bir ayrıştırıcı işlevi ekler.
Büyük/küçük harfe duyarsız değiştirme

Şu anda sözdizimi, büyük/küçük harf duyarlılığı ayarını değiştirmek için bir anahtar sağlamaz. Ancak geçici bir çözüm olarak sihirli biçimlendirme kelimelerini kullanabilirsiniz. (ör. {{lc:dizeniz_buraya}}) Örneğin, "Category:" kelimesini büyük/küçük harfe bakılmaksızın dizeden çıkarmak istiyorsanız şunu yazabilirsiniz:

{{#replace:{{lc:{{{1}}}}}|category:|}}

Ancak dezavantaj, çıkışının tamamen küçük harf hâline gelmesidir. Muhafazayı değiştirdikten sonra tutmak istiyorsanız, aynı şeyi elde etmek için birden çok iç içe yerleştirme düzeyi (yani birden çok değiştirme çağrısı) kullanmanız gerekir.

#explode

#explode ayrıştırıcı işlevi, sürüm 1.2.0'dan itibaren StringFunctions uzantısından birleştirilmiştir.
  1. explode işlevi verilen dizeyi parçalara böler ve parçalardan birini döndürür.

Sözdizimi:

{{#explode:string|delimiter|position|limit}}

delimiter parametresi, string parçalara bölmek için kullanılacak bir dizeyi belirtir. Bu delimiter dizesi herhangi bir parçanın parçası değildir ve iki delimiter dizesi yan yana olduğunda aralarında boş bir parça oluştururlar. Bu parametre belirtilmezse tek boşluk kullanılır. limit parametresi, bağımsız StringFunctions sürümünde değil, yalnızca ParserFunctions'da mevcuttur ve son bölümde kalan tüm metinlerle birlikte döndürülen parça sayısını sınırlamanıza olanak tanır.

position parametresi hangi parçanın döndüreceğini belirtir. Parçalar 0'dan sayılır. Bu parametre belirtilmezse ilk parça kullanılır (0 numaralı parça). position olarak negatif bir değer kullanıldığında, parçalar sondan sayılır. Bu durumda -1 numaralı parça son parça anlamına gelir. Örnekler:

  • döndürür
  • döndürür
  • döndürür
  • döndürür

Dönüş değeri konum-inci parçadır. Konumun belirttiğinden daha az parça varsa, boş bir dize döndürülür.

  • Bu işlev büyük/küçük harfe duyarlıdır.
  • Sınırlayıcının izin verilen maksimum uzunluğu, $wgStringFunctionsLimitSearch küresel ayarıyla sınırlıdır.
  • Bu işlev, UTF-8 çok baytlı karakterlerle güvenlidir. Örnek: {{#explode:Žmržlina|ž|1}}, lina döndürür.

#urldecode

#urldecode, bir 'URL kodlanmış' dizesinden kaçış karakterlerini tekrar okunabilir metne dönüştürür. Sözdizimi:

{{#urldecode:değer}}

Notlar:

  • Bu işlev, PHP'nin urldecode() işlevini doğrudan açığa çıkararak çalışır.
  • Bir karakter kodu kaynağı www.w3schools.com adresinde bulunabilir.
  • Bunun tersi olan urlencode, 1.18 sürümünden itibaren MediaWiki'ye entegre edilmiştir; örnekler için Help:Sihirli Kelimeler sayfasına bakın.
  • urldecode, 2010 yılında Stringfunctions'dan 1b75afd18d3695bdb6ffbfccd0e4aec064785363 işlemle birleştirildi

Sınırlar

Bu modül üç genel ayarı tanımlar:

Bunlar, işlevlerin O(n) zaman karmaşıklığında çalışmasını sağlamak için bazı işlevlerin bazı parametrelerini sınırlamak için kullanılır ve bu nedenle DoS saldırılarına karşı güvenlidir.

$wgStringFunctionsLimitSearch

Bu ayar #pos, #rpos, #replace ve #explode tarafından kullanılır. Tüm bu işlevler, çalışırken daha büyük bir dizede bir alt dizeyi arar; bu, O(n*m) içinde çalışabilir ve bu nedenle yazılımı DoS saldırılarına karşı daha savunmasız hâle getirir. Bu değeri belirli bir küçük sayıya ayarlayarak, zaman karmaşıklığı O(n) ile düşürülür.

Bu ayar, aranan dizinin izin verilen maksimum uzunluğunu sınırlar.

Varsayılan değer 30 çok baytlı karakterdir.

$wgStringFunctionsLimitReplace

Bu ayar #replace tarafından kullanılır. Bu işlev, çok büyük miktarda veriyi hızla oluşturmak için kullanılabilen bir dizenin tüm oluşumlarını diğeriyle değiştirir ve bu nedenle yazılımı DoS saldırılarına karşı daha savunmasız hâle getirir. Bu ayar, değiştirilen dizenin izin verilen maksimum uzunluğunu sınırlar.

Varsayılan değer 30 çok baytlı karakterdir.

Genel noktalar

Yerine koyma

Ayrıştırıcı işlevleri, karma karakterinin önüne subst: eklenerek yerine koyabilir:

{{subst:#ifexist: Help:Extension:ParserFunctions/tr | [[Help:Extension:ParserFunctions/tr]] | Help:Extension:ParserFunctions/tr }}[[Help:Extension:ParserFunctions/tr]] kodu, Help:Extension:ParserFunctions/tr var olduğu sayfasından itibaren vikimetne eklenecektir.
Uyarı Uyarı: Yerine koyan ayrıştırıcı işlevlerinin sonuçları, ifadeler değişikenler veya diğer ayrıştırıcı işlevleri gibi yerine koyulmuş (koyulmamış) geçici kod içeriyorsa tanımsızdır. Tutarlı sonuçlar için, değerlendirilecek ifadedeki tüm uçucu kod değiştirilmelidir. Yardım:Yerine koyma sayfasına bakın.

Yerine koyma ‎<ref>‎</ref> içinde çalışmaz; bu amaçla {{subst:#tag:ref|}} kullanabilirsiniz.

Yönlendirmeler

Özellikle {{#time:…|now-…}}, tarihler içeren sayfalara yönlendirmeler için kullanışlı olabilir, ancak bu işe yaramaz.

Tablolarda kaçan boru karakterleri

Ayrıştırıcı işlevleri, vikitablo sözdizimini ve düz çizgi karakterlerini (|) yönetecek ve tüm ham boru karakterlerini parametre bölücüler olarak değerlendirecektir. Bunu önlemek için çoğu viki, içeriği yalnızca ham boru karakteri (|) olan bir şablon Template:! kullandı, çünkü MW 1.24 bir {{!}} sihirli kelime bu çamurun yerini aldı. Bu, boruyu MediaWiki ayrıştırıcısından 'gizler' ve bir sayfadaki tüm şablonlar ve değişkenler genişletilene kadar dikkate alınmamasını sağlar. Daha sonra bir tablo satırı veya sütun ayırıcısı olarak yorumlanacaktır. Alternatif olarak, daha az sezgisel ve hataya daha açık olmasına rağmen ham HTML tablosu sözdizimi kullanılabilir.

Ayrıca, bir HTML varlığı kullanarak düz, yorumlanmamış bir karakter olarak görüntülemek için boru karakterinden de çıkabilirsiniz: &#124;.

Açıklama Yazdığın Yaptığın
Tablo satırı/sütun ayırıcısı olarak çıkış borusu karakteri
{{!}}
|
Düz karakter olarak çıkış borusu karakteri
&#124;
|


Boşlukları çıkarma

Yeni satırlar, sekmeler ve boşluklar dahil olmak üzere boşluk, bu ayrıştırıcı işlevlerinin tüm parametrelerinin başından ve sonundan çıkarılır. Bu istenmiyorsa, dizeler tırnak içine alındıktan sonra karşılaştırma yapılabilir.

{{#ifeq: foo           |           foo | equal | not equal }}equal
{{#ifeq: "foo          " | "          foo" | equal | not equal }}not equal

then ve else bölümlerinin kırpılmasını önlemek için, $meta-tpl-if sayfasına bakın. Then ve else bölümlerinin kırpılmasını önlemek için, bkz. $meta-tpl-if. Bazı insanlar bunu boşluklar yerine <Template:$markup-nw> </nowiki> kullanarak başarır.

foo{{#if:|| bar }}foofoobarfoo
foo{{#if:||<nowiki /> bar <nowiki />}}foofoo bar foo

Ancak, ayrıştırıcı bir satırdaki birden çok boşluk karakterini tek bir karaktere sıkıştırdığından, bu yöntem yalnızca tek bir boşluk karakteri oluşturmak için kullanılabilir.

<span style="white-space: pre;">foo{{#if:||<nowiki/>      bar      <nowiki/>}}foo</span>
foo bar foo

Bu örnekte, boşlukları tarayıcı tarafından korunmaya zorlamak için white-space: pre stili kullanılır, ancak bununla bile boşluklar gösterilmez. Bunun nedeni, tarayıcıya gönderilmeden önce boşlukların yazılım tarafından çıkarılmasıdır.

Boşlukları &#32; (kırılabilir boşluk) veya &nbsp; yazılım tarafından değiştirilmediği için (kırılmaz boşluk) ile değiştirerek bu davranışa geçici bir çözüm bulmak mümkündür:

<span style="white-space: pre;">foo{{#if:||&#32;&#32;&#32;bar&#32;&#32;&#32;}}foo</span>foo bar foo
foo{{#if:||&nbsp;&nbsp;&nbsp;bar&nbsp;&nbsp;&nbsp;}}foofoo   bar   foo

Beware that not all parameters are created equal. In ParserFunctions, whitespace at the beginning and end is always stripped. In templates, whitespace at the beginning and end is stripped for named parameters and named unnamed parameters but not from unnamed parameters:

foo{{1x|content= bar}}foofoobarfoo
foo{{1x|1= bar}}foofoobarfoo
foo{{1x| bar }}foofoo bar foo

Ayrıca bakınız


Kaynakça

  1. 2011'de r86805 önce durum böyle değildi.
  2. ParserFunctions.php phabricator.wikimedia.org adresinde