# Bilgi Bankası Görünüm Kancaları

https://dev.wisecp.com/tr/bilgi-bankasi-gorunum-kancalari

Ziyaretçinin gördüğü bilgi bankasının dokuz kancası: gövde, ağaç, kapsam, popüler kutusu, arama ve dört gözlem noktası.

## Genel Bakış

Ziyaretçinin gördüğü her şey bu kancalardan geçer: makale gövdesi, kategori ağacı, popüler kutusu ve arama sonuçları. Dördü de **bağla geçer**, yani değişikliği döndürerek değil, gelen değerin üzerine yazarak yaparsınız.

Yanlarında dört gözlem kancası bulunur: makale okunması, kategori açılışı, oy ve arama. Bunlar bir şeyi değiştirmez, olduğunu bildirir.

## Referans

### Makale okunmasını izleme

actionknowledgebase.article.viewed

`website/knowledgebase` her açılışta

Bir makale görüntülendiğinde çalışır. Ziyaretçi giriş yapmamış olabilir.

Parametreler 2

$idintGörüntülenen makalenin kimliği.

$articlearrayMakale verisi; okunma sayacı **çoktan artırılmış** hâliyle.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:knowledgebase.article.viewed', 10, function ($id, $article) {
    // Ziyaretci giris yapmamis olabilir: kimlik varsayimi kurmayin.
    Acme::trackRead($id);
});
```

### Makale oyunu izleme

actionknowledgebase.article.voted

`website/knowledgebase` iki değerden biri

Ziyaretçi bir makaleyi yararlı ya da yararsız bulduğunda çalışır.

Parametreler 2

$idintOy verilen makalenin kimliği.

$typestringOyun yönü: `useful` ya da `useless`.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:knowledgebase.article.voted', 10, function ($id, $type) {
    // Yararsiz oylari yazi ekibine biriktirin.
    if ($type === 'useless') Acme::flagForReview($id);
});
```

### Kategori açılışını izleme

actionknowledgebase.category.viewed

`website/knowledgebase` seçili dilde

Bir kategori sayfası görüntülendiğinde çalışır.

Parametreler 2

$catIdintGörüntülenen kategorinin kimliği.

$catarrayKategori kaydı, **seçili dilde**: başlığı, bağlantısı ve arama başlıkları.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:knowledgebase.category.viewed', 10, function ($catId, $cat) {
    Acme::trackCategory($catId);
});
```

### Aramayı izleme

actionknowledgebase.searched

`website/knowledgebase` filtre sonrası

Ziyaretçi arama yaptığında çalışır. Sonuç **boş** olabilir; sonuçsuz aramalar yazılacak makaleyi gösteren en iyi listedir.

Parametreler 3

$querystringArama terimi, temizlenmiş hâliyle; boş gelmez.

$resultsarrayNihai sonuçlar, **filtreden geçtikten sonra**. Boş dizi sonuç bulunamadığı anlamına gelir.

$langstringAramanın yapıldığı dil.

Dönüş 1

voidDönüş yoksayılır. Sonucu değiştirmek için bu kanca değil, arama sonucu filtresi kullanılır.

Dinleyici PHP

```php
Hook::add('action:knowledgebase.searched', 10, function ($query, $results, $lang) {
    // Sonucsuz aramalar yazilacak makaleyi gosterir.
    if (!$results) Acme::noteGap($query, $lang);
});
```

### Makale gövdesini değiştirme

filterknowledgebase.article_content

`website/knowledgebase` bağla geçer

Makale gövdesi ekrana gitmeden önce çalışır. Kendi kısa kodlarınızı burada çözer, sürüm numarası gibi değişkenleri buraya gömersiniz.

Parametreler 2

$contentstringbağlaMakalenin ham gövdesi. Üzerine yazdığınız hâli nihai gövdedir.

$ctxarraybağlaBağlam: makalenin kimliği, aktif dil ve kategorisi.

Dönüş 1

voidDönüş yoksayılır; gövdenin üzerine yazarsınız. Gövde ham işaretlemedir ve doğrudan ekrana gider: buraya koyduğunuz kullanıcı verisini kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('filter:knowledgebase.article_content', 10, function (&$content, &$ctx) {
    // Kendi kisa kodunuzu cozun.
    $content = str_replace('[surum]', Acme::currentVersion(), $content);
});
```

### Görünecek kategorileri sınırlama

filterknowledgebase.category_scope

`website/knowledgebase` boş = kısıt yok

Makale sorguları kurulurken çalışır. Bilgi bankasını bir kitleye daraltmanın yolu budur: bayilere ayrı, son müşteriye ayrı.

Parametreler 2

$scopearraybağlaSorguların sınırlanacağı kategori kimlikleri. Kancaya **her zaman boş** girer, ve **boş bırakmak kısıt yok** demektir: dokunmazsanız bilgi bankasının tamamı görünür.

$ctxarraybağlaBağlam: hangi sayfa ve hangi dil. Salt bilgidir; değiştirmek akışı etkilemez.

Dönüş 1

voidDönüş yoksayılır; listeye kimlik yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:knowledgebase.category_scope', 10, function (&$scope, &$ctx) {
    // Bos birakmak "kisit yok" demektir: daraltmak istiyorsaniz doldurun.
    if (!Acme::isReseller()) $scope = Acme::publicCategories();
});
```

### Kategori ağacını değiştirme

filterknowledgebase.category_tree

`website/knowledgebase` bağla geçer

Yan taraftaki kategori ağacı hazırlandıktan sonra çalışır.

Parametreler 2

$treearraybağlaÜst seviye düğümler. Üzerine yazdığınız hâli nihai ağaçtır.

$ctxarraybağlaBağlam: hangi sayfa ve hangi dil.

Dönüş 1

voidDönüş yoksayılır; ağacın üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:knowledgebase.category_tree', 10, function (&$tree, &$ctx) {
    // Ic kullanim dalini ziyaretciden gizleyin.
    $tree = array_values(array_filter($tree, fn ($n) => ($n['id'] ?? 0) !== Acme::INTERNAL_CAT));
});
```

### Popüler makale listesini değiştirme

filterknowledgebase.popular_articles

`website/knowledgebase` bağla geçer

Yan taraftaki popüler makale kutusu doldurulurken çalışır.

Parametreler 2

$articlesarraybağlaListelenecek makaleler: başlıkları, bağlantıları ve okunma sayıları.

$ctxarraybağlaBağlam: hangi sayfa, hangi dil ve **istenen kayıt sayısı**. Listeye eklerken sınırı kendiniz gözetin: fazlası kutuya sığmaz.

Dönüş 1

voidDönüş yoksayılır; listenin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:knowledgebase.popular_articles', 10, function (&$articles, &$ctx) {
    // Sinir baglamda gelir: fazlasi kutuya sigmaz.
    array_unshift($articles, Acme::featuredArticle());
    $articles = array_slice($articles, 0, (int) ($ctx['limit'] ?? 6));
});
```

### Arama sonuçlarını değiştirme

filterknowledgebase.search_results

`website/knowledgebase` bağla geçer

Arama sonuçları ekrana gitmeden önce çalışır. Kendi kaynağınızdan sonuç eklemenin ya da sıralamayı değiştirmenin yeri burasıdır.

Parametreler 2

$resultsarraybağlaHam sonuç satırları: başlık, bağlantı, kategori adı ve okunma sayısı.

$ctxarraybağlaBağlam: arama metni ve dil.

Dönüş 1

voidDönüş yoksayılır; listenin üzerine yazarsınız. Burada yaptığınız değişiklik arama olayına da geçer: o kanca **sizden sonra** çalışır ve düzeltilmiş listeyi görür.

Dinleyici PHP

```php
Hook::add('filter:knowledgebase.search_results', 10, function (&$results, &$ctx) {
    // Kendi kaynaginizdan sonuc ekleyin.
    foreach (Acme::search($ctx['query'] ?? '', $ctx['lang'] ?? '') as $row) $results[] = $row;
});
```

## Tuzaklar

> **Boş kapsam kısıt değil, kısıtsızlıktır**
> 
> Kapsam listesi kancaya **her zaman boş** girer ve boş kalması “bilgi bankasının tamamı görünsün” demektir. Erişimi daraltmak isteyip listeyi boş bırakmak, tam tersini yapar.

> **Gövde ham işaretlemedir**
> 
> Makale gövdesi doğrudan ekrana gider; temizlenmez. Gövdeye dışarıdan gelen bir değer gömüyorsanız kaçışını kendiniz yapın.

## İlgili Makaleler

- Bilgi Bankası ve Bildirim Kancaları
- [Bildirim Kancaları](https://dev.wisecp.com/tr/bildirim-kancalari)
- [Kancalar Nasıl Çalışır](https://dev.wisecp.com/tr/kancalar-nasil-calisir)
