İnceleme Geliştirmelerini Düzenlemesi/Düzenleme incelemesi için yeni filtreler/Filtre nasıl uygulanır?

From mediawiki.org
This page is a translated version of the page Edit Review Improvements/New filters for edit review/How to implement a filter and the translation is 100% complete.

Ürün ve tasarım

İlk olarak cevaplamanız gereken bazı ürün ve tasarım soruları vardır:

  • Filtrenin amacı ve etkisi - Kullanıcı deneyimini ve kullanım durumlarını göz önünde bulundurun. Bu, filtrenin ne yapacağına ve nasıl açıklayacağınıza karar vermenize yardımcı olacaktır.
  • Metin seçin - User registration resminde gösterildiği gibi yerleştirilecek bir etikete ve açıklamaya ihtiyacınız olacaktır. Her ikisi de kısa olmalı. Ayrıca yeni bir grup oluşturuyorsanız bir grup başlığına ihtiyacınız olacaktır; grup hakkında daha fazla bilgi sağlamak için isteğe bağlı olarak Bu Nedir? metnini de belirtebilirsiniz.

Dinleyici

ChangesListSpecialPageStructuredFilters kanca için bir dinleyici kaydedin. Bu, aşağıda kullanılan bir $special örneği olan ChangesListSpecialPage erişmenizi sağlayacaktır.

Grup

İlk olarak, ChangesListStringOptionsFilterGroup veya ChangesListBooleanFilterGroup oluşturmak isteyip istemediğinizi seçin. ChangesListStringOptionsFilterGroup birçok seçeneğiniz varsa en iyisidir, doğal olarak gizleme tabanlı (örneğin hideanonlar) filtreler olarak ifade edilmezler ve/veya tam kapsam değildirler (tam kapsam, bir gruptaki tüm kutuları işaretlemek anlamına gelir. kutu işaretlememekle aynı). ChangesListBooleanFilterGroup mevcut gizleme tabanlı filtreler (hideanons gibi) veya bu fikir kullanılarak kolayca ifade edilebilen filtreler için en iyisidir.

Yeni bir grup oluşturuyorsanız, bunun için bir nesne oluşturun. 'name' bir iç tanımlayıcıdır. Ancak, ChangesListStringOptionsFilterGroup için, URL parametresi olarak da kullanılır. Her ikisi de (yukarıya bakın):

$group = new ChangesListBooleanFilterGroup(
    [
        'name' => 'groupname',
        'title' => 'myextension-rcfilters-groupname-title',
        
        'filters' => [
            // Each element of 'filters' is an array using the format
            // passed to the ChangesListBooleanFilter constructor
        ],
    ]
);

veya:

$group = new ChangesListStringOptionsFilterGroup(
    [
        'name' => 'groupname',
        'title' => 'myextension-rcfilters-groupname-title',
        'default' => 'foo,bar',
        
        'filters' => [
            // Each element of 'filters' is an array using the format
            // passed to the ChangesListStringOptionsFilter constructor
        ],
        
        'isFullCoverage' => true, // see explanation above for how to choose this value,
        'queryCallable' => function (
            $specialPageClassName,
            IContextSource $context,
            IDatabase $dbr,
            array &$tables,
            array &$fields,
            array &$conds,
            array &$query_options,
            array &$join_conds,
            array $selectedValues
        ) {
            // selectedValues is an array of the values the user chose.
            // Add necessary tables, fields, and conditions to implement your database condition.
        }
    ]
);

Her iki durumda da, grubu şunlarla kaydedersiniz:

$special->registerFilterGroup( $group );

İsteğe bağlı olarak Bu Nedir? açılır penceresine (whatsThisHeader, whatsThisBody, whatsThisUrl ve whatsThisLinkText - küçük resme bakın) bilgi ekleyebilirsiniz. Mevcut bir gruba (örneğin çekirdek tarafından tanımlanmış) erişmeniz gerekiyorsa, şunu kullanın:

$group = $special->getFilterGroup( 'existinggroup' );

Filtreler

Grup oluşturup oluşturmamanıza bakılmaksızın, yeni veya mevcut gruplara filtre eklemek istersiniz.

Tüm filtreler oluşturduğunuz bir gruba aitse, tanımları grup yapıcısının filters parametresine koymalısınız; bu onları sizin için otomatik olarak sipariş edecektir. Önceden var olan gruplara filtre eklemek için aşağıdaki talimatları izleyin.

Şu anda iki tür filtre vardır: ChangesListBooleanFilter ve ChangesListStringOptionsFilter. Her biri sadece eşleşen tipe sahip gruba gider. 'name', URL'de de görünen bir tanımlayıcı olarak kullanılır. kullanın:

$filter = new ChangesListBooleanFilter(
    [
		'name' => 'hidesomething',
		'group' => $group,
		'label' => 'myextension-rcfilters-groupname-hidesomething-label',
		'description' => 'myextension-rcfilters-groupname-hidesomething-desc',
		'showHideSuffix' => 'myextension-rcfilters-groupname-showhidesomething',
		'default' => false, // true to hide by default, false not to hide by default
		
		// Adjust priority as needed to order your filters where you wish, or use the
		// 'filters' parameter of the group constructor, which handles this.
		'priority' => -1,
		
		'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
		    &$query_options, &$join_conds ) {

			// Add necessary tables, fields, and conditions to implement your database condition.
		},
		'cssClassSuffix' => 'something',
		'isRowApplicableCallable' => function ( $ctx, $rc ) {
            // Return true if the $rc row (part of the result set) is controlled by this filter.
            // E.g. if this filter hides logged inusers, and $rc is an action taken
            // by a logged inuser.
		},
    ]
);

veya:

$filter = new ChangesListStringOptionsFilter(
    [
		'name' => 'choice',
		'group' => $group,
		'label' => 'myextension-rcfilters-groupname-choice-label',
		'description' => 'myextension-rcfilters-groupname-choice-desc',
		
		// Adjust priority as needed to order your filters where you wish, or use the
		// 'filters' parameter of the group constructor, which handles this.
		'priority' => -1,
		
		'cssClassSuffix' => 'something',
		'isRowApplicableCallable' => function ( $ctx, $rc ) {
            // Return true if the $rc row (part of the output) is controlled by this filter.
            // E.g. if this filter shows log actions, and $rc is a log action.
		},
    ]
);

Filtreyi oluşturduktan sonra herhangi bir şey yapmanız gerekmez.