Manual:Page content models/tr

MediaWiki 1.21 ile sunulan ContentHandler, vikimetin dışında yeni içerik modelleri eklemenize izin verir. Viki sayfalarının vikimetin dışındaki verilerden oluşmasını ve herhangi bir şekilde temsil edilmesini mümkün kılar. Örneğin: Markdown, reStructuredText, icalendar veya özel bir XML biçimi. Bu içerik modellerinin görüntülenmesi ve düzenlenmesi özel yollarla (örn. farklı sözdizimi vurgulama veya tamamen yeni veri giriş formları) ele alınabilir.

Bu sayfada, bir uzantıda yeni bir içerik modelinin nasıl oluşturulacağı açıklanmaktadır. Genel uzantı geliştirme uygulamalarına biraz aşinalık olduğunu varsayar. Gereksinimlerin kısa bir özeti için, bu sayfanın altındaki Özet bölümüne bakın.

Örnekler için anlamsız bir "Goat" içerik modeli kullanılacaktır. parçası olan DataPages uzantısını da inceleyebilirsiniz.

Kayıt
Her şeyden önce, içerik modelinin adını ve işleyici sınıfını dosyanıza ekleyin:


 * Buradaki sol taraftaki değer içerik türünün adıdır, istediğiniz herhangi bir benzersiz dize olabilir ve beş yerleşik içerik türü ile birlikte yaşar: 'wikitext', 'JavaScript', 'CSS', 'plain text', 'JSON'. Bu değer, Special:ChangeContentModel ve sayfa bilgisi ​​gibi yerlerde kullanıcılara gösterilir.
 * Sağ taraftaki değer, genişleyen bir sınıfın tam nitelikli adıdır.

Bu,  ve   olmak üzere iki yeni sınıfın  ile eklenmesini gerektirecektir (ad alanları  değilse). Bu sınıflar hakkında daha fazla bilgi aşağıda verilmiştir.

İsteğe bağlı içerik modeli sabitleri
Yukarıdaki 'goat' dizesi içerik modelidir (genellikle kodda  olarak adlandırılır) ve genellikle sabit olarak da tanımlanır. Bu sabitler tüm yerleşik içerik modelleri için tanımlanmıştır ve birçok belge "CONTENT_MODEL_XXX" sabitlerini ifade eder. Onları tanımlamadıysanız, bu biraz kafa karıştırıcı olabilir. Tanım, extension.json içindeki geri çağrı öğesi aracılığıyla yapılmalıdır. Örneğin:

içinde:

içinde:

Bunu bu şekilde yapmak zorunda değilsiniz ve yalnızca dizeyi kullanabilirsiniz.

İçerik modellerini sayfalara atama
Tüm bir viki ad alanının varsayılan içerik modeline sahip olmasını istiyorsanız, bunu extension.json içinde olduğu gibi tanımlayabilirsiniz:

Ya da, viki sayfası adına yarı dosya türü bir sonek ekleyerek içerik türünü belirlemek istiyorsanız, kancasını kullanabilirsiniz. Örneğin:

ContentHandler
Tanımlanacak bir sonraki şey, bu içerik türünün hangi formatta (bu durumda metin) depolanacağını da belirlediğimiz GoatContentHandler sınıfıdır. ContentHandlers, herhangi bir belirli sayfa içeriği hakkında hiçbir şey bilmiyor, ancak içeriğin genel yapısını ve depolanmasını belirliyor.

İçerik
GoatContent sınıfı, içeriğin verilerinin temsilidir ve sayfalar, revizyonlar veya veritabanında nasıl depolandığı hakkında hiçbir şey bilmiyor. Gerekli yedi kalıtımsal yöntemin yanı sıra, etki alanına özgü diğer genel yöntemler de ekleyebilirsiniz; bu durumda keçinin adını alabilmek istiyoruz.

Düzenleme formu
Şimdi iskeleti kurduk, bir Goat düzenlemeyi denemek isteyeceğiz. Bunu yapmak için,  oluştururuz ve hangi eylemleri hangi sınıflara eşlemek istediğimizi belirleriz. Başlangıç ​​olarak, sadece 'düzenle' ile ilgileneceğiz (URL'de  ile karşılık gelir).

Ve yeni GoatEditAction sınıfımızı oluşturacağız, temelde EditAction ile aynı, ancak kendi GoatEditPage kullanarak:

Yeni GoatEditPage sınıfımız, eylemin gerçekleştiği yerdir (kelime oyununu bağışlayın):

Artık bir sayfayı düzenleyebilmeli ve formunuzu görebilmelisiniz. Ancak içine veri koyduğunuzda ve 'önizleme' düğmesine tıkladığınızda, işlerin henüz tam olarak çalışmadığını ve çıkış alamadığınızı veya gönderdiğiniz metnin formda tekrar gösterilmediğini göreceksiniz.

Bu nedenle, yeni bir GoatSubmitAction sınıfı ve  yöntemimize   ilavesi ile 'gönder' eylemini de geçersiz kılmalıyız. GoatSubmitAction sınıfımız çekirdek sınıfımızla aynı olmalı, ancak GoatEditAction üzerinden miras almalıdır.

Display
A content model is responsible for producing any required output for display. This usually involves working with its data and producing HTML in some way, to add to the parser output.

Display a description/documentation
Sometimes you may want to display some informations or some documentation for an article that have a custom content model such as JSON. Actually there aren't system messages to display some text above such pages (with the exception of MediaWiki:Clearyourcache displayed above only JavaScript and CSS pages). You may want to see T206395 for further details.

Comparing revisions
The GoatDifferenceEngine class is the representation of the difference between goat contents. We override the default  method to generate a diff.

In order to tell MediaWiki to use our GoatDifferenceEngine, we overwrite the  in our GoatContentHandler.

Summary
To implement a new content model with a custom editing form, create the following: