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. If you have not defined them, this can be a bit confusing. The definition should be done via the callback item in extension.json. For example:

In :

In :

You don't have to do it this way, and could just use the string.

Assigning content models to pages
If you want an entire wiki namespace to have a default content model, you can define it as such in extension.json:

Or if you want to determine the content type by the addition of a quasi-file-type suffix on the wiki page name, you can use the hook. For example:

ContentHandler
The next thing to define is the GoatContentHandler class, which is where we also specify what format this content type will be stored as (in this case, text). ContentHandlers don't know anything about any particular page content, but determine the general structure and storage of the content.

Content
The GoatContent class is the representation of the content's data, and does not know anything about pages, revisions, or how it is stored in the database. Beside the required seven inherited methods, you can add other public methods are domain-specific; in this case we want to be able to retrieve the goat's name.

Edit form
Now we've got the skeleton set up, we'll want to try editing a Goat. To do this, we create  and specify what actions we want to map to what classes. To start with, we'll just deal with 'edit' (which corresponds to  in the URL).

And we'll create our new GoatEditAction class, basically the same as the core EditAction but using our own GoatEditPage:

Our new GoatEditPage class is where the action happens (excuse the pun):

You should now be able to edit a page and see your form. But when you put data into it, and hit 'preview', you'll see that things are not yet working fully and that you get no output, nor is your submitted text shown again in the form.

So we must override the 'submit' action as well, with a new GoatSubmitAction class and the addition of  to our   method. Our GoatSubmitAction class should be the same as that of core, but inheriting from our GoatEditAction.

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: