Bilgi Bankası Yönetim Kancaları
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
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.
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
Makale kaydedildikten sonra çalışır. Dış arama dizininizi tazelemenin yeri burasıdır.
Hook::add('action:knowledgebase.article.saved', 10, function ($article, $isNew) {
Acme::reindex('kb', (int) ($article['id'] ?? 0));
});Makale silmeyi durdurma
Makale silinmeden önce çalışır. Tek makale silindiğinde bile elinize liste gelir.
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
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.
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
Bir kategori kaydedilmeden önce çalışır.
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
Kategori kaydedildikten sonra çalışır.
Hook::add('action:knowledgebase.category.saved', 10, function ($category, $isNew) {
Acme::refreshMenu((int) ($category['id'] ?? 0));
});Kategori silmeyi durdurma
Kategori silinmeden önce çalışır. Silme alt dallara iner: listede görmediğiniz alt kategoriler de gider.
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
Kategori silindikten sonra çalışır. Kanca üst kategori için çalışır; birlikte giden alt dallar için ayrıca çalışmaz.
Hook::add('action:knowledgebase.category.deleted', 10, function ($i, $category) {
// Alt dallar icin ayri cagri gelmez: temizligi kendiniz kapsayin.
Acme::dropBranchFromIndex($i);
});Tuzaklar
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.
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.
İlgili Makaleler
- Bilgi Bankası ve Bildirim Kancaları
- Bildirim Kancaları
- Kancalar Nasıl Çalışır
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.