Bilgi Bankası Yönetim Kancaları

1.6k görüntülenme Markdown

Makale ve kategori kaydetme ile silmenin sekiz kancası: her adımda durdurabileceğiniz bir kapı, ardından haber veren bir olay.

Genel Bakış

Bilgi bankası iki taraftan yönetilir: makaleler ve onları taşıyan kategoriler. Dördünün de kaydetme ve silme adımı bir kapı ile bir olay taşır: kapı yazımdan önce durdurabilir, olay yazımdan sonra haber verir.

İki ayrım işi kolaylaştırır. Kaydetme kapılarında sıfır kimlik yeni kayıt demektir. Silme kapılarına ise her zaman liste gelir, tek kayıt silinse bile.

Referans

Makale kaydını durdurma

gateknowledgebase.article.save
AdminKnowledgebase yazımdan önce

Bir makale kaydedilmeden önce çalışır. Yeni kayıt ile düzenleme aynı kapıdan geçer; hangisi olduğunu kimlik alanından anlarsınız.

Parametreler 2
$idintDüzenlenen makalenin kimliği; yeni kayıtta sıfır gelir.
$categoryintHedef kategori; sıfır ise makale kategorisizdir.
Dönüş 1
string|nullBoş olmayan bir metin işlemi engeller ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.
Dinleyici
Hook::add('gate:knowledgebase.article.save', 10, function ($id, $category) {
    // Sifir kimlik yeni kayit demektir: kategorisiz makale acilmasin.
    if ($id === 0 && $category === 0) return 'Yeni makale bir kategoriye baglanmali.';

    return null;
});

Makale kaydını izleme

actionknowledgebase.article.saved
AdminKnowledgebase yazımdan sonra

Makale kaydedildikten sonra çalışır. Dış arama dizininizi tazelemenin yeri burasıdır.

Parametreler 2
$articlearrayKaydedilen makalenin taze kaydı: kimliği, kategorisi, durumu, gizliliği ve sırası.
$isNewboolDoğruysa yeni oluşturuldu, yanlışsa var olan güncellendi.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:knowledgebase.article.saved', 10, function ($article, $isNew) {
    Acme::reindex('kb', (int) ($article['id'] ?? 0));
});

Makale silmeyi durdurma

gateknowledgebase.article.delete
AdminKnowledgebase her zaman liste

Makale silinmeden önce çalışır. Tek makale silindiğinde bile elinize liste gelir.

Parametreler 1
$idarraySilinecek makalelerin kimlikleri. Tek silmede de tek elemanlı bir dizidir: sayı bekleyip doğrudan kullanmayın.
Dönüş 1
string|nullBoş olmayan bir metin işlemi engeller ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.
Dinleyici
Hook::add('gate:knowledgebase.article.delete', 10, function ($id) {
    // Tek silmede bile dizidir.
    foreach ($id as $one)
        if (Acme::isPinned((int) $one)) return 'Sabitlenmis makale silinemez.';

    return null;
});

Makale silmeyi izleme

actionknowledgebase.article.deleted
AdminKnowledgebase silme sonrası

Makale silindikten sonra çalışır. Kapının aksine burada tek makale vardır: birden çok silinirse kanca her biri için ayrı çalışır.

Parametreler 2
$iintSilinen makalenin kimliği.
$articlearraySilme öncesi anlık görüntü, başlığı içinde. Kayıt artık yok: başlığa ihtiyacınız varsa buradan alın.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:knowledgebase.article.deleted', 10, function ($i, $article) {
    // Kanca makale basina calisir, toplu silmede birden cok kez.
    Acme::dropFromIndex('kb', $i);
});

Kategori kaydını durdurma

gateknowledgebase.category.save
AdminKnowledgebase yazımdan önce

Bir kategori kaydedilmeden önce çalışır.

Parametreler 2
$idintDüzenlenen kategorinin kimliği; yeni kayıtta sıfır.
$parentintÜst kategori; sıfır ise kategori köktedir.
Dönüş 1
string|nullBoş olmayan bir metin işlemi engeller ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.
Dinleyici
Hook::add('gate:knowledgebase.category.save', 10, function ($id, $parent) {
    // Kok seviyeyi sabit tutun.
    if ($parent === 0 && $id === 0) return 'Yeni kategori bir ust kategoriye baglanmali.';

    return null;
});

Kategori kaydını izleme

actionknowledgebase.category.saved
AdminKnowledgebase yazımdan sonra

Kategori kaydedildikten sonra çalışır.

Parametreler 2
$categoryarrayTaze kategori kaydı: kimliği, üstü, tipi, durumu ve sırası.
$isNewboolDoğruysa yeni oluşturuldu.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:knowledgebase.category.saved', 10, function ($category, $isNew) {
    Acme::refreshMenu((int) ($category['id'] ?? 0));
});

Kategori silmeyi durdurma

gateknowledgebase.category.delete
AdminKnowledgebase alt dallar dahil

Kategori silinmeden önce çalışır. Silme alt dallara iner: listede görmediğiniz alt kategoriler de gider.

Parametreler 1
$idarraySilinecek kategorilerin kimlikleri, tek silmede de dizi. Alt kategoriler burada listelenmez ama onlar da silinir: denetiminizi alt dalları da kapsayacak şekilde yazın.
Dönüş 1
string|nullBoş olmayan bir metin işlemi engeller ve yöneticiye hata olarak gösterilir. Boş dönüş devam ettirir.
Dinleyici
Hook::add('gate:knowledgebase.category.delete', 10, function ($id) {
    // Alt dallar listede yok ama onlar da silinir: agaci kendiniz gezin.
    foreach ($id as $one)
        if (Acme::branchHasPinned((int) $one)) return 'Alt dalinda sabitlenmis makale var.';

    return null;
});

Kategori silmeyi izleme

actionknowledgebase.category.deleted
AdminKnowledgebase üst kategori başına

Kategori silindikten sonra çalışır. Kanca üst kategori için çalışır; birlikte giden alt dallar için ayrıca çalışmaz.

Parametreler 2
$iintSilinen üst kategorinin kimliği.
$categoryarraySilme öncesi anlık görüntü, başlığı içinde.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:knowledgebase.category.deleted', 10, function ($i, $category) {
    // Alt dallar icin ayri cagri gelmez: temizligi kendiniz kapsayin.
    Acme::dropBranchFromIndex($i);
});

Tuzaklar

Silme kapısına her zaman liste gelir

Tek bir makale silindiğinde bile parametre tek elemanlı bir dizidir. Sayı bekleyip doğrudan karşılaştıran bir denetim sessizce hiçbir şey yakalamaz.

Kategori silmesi alt dallara iner, kanca inmez

Bir kategori silindiğinde altındaki bütün dal da silinir. Ama silme olayı yalnız üst kategori için çalışır: alt kategoriler için ayrı çağrı gelmez. Temizliğinizi ağacın tamamını kapsayacak biçimde yazın.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.