Manual:Parser functions/tr

MediaWiki 1.7'de eklenen ayrıştırıcı işlevleri, ayrıştırıcıyla yakından bütünleşen bir uzantı türüdür. "Ayrıştırıcı işlevi" ifadesi, basit ayrıştırıcı işlevlerin bir koleksiyonu olan ile karıştırılmamalıdır. (Bunlar için sayfasına bakın.)

Açıklama
Bir etiket uzantısının işlenmemiş metni alması ve tarayıcıya HTML döndürmesi beklenirken, bir ayrıştırıcı işlevi sayfadaki diğer viki ögeleriyle'etkileşime girebilir. Örneğin, bir ayrıştırıcı işlevinin çıkışı bir şablon parametresi olarak veya bir bağlantı yapımında kullanılabilir.

Bir ayrıştırıcı işlevi için tipik sözdizimi şöyledir:

Daha fazla bilgi için için  bakın. Bu belgelendirme şunları belirtir:


 * Geri çağırma işlevi şu şekilde olmalıdır:
 * Veya bununla :
 * Veya bununla :

Çağrının ilk çeşidi tüm bağımsız değişkenleri düz metin olarak iletir. The second passes all arguments as an array of s, except for the first, which is currently text, though this may change in the future. Bunlar, genişletilmemiş vikimetni temsil eder. The  parameter can be used to expand these arguments as needed. Bu, genellikle koşullu işleme için kullanılır, böylece yalnızca "true" durum, if veya switch benzeri bir ayrıştırıcı işleviyle değerlendirilir. Frame nesnesi ayrıca arayan hakkında bilgi almak için belge ağacına tırmanabilir ve çağrı derinliğini, yaşam süresini ve ayrıştırıcı işlevinin sonucunun geçici olup olmadığını belirleme ve yönetme işlevlerine sahiptir.

Ayrıştırıcı işlevi oluşturmak, yeni bir etiket oluşturmaktan biraz daha karmaşıktır çünkü işlev adı, takma adları ve yerelleştirmeyi destekleyen bir anahtar sözcük olan sihirli kelime olmalıdır.



Basit örnek
Aşağıda, ayrıştırıcı işlevi oluşturan bir uzantı örneği verilmiştir.

Kayıt, sırasıyla extension.json içine ve kod src/ExampleExtensionHooks.php içine gider:

Uzantı dizininizdeki (src/ alt dizininde değil) başka bir dosya olan ExampleExtension.i18n.php şunları içermelidir:

Bu uzantı etkinleştirildiğinde,



şunu üretir:


 * param1 is hello and param2 is hi and param3 is hey

Within LocalSettings.php
Magic words and their handling parser functions can be defined entirely in.



Daha uzun işlevler
Daha uzun işlevler için, kanca işlevlerini bir _body.php veya .hooks.php dosyasına bölmek ve bunları bir sınıfın statik işlevleri yapmak isteyebilirsiniz. Ardından sınıfı ile yükleyebilir ve kancalardaki statik işlevleri çağırabilirsiniz; ör.:

Bunu  dosyanıza koyun:
 * Bakınız: diğer stiller için bir olay işleyicisi yazma.

Ardından bunu  dosyanıza koyun:

Önbelleğe almak
Etiket uzantılarında olduğu gibi, dinamik uzantılar için önbelleği devre dışı bırakmak için kullanılabilir.

Bunun performans üzerinde önemli bir olumsuz etkisi vardır, bu nedenle yalnızca gerektiğinde kullanın.



Ayrıştırıcı arayüzü


Çıkışnın ayrıştırılmasını kontrol etme
Ayrıştırıcı işleviniz tarafından döndürülen vikimetnin tamamen ayrıştırılması için (şablonların genişletilmesi dahil), dönerken  seçeneğini false olarak ayarlayın:

Görünüşe göre  için varsayılan değer false değerinden true değerine değişti, en azından bazı durumlarda, bazen 1.12 sürümü civarında.

Tersine, ayrıştırıcı işlevinizin vikimetni döndürmek yerine ayrıştırılmamış kalan HTML döndürmesini sağlamak için şunu kullanın:

Adlandırma
Varsayılan olarak, MW, her ayrıştırıcı işlevinin adına bir karma karakter (sayı işareti, "#") ekler. Bu eklemeyi bastırmak (ve "#" ön eki olmayan bir ayrıştırıcı işlevi elde etmek için), aşağıda açıklandığı gibi setFunctionHook ögenin isteğe bağlı flags bağımsız değişkenine SFH_NO_HASH sabitini dahil edin.

Karma öneki olmayan bir ad seçerken, bu işlev adıyla başlayan ve ardından iki nokta üst üste gelen bir ada sahip bir sayfanın dönüştürülmesinin artık mümkün olmadığını unutmayın. Özellikle, bir ad alanı adına eşit işlev adlarından kaçının. vikiarası yansıtmanın etkinleştirilmesi durumunda, vikiarası önekine eşit işlev adlarından da kaçının.



setFunctionHook kancası
Ayrıştırıcıya ilişkin arabirimle ilgili daha fazla ayrıntı için, include/Parser.php içindeki setFunctionHook belgelendirmeyi bakın. İşte bu yorumların (muhtemelen tarihli) bir kopyası:

function setFunctionHook( $id, $callback, $flags = 0 ) Parametreler:


 * dize $id - Sihirli kelime kimliği
 * karışık $callback - Kullanılacak geri çağırma işlevi (ve nesnesi)
 * tamsayı $flags - İsteğe bağlı, işlevi "#" olmadan çağırmak için SFH_NO_HASH sabitine ayarlayın.

Dönüş değeri: Varsa bu ad için eski geri çağırma işlevi

Bir işlev oluşturun, örneğin. Geri çağrı işlevi şu şekilde olmalıdır:

Geri çağrı, işlevin metin sonucunu veya 0 ögesindeki metni ve diğer ögelerde bir dizi bayrağı içeren bir diziyi döndürebilir. Bayrakların adları tuşlarda belirtilmiştir. Geçerli bayraklar şunlardır:


 * forceRawInterwiki
 * Force interwiki transclusion to be done in raw mode, not rendered.


 * found
 * Döndürülen metin geçerlidir, şablonu işlemeyi bırakın. Bu varsayılan olarak açıktır.


 * isChildObj
 * The text is a DOM node needing expansion in a child frame.


 * isHTML
 * Döndürülen metin HTML'dir, onu vikimetin dönüşümüne karşı korur But see discussion


 * isLocalObj
 * The text is a DOM node needing expansion in the current frame.


 * noparse
 * Güvenli olmayan HTML etiketleri çıkarılmamalı, vb.


 * nowiki
 * return değerindeki viki işaretlemesinden kaçınılmalıdır


 * preprocessFlags
 * Use these flags when parsing the returned text. This only applies when noparse is.


 * text
 * The text returned from the function. If isChildObj or isLocalObj are specified, this should be a DOM node instead.


 * title
 * The Title object where the text came from.

Expensive parser functions
Some parser functions represent a significant use of a wiki's resources and should be marked as "expensive". The number of expensive parser functions on any given page is limited by the setting. What counts as expensive is left up to the function itself, but typically, anything that is likely to cause a delay that extends beyond simple processing of data should be considered. This includes things like database reads and writes, launching a shell script synchronously, or file manipulation. On the other hand, not all such functions should necessarily be tagged. Semantic MediaWiki, for example, only marks a percentage of its database reads as expensive. This is due to the fact that on certain data-intensive pages, it could easily overflow the normal expensive parser function limits. In cases like this, the potential for noticeably slower performance that doesn't get flagged as expensive is a trade-off to having the functionality that SMW offers.

To mark your parser function as expensive, from within the body of the function's code, use. The return value will be if the expensive function limit has been reached or exceeded.



Adlandırılan parametreler
Ayrıştırıcı işlevleri, şablonların ve etiket uzantılarının yaptığı gibi adlandırılmış parametreleri desteklemez, ancak bazen onu taklit etmek yararlıdır. Kullanıcılar genellikle bağımsız değişkenleri ayırmak için dikey çubuklar ( | ) kullanmaya alışıktır, bu nedenle bunu ayrıştırıcı işlevi bağlamında da yapabilmek güzel. İşte bunun nasıl başarılacağına dair basit bir örnek:



Ayrıca bakınız

 * ParserFunctions uzantısı, iyi bilinen bir ayrıştırıcı işlevleri koleksiyonudur.
 * - çekirdek ve uzantılar tarafından sağlanan ayrıştırıcı işlevlerinin (tamamlanmamış) bir listesi
 * Bildirimsel ayrıştırıcı kancalar için nesne yönelimli bir arabirim sağlayan Ayrıştırıcı Kancaları PHP kitaplığı
 * ParserFunctions uzantısı, iyi bilinen bir ayrıştırıcı işlevleri koleksiyonudur.
 * - çekirdek ve uzantılar tarafından sağlanan ayrıştırıcı işlevlerinin (tamamlanmamış) bir listesi
 * Bildirimsel ayrıştırıcı kancalar için nesne yönelimli bir arabirim sağlayan Ayrıştırıcı Kancaları PHP kitaplığı
 * ParserFunctions uzantısı, iyi bilinen bir ayrıştırıcı işlevleri koleksiyonudur.
 * - çekirdek ve uzantılar tarafından sağlanan ayrıştırıcı işlevlerinin (tamamlanmamış) bir listesi
 * Bildirimsel ayrıştırıcı kancalar için nesne yönelimli bir arabirim sağlayan Ayrıştırıcı Kancaları PHP kitaplığı
 * Bildirimsel ayrıştırıcı kancalar için nesne yönelimli bir arabirim sağlayan Ayrıştırıcı Kancaları PHP kitaplığı