Site İçeriği Kancaları

1.6k görüntülenme Markdown

Sayfalar, haberler, slaytlar, müşteri yorumları ve menünün on iki kancası.

Genel Bakış

Sitenin yazılı içeriği burada: sayfalar, sözleşmeler, haberler, makaleler, referanslar, slaytlar, müşteri yorumları ve menü.

Kaydetme yolu iki filtreye ayrılır: ana kayıt bir kez, dil verisi her dil için ayrı geçer. Gövdeyi temizleyecekseniz ikincisi doğru yerdir.

Referans

İçerik silmeyi durdurma

gateclient.content_delete
ClientContent beş içerik tipi

Bir site içeriği silinmeden önce çalışır. Sayfa, sözleşme, haber, makale ve referans aynı kapıdan geçer.

Parametreler 2
$pagearraySilinmek istenen kayıt.
$page_typestringİçeriğin tipi. Sözleşme silmek, ona bağlı sipariş akışını etkileyebilir: tipe göre daha sıkı davranın.
Dönüş 1
string|nullBoş olmayan bir metin işlemi engeller ve hata olarak gösterilir. Boş dönüş devam ettirir.
Dinleyici
Hook::add('gate:client.content_delete', 10, function ($page, $page_type) {
    // Sozlesme silmek siparis akisini etkileyebilir.
    if ($page_type === 'contract') return 'Sozlesmeler silinemez, pasife alin.';

    return null;
});

İçerik silinmesini izleme

actionclient.content.deleted
ClientContent silme sonrası

Site içeriği silindikten sonra çalışır.

Parametreler 3
$idintSilinen kaydın kimliği.
$page_typestringİçeriğin tipi.
$pagearraySilinmeden önce okunan kayıt.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:client.content.deleted', 10, function ($id, $page_type, $page) {
    Acme::dropFromIndex('page', $id);
});

İçeriğin görüntülenmesini izleme

actionclient.content.viewed
ClientContent her ziyarette

Bir site içeriği ziyaret edildiğinde çalışır. Ziyaretçi giriş yapmamış olabilir.

Parametreler 3
$idintGörüntülenen kaydın kimliği.
$typestringİçerik tipi.
$recordarrayKayıt verisi; ziyaret sayacı çoktan artırılmıştır. Şekli içerik tipine göre değişir: blogda kategori alanı vardır, düz sayfada yoktur.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:client.content.viewed', 10, function ($id, $type, $record) {
    // Her ziyarette calisir: hafif tutun.
    Acme::trackView($type, $id);
});

İçerik detay verisini değiştirme

filterclient.content_detail.data
ClientContent bağla geçer

İçerik ekrana gitmeden önce çalışır. Kendi kısa kodlarınızı çözmenin ya da arama başlıklarını değiştirmenin yeri.

Parametreler 3
$recordarraybağlaKayıt verisi: başlığı, gövdesi, bağlantısı ve arama başlıkları.
$idintbağlaKaydın kimliği.
$typestringbağlaİçerik tipi.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:client.content_detail.data', 10, function (&$record, &$id, &$type) {
    if ($type !== 'articles') return;

    $record['content'] = Acme::resolveShortcodes($record['content'] ?? '');
});

Kaydedilecek içerik verisini değiştirme

filterclient.content_save_data
ClientContent ayarlar metin

İçeriğin ana kaydı yazılmadan önce çalışır.

Parametreler 3
$set_dataarraybağlaYazılacak veri. ? Ayarlar alanı metindir, dizi değil: değiştirmek için çözüp düzenleyip yeniden kodlamanız gerekir. Diziymiş gibi yazarsanız kayıt bozulur.
$page_typestringİçerik tipi.
$idintKaydın kimliği; yeni kayıtta sıfır.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:client.content_save_data', 10, function (&$set_data, $page_type, $id) {
    // Ayarlar METIN: coz, duzenle, yeniden kodla.
    $opt = Utility::jdecode($set_data['options'] ?? '', true) ?: [];
    $opt['acme_reviewed'] = 1;
    $set_data['options'] = Utility::jencode($opt);
});

Dil verisini kaydetmeden değiştirme

filterclient.content_lang_data
ClientContent dil başına

İçeriğin her dili için ayrı çalışır. Gövde ham işaretleme olduğu için temizlemenin en doğru yeri burasıdır.

Parametreler 3
$set_lang_dataarraybağlaO dilin verisi: başlığı, adresi, gövdesi ve arama başlıkları. Adres alanını boş bırakırsanız kayıt kimliğine düşer.
$lkeystringDil anahtarı.
$page_typestringİçerik tipi.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız. Kanca her dil için ayrı çalışır: iki dilli bir kayıtta iki kez çağrılırsınız.
Dinleyici
Hook::add('filter:client.content_lang_data', 10,
    function (&$set_lang_data, $lkey, $page_type) {
        // Govde ham isaretleme: temizligin dogru yeri burasi.
        $set_lang_data['content'] = Acme::sanitize($set_lang_data['content'] ?? '');
    });

Sayfa kaydını izleme

actionclient.page_saved
ClientContent ekleme ve düzenleme

Bir sayfa kaydedildikten sonra çalışır.

Parametreler 3
$idintKaydın kimliği; yeni kayıtta gerçek kimlik geçer.
$page_typestringSayfa tipi.
$is_newboolDoğruysa yeni oluşturuldu.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:client.page_saved', 10, function ($id, $page_type, $is_new) {
    Acme::reindex('page', $id);
});

Blog kaydı kaydını izleme

actionclient.blog.saved
ClientContent ekleme ve düzenleme

Bir blog kaydı kaydedildikten sonra çalışır.

Parametreler 2
$idintKaydın kimliği; yeni kayıtta gerçek kimlik geçer.
$is_newboolDoğruysa yeni oluşturuldu.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:client.blog.saved', 10, function ($id, $is_new) {
    Acme::reindex('page', $id);
});

Haber kaydını izleme

actionclient.news.saved
ClientContent ekleme ve düzenleme

Bir haber kaydedildikten sonra çalışır.

Parametreler 2
$idintKaydın kimliği; yeni kayıtta gerçek kimlik geçer.
$is_newboolDoğruysa yeni oluşturuldu.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:client.news.saved', 10, function ($id, $is_new) {
    Acme::reindex('page', $id);
});

Slayt kaydını izleme

actionclient.slide.saved
ClientContent ekleme ve düzenleme

Bir slayt kaydedildikten sonra çalışır.

Parametreler 2
$idintKaydın kimliği; yeni kayıtta gerçek kimlik geçer.
$is_newboolDoğruysa yeni oluşturuldu.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:client.slide.saved', 10, function ($id, $is_new) {
    Acme::reindex('page', $id);
});

Müşteri yorumunun kaydını izleme

actionclient.feedback.saved
ClientContent onay durumu

Site üzerindeki müşteri yorumu kaydedildikten sonra çalışır.

Parametreler 3
$idintYorumun kimliği.
$statusstringDurumu: onaylı ya da onay bekliyor. Onay bekleyen bir yorum sitede görünmez: yayına bağlı iş yapmadan önce bakın.
$is_newboolDoğruysa yeni oluşturuldu.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:client.feedback.saved', 10, function ($id, $status, $is_new) {
    // Onay bekleyen yorum sitede gorunmez.
    if ($status === 'approved') Acme::publishTestimonial($id);
});

Menü değişikliklerini kaydetmeden değiştirme

filterclient.menu_save_changes
ClientContent işlem yığını

Site menüsündeki değişiklikler uygulanmadan önce çalışır.

Parametreler 1
$changesarraybağlaUygulanacak değişiklikler. Tek kayıt değil bir yığındır: her öğe işlem türünü ve verisini taşır. Aynı istekte ekleme, düzenleme, silme ve sıralama bir arada bulunabilir.
Dönüş 1
voidDönüş yoksayılır; verinin üzerine yazarsınız.
Dinleyici
Hook::add('filter:client.menu_save_changes', 10, function (&$changes) {
    // Yigin: ekleme, duzenleme, silme ve siralama bir arada olabilir.
    $changes = array_values(array_filter($changes,
        fn ($c) => ($c['type'] ?? '') !== 'delete' || Acme::menuDeletable($c['data'] ?? [])));
});

Tuzaklar

Ayarlar alanı metindir, dizi değil

İçerik kaydetme filtresinde ayarlar alanı kodlanmış metin olarak gelir. Ona diziymiş gibi bir anahtar yazmak alanı bozar ve kayıt okunamaz hâle gelir. Doğrusu: çöz, düzenle, yeniden kodla.

Dil filtresi her dil için ayrı çalışır

Dil verisi filtresi dil başına çağrılır: üç dilli bir kayıtta üç kez. Sayaç tutan ya da tek seferlik iş yapan bir dinleyici burada üç kez çalışır. Tek seferlik iş için ana kayıt filtresini kullanı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.