bir proje geliştiriyorum ve modül sistemi için "https://github.com/nWidart/laravel-modules" paketini kullanıyorum ancak örnek veriyorum; wordpress tarzı seo paketi yazmak istesem modülleri diğer modüllerin içerisinde çalıştırmayı nasıl yapacağımı bulamadım (iç içe modül).
daha çok açıklarsam örnek gönderiler ve sayfalar modülü var ve bir de seo modülümüz var bu seo modülünü sayfalar ve gönderiler modülünde wordpress gibi çalıştırıyor olmam lazım.
bunun için bana yardımcı olur musun? bir fikire ihtiyacım var.
Laravel modül sistemi ve işleyişi hakkında yardıma ihtiyacım var.
mgsmus pakette sorun yok onu kullanabiliyorum sorun şurda; mesela o pakette modülleri yazıyorsun örnek; sayfalar modülü blog modülü gibi buraya kadar sorun yok ama ben mesela wordpress gibi bir de seo modülü yazmak istesem bu yazdığım seo modülünü eklenen diğer seo kullanılabilecek modüllerde wordpress seo paketleri gibi form da felan nasıl çalıştırabilirim.
umarım anlatabilmişimdir.
yapmak istediğim şey wordpress eklenti sistemi gibi bir sistem yazmak.
- Düzenlendi
coderr Çok genel bir soru ama aklıma ilk gelenleri söyleyeyim.
Soruna parça parça yaklaşmanız lazım. Bir modül var. Bu modül backend işi yapıyor olabilir, frontend işi yapıyor olabilir ya da her ikisini de yapıyor olabilir. Beklentiniz bu modülün başka bir modül ile ilişki kurması. Demek ki ilişki kuran modül, ilişki kurulan modül (buna plugin diyelim) ve bir de bu ilişkiyi tutan bir yere ihtiyacınız var (veri tabanı gibi).
+----------+--------+
| module | plugin |
+----------+--------+
| pages | seo |
| articles | seo |
+----------+--------+
Bu üstteki gibi ilişkiyi veri tabanında tuttuğunuzu düşünürseniz eğer, demek ki pages modülü plugin kabul eden bir modül olduğunu varsaymamız gerekiyor. Peki seo plugini pages modülünde nasıl devreye girebilir? Bu durumda pages modülünde plugin işlemlerinin girebileceği yer tutucular oluşturmanız lazım. Mesela frontend için şöyle yaptığınızı düşünün
pages/create.blade.php
@foreach($pageModule->plugins as $plugin)
@if($plugin->hasRenderableComponent())
<x-dynamic-component :component="$plugin->getRenderableComponentName()" />
@endif
@endif
Burada isimleri ve yöntemleri salladım. Eğer page modülünde render edilebilir bir component varsa (mesela seo formu) bunu create.blade.php sayfasına dahil ettim. Buna benzer bir şeyi de backend için yapacaksınız.
Bu konu açıkçası arge gerektiren bir konu, yapmanın bir çok yolu var ve hiçbiri kısa ve kolay değil. Araştırarak ilerlemeniz lazım. Wordpress ve diğer CMS'leri inceleyebilirsiniz. Daha önce hiç yapmadığım için daha detaylı bilgi veremiyorum.
- Düzenlendi
Sizin sorunununuzun çözümü mevcut tüm modüllerin ortak kullanabileceği kancalar üretmek. Wordpress de olduğu gibi. Bunla ilgili tayfun erbilen in bir videosu var. Örneğin save kancasına öncelikle modülleri autoload edip ekleme yapacak bir sistem kurmanız gerekiyor.
Her modül içinde yazı kaydından sonra save kancasındaki fonksiyonlar sırayla çalışacak.
Bu sadece bir örnektir.
Ama o zaman da bu kancalar nedeniyle performans sorunları yaşayacaksınız wordpress de olduğu gibi.
gokhancelebi
Teşekkür ederim. Aynen kanca sistemiyle yapmam gerektiğini düşündüm bende ancak laravelde nasıl kanca sistemi oluştururum mantığını kafamda oturtturamadım 1 haftadır kanca sistemini laravel'de araştırıyorum ama bir sonuca ulaşamadım bu konu hakkında öneriniz var mı? yanıtınız için teşekkür ederim.