Extension:JsonConfig/tr

$ 1 uzantısı, diğer uzantıların yapılandırma verilerini bir viki sayfasında JSON blobu olarak depolamasına izin verir.

Mevcut özellikler ve kullanım modelleri

 * You may use JsonConfig to store data in a number of ways:
 * in a single configuration page, e.g. a number of settings for your extension in "Config:MyExtSettings ( is the default namespace associated with the JsonConfig extension);
 * in a set of pages with similar structure residing in their own namespace, e.g. IP addresses of known proxies or event log schemas named "Proxy:Opera", or schemas named Schema:AccountCreation
 * using it only for pages whose titles match a regex pattern, e.g. Config:Proxy:Opera or Config:Opera.proxy. This avoids filling a wiki with lots of namespaces, one for each content model.
 * You may provide a content class to do data validation (beyond valid JSON) and normalization.
 * You may provide a view class to customize HTML display.
 * You can store data:
 * "one-per-wiki", "one-per-cluster", or even one per some "family" (different structure of the caching key for shared memcached);
 * in a public or private wiki and accessed with credentials;
 * in a separate cluster, and do remote notification when changed.

Current

 * Commons tabular data sets
 * Commons map data sets
 * Dashiki dashboard configurations
 * Others?

Past

 * Wikipedia Zero operator configurations (see Extension:ZeroBanner)

Bu değişken, her tür yapılandırma sayfası için profilleri tanımlar. , her bir alt dizinin aşağıdaki parametrelere sıfır veya daha fazlasına sahip olduğu ilişkilendirilebilir bir dizi dizisidir. Varsayılan olarak, JsonConfig dize anahtarını bu profilin temsil ettiği model kimliği olarak kullanır, ancak aynı model kimliğini birden fazla profilde yeniden kullanmak istemeniz durumunda bunu  parametresiyle geçersiz kılabilirsiniz.

Bu değişken, hangi özel içerik sınıfının hangi Model kimliğini işleyeceğini tanımlar. Aynı içerik sınıfı tarafından birden fazla Model Kimliği işlenebilir. Tüm içerik sınıfları  sınıfından türetilmelidir; model kimliği   ile eşleşirse, varsayılan   sınıfı model kimliğini işler.

Örnek:

HTML oluşturma için ayrı bir sınıf uygularsanız, yapılandırma modelinizi fazladan  sınıfı olan bir dizi olarak belirtebilirsiniz:

Hello World
The simplest case is a single configuration page without any validation, stored locally on each wiki. Just add these settings to LocalSettings.php

The above enables namespace "Config" on the local wiki, but only allows the "Config:MySettings" page to be created, not any other page in that namespace. You can store well-formed JSON data in the page.

To read the MySettings data in PHP, use a  object to access the page, then request its content:

Bir kümede paylaşılan birden fazla yapılandırma
Lets say we decide to store the trusted proxies' IPs as "Config:Proxy:SomeName" pages on Meta-Wiki and share this data with the cluster.

If instead you want to dedicate a separate namespace to proxies, the parameters would change to:

Doğrulama
Çoğu zaman, kendi doğrulamasına sahip özel bir içerik sınıfı da istenir. JSON sayfaları,  üzerinden türetilen içerik sınıfları tarafından yönetilir. İçerik sınıfı, ham metnin ayrıştırılması ve doğrulanmasından sorumludur. , JSON ayrıştırmasının ötesinde herhangi bir doğrulama yapmaz, ancak ondan türetmeyi ve  ile geçersiz kılmayı seçebilirsiniz. Daha da iyisi, bir dizi doğrulama ilkeli sağlayan ve yalnızca  ile geçersiz kılan   sınıfından türetebilirsiniz.

Bu belgenin iyiliği için, Opera Mini sunucularını açıklayan proxy yapılandırma sayfasının şu biçime sahip olduğunu varsayalım:

İşte bu verileri doğrulamak için içerik sınıfı.

Depolama vikisindeki özelleştirme davranışı
Ayrıca, depolama vikisinde görüntülemeyi ve sayfa oluşturmayı özelleştirmek isteyebilirsiniz (yukarıdaki örnekte Meta-Wiki). Bunu yapmanın iki yolu vardır: -türetilmiş sınıfınızın içinde veya   üzerinden türetilen ayrı bir "view" sınıfı aracılığıyla. İkinci yaklaşım, mimariyi temiz bir şekilde ayırdığı için tercih edilir ve görünüm sınıfının, verileri kullanan tüm vikilerde değil, yalnızca depolama vikisinde (örneğin, Meta-Wiki) bulunması gerekir.

-türetilmiş sınıftaki varsayılan değeri geçersiz kılmak için, yapıcıyı geçersiz kılın ve  değerini üst kurucuya iletmeden önce NULL olarak gelirse yeni varsayılana ayarlayın. HTML oluşturmayı geçersiz kılmak için  geçersiz kılın.

Önerilen şekilde,  veya daha zengin özelliklere sahip   üzerinden türetilen bir görünüm sınıfı oluşturun. için,  ve   uygulamanız gerekecek. Varsayılan olarak, görünüm  sınıfı tarafından uygulanır ve bu, görünümünde küçük ayarlamalara ihtiyacınız varsa özelleştirilebilir bir temel olarak da kullanılabilir.

En iyi uygulamalar

 * Extensions that use JsonConfig should add their configurations to the  and   in the main extension file.
 * If you share config data among multiple wikis, document the key name used in, and initialize the 'store' / 'remote' section in  . This is better than introducing a number of global variables that duplicate the config functionality. See for example Wikimedia's configuration of the Graph extension across multiple wikis (although that uses complex multi-wiki setup rather than simple config variables).

Uygulanan özellikler

 * JSON parsing converts JSON text into either an array or an object
 * Visualization shows JSON as an easy to view table rather than code, with some extra highlighting. For example if the value is not provided and a default is used, it is shown in gray, or when the value is the same as default, it shows as purple. For example, see this and this.
 * Code Editor simplifies JSON editing
 * Custom Validation performs complex checks such as checking that the value is in the proper format or that a user ID exists.
 * MemCached caching stores json blobs in memcached under custom keys and expiration policies, and resets them on save.
 * Flagged Revisions support allows configurations to be marked as "reviewed" before going into production
 * Localization of most basic interface elements has been done in many languages, and it would reduce translation work if most common messages would be done just once in one place.

Uygulanmamış hoş şeyler
These features would be desirable to more than one type of configs:
 * Schema validator - Validate against JSON Schema, as most extensions might not need complex validation rules, or might want to combine schema plus extra validation.
 * Custom editor - Zero team has been thinking about implementing a more complex editor, possibly based on JSON Schema.
 * API query support - Allow config pages to be returned as regular API results in all formats - json/xml/... instead of text blobs:
 * Localization - it would be good to be able to show localized descriptions for each configuration key
 * Localization - it would be good to be able to show localized descriptions for each configuration key

Dış erişim
The stored configuration data may frequently be needed by some external agent such as JavaScript, bot, or other programs. JavaScript could use either JSONP to access needed data by calling standard  API, or we could develop a forwarding service if CORS is unavailable. Extension authors may choose to add their own API modules to provide domain-specific information. Lastly, the  Query API parameter would return JSON data as part of the API result, not as a text blob that   would return.