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

 * JsonConfig kullanan uzantılar, yapılandırmalarını ana uzantı dosyasındaki  ve   değerlerine eklemelidir.
 * Yapılandırma verilerini birden fazla viki arasında paylaşırsanız,  içinde kullanılan anahtar adını belgeleyin ve   içinde 'store' / 'remote' bölümünü başlatın. Bu, yapılandırma işlevini çoğaltan bir dizi genel değişken sunmaktan daha iyidir. Örneğin Wikimedia'nın Graph uzantısı yapılandırmasına bakın (bu, basit yapılandırma değişkenleri yerine karmaşık çoklu viki kurulumunu kullanmasına rağmen).

Uygulanan özellikler

 * JSON ayrıştırma JSON metnini bir diziye veya bir nesneye dönüştürür
 * Görselleştirme JSON'u koddan ziyade görüntülemesi kolay bir tablo olarak gösterir ve bazı ekstra vurgulamalar içerir. Örneğin, değer sağlanmadıysa ve varsayılan kullanılıyorsa, gri renkte gösterilir veya değer varsayılanla aynı olduğunda mor olarak gösterilir. 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.