WebBlocks CMS Eklenti Sistemi
Bu belge, WebBlocks CMS eklenti sisteminin mimarisini kayıt altına alır. CMS çekirdeği; kayıt defteri (registry) destekli eklenti tanımlarına, süper yönetici tarafından manuel ZIP yükleme/kurulumuna, depolamaya ait kurulum yollarına, varsayılan olarak devre dışı kurulmuş eklentilere, açık etkinleştirme/devre dışı bırakma yönetimine, manuel yüklemeler için kaldırma desteğine, uyumluluk denetimlerine, yalnızca etkin eklentilere ait rotalar ve komutlara, ayarlar/detay iskeletine, sağlık/durum raporlamasına, tipli yönetici uzantı slotlarına, eklentiye ait blok bildirimlerine, genel varlık (asset) kancalarına, paket kuralı korumalarına, uyumlu genel katalog artefaktları için sağlama toplamı doğrulamalı bir Eklenti Kataloğu kurulum köprüsüne ve daha yeni uyumlu sürümü bulunan kurulu eklentiler için kontrollü, katalog destekli bir güncelleme eylemine sahip genel bir eklenti barındırıcısıdır. WebBlocks UI Manager artık CMS çekirdek çalışma zamanına dahil edilmez; yalnızca webblocksui.com gibi operatör kurulumlarına manuel olarak kurulan dahili/operatör eklenti artefaktıdır. Genel bir pazar yeri, tam bir uzak eklenti mağazası, rastgele Composer paketi kurucusu, otomatik harici eklenti indirme/güncelleme, otomatik harici üretim WebBlocks UI CDN dağıtımı veya genel güncelleme sunucusu yayımlama özelliği yoktur.
Temel Karar
WebBlocks CMS çekirdeği bir eklenti barındırıcısıdır.
Çekirdek paket, yeniden kullanılabilir CMS ürün yüzeyini sağlar:
- içerik ve site yönetimi
- genel (public) işleme altyapısı
- kullanıcı, rol ve izin temelleri
- yönetici kabuğu ve standart yönetici arayüz yüzeyleri
- eklenti keşfi, kayıt defteri ve uzantı slotu sözleşmeleri
Ürüne özgü veya iş alanına özgü yetenekler, yeniden kullanılabilir CMS ürününün parçası olmadıkça CMS çekirdeğine gömülmemelidir. Bir kurulumun başka bir ürünün menülerini, komutlarını, ayarlarını, veri tablolarını veya operasyonel iş akışlarını devralmaması için bunlar eklenti olarak sunulmalıdır.
Beklenen eklenti alanları şunları içerir:
- WebBlocks UI Release/CDN Manager
- QuizTem entegrasyonu
- analitik
- SEO pro araçları
- bülten
- ticaret
- medya iyileştirici
- güncelleme sunucusu yöneticisi
- özel blok paketleri
Çekirdek ve Eklenti Sınırı
Çekirdek yetenekler:
- siteler, sayfalar, bloklar, medya, kullanıcılar, diller (locale) ve temel ayarlar
- işleme, genel kabuk, yerleşim, slot ve blok altyapısı
- izin ve rol temeli
- yönetici kabuğu ve standart yönetici arayüz yüzeyi
- eklenti keşfi, kayıt defteri ve uzantı slotu sözleşmeleri
Eklenti yetenekleri:
- belirli bir ürüne veya iş alanına yönelik yönetici ekranları
- eklentiye ait bir rota ad alanı
- eklentiye ait izinler
- eklentiye ait ayarlar
- eklentiye ait konsol komutları
- eklentiye ait migration'lar
- eklentiye ait gösterge paneli bileşenleri
- eklentiye ait bloklar veya blok paketleri
- yalnızca açıkça bildirildiğinde, eklentiye ait genel rotalar
Çekirdek görünümlerin geçersiz kılınması varsayılan olarak yasaktır. Eklentiler CMS'i yalnızca belgelenmiş uzantı slotları ve kayıt defteri sözleşmeleri üzerinden genişletir. Bir eklenti paket görünümlerini değiştirmemeli, çekirdek servislere monkey patch uygulamamalı, gizli rota dosyaları eklememeli veya rastgele include yan etkilerine dayanmamalıdır.
Manuel ZIP Kurulumu
System -> Plugins, süper yöneticilerin yerel bir eklenti ZIP dosyası yüklemesine olanak tanır. ZIP yüklemek, ayrıcalıklı bir çalıştırılabilir kod kurulumudur. Kurucu, yapılandırılmış eklenti köküne (varsayılan olarak storage/app/webblocks/plugins/{plugin-handle}/{version}) herhangi bir şey yazmadan önce arşivi doğrular.
Doğrulama şunları gerektirir: webblocks-plugin.json veya manifest.json, kebab-case bir tanıtıcı (handle), semver benzeri bir sürüm, sağlayıcı/sınıf meta verileri, uyumlu bir CMS sürüm kısıtı, kurulu tanıtıcı çakışması olmaması, yalnızca göreli paket yolları, yol geçişi (path traversal) olmaması, mutlak yol olmaması, symlink girdisi olmaması ve app, packages, project, storage, vendor veya public/cms gibi yasak CMS/çekirdek hedeflerine yazma olmaması. Kurulan eklentiler, açık bir etkinleştirme adımı tamamlanmadıkça devre dışı kalır. Devre dışı eklentiler atıldır: rotalar, komutlar, menüler, ayar rotaları, sağlık raporlayıcıları, bileşenler, blok bildirimleri ve varlıklar kaydedilmez veya çalıştırılmaz ve System -> Plugins sağlık durumunu etkin değil/denetlenmedi olarak raporlar.
Manuel kaldırma yalnızca manuel olarak yüklenen eklentiler için kullanılabilir ve süper yönetici yetkisi gerektirir. Eklenti önce devre dışı bırakılmalıdır. Kaldırma işlemi, yapılandırılmış eklenti kökü altındaki kurulu eklenti paket dizinini ve etkin durum dosyasını siler; ancak eklentiye ait veritabanı tablolarını düşürmez veya yıkıcı migration'lar çalıştırmaz. Korunan/çekirdek/manuel olmayan eklentiler bu akış üzerinden kaldırılamaz.
Desteklenen manifest alanları şunları içerir: handle, label, description, version, provider, required_cms_version, permissions, commands, routes, settings, migrations, assets ve health. Migration'lar eklentiye ait dosyalar olarak kurulur ve yükleme ya da etkinleştirme sırasında asla otomatik çalıştırılmaz. Süper yöneticiler, eklenti detay ekranından açık eklenti kurulum eylemini çalıştırabilir; çalıştırıcı, yürütmeyi kurulu eklenti yoluna ve manifestte bildirilen migration dizinlerine sınırlar, kurulum sonuçlarını etkin durumda kaydeder ve migration kayıtları mevcut olduğu halde gerekli eklenti tabloları eksik olan, kurulum gerektiren bir eklentiyi onarabilir.
Manuel eklenti yaşam döngüsü şöyledir:
- ZIP dosyasını yükleyin/kurun. Eklenti varsayılan olarak devre dışıdır.
- Eklenti detay ekranını inceleyin.
- Uyumlu olduğunda eklentiyi etkinleştirin.
- Detay ekranı
Setup requiredveyaPlugin migrations pendingbildiriyorsa eklenti kurulumunu/migration'larını çalıştırın. - Kurulum hazır olduktan sonra operasyonel eklenti rotalarını kullanın.
- Rotaları, komutları, menüleri, ayarları, sağlık denetimlerini ve katkıları atıl hale getirmek için eklentiyi devre dışı bırakın.
- Kaldırmayı yalnızca devre dışı bırakma sonrasında yapın; kaldırma, eklentiye ait tabloları korur.
Kurulumu bekleyen etkin eklentiler yönetici rotalarını çökertmemelidir. Eklentiye ait tablolar eksikse, sağlık ve rota ekranları Plugin migrations pending veya Release tables are missing gibi kurulum gerektiğine dair yönlendirmeler raporlamalıdır.
Eklenti yönetici rotaları, bildirilmiş, tanıtıcı önekli izinleri kullanmalıdır. CMS super_admin kullanıcılarına, manuel olarak kurulan eklenti manifestlerinden yüklenen izinler dahil olmak üzere etkin eklentilerin aktif izinleri için açıkça izin verilir. Süper yönetici olmayan roller, gelecekteki bir CMS izin atama modeli eklentiye ait belirli izni tanımadıkça reddedilmeye devam eder. Ayar rotaları, eklenti bunu bildiriyorsa {plugin-handle}.manage iznini kullanır; aksi halde sistem erişimine geri döner.
Etkin ve uyumlu eklenti yönetici rotaları her zaman CMS yönetici rota yığını içinde çalışır: web, kurulum-zorunlu, CMS kimlik doğrulaması, CMS yönetici erişimi, eklenti kurulum koruması ve ardından eklenti rotası bildiriyorsa eklentiye ait izin ara katmanı (middleware). CMS kimlik doğrulama ara katmanı, Laravel'in web guard/oturum kullanıcısını kullanır ve misafirleri CMS'e ait webblocks.auth.login rotası üzerinden yönlendirir. Eklenti kurulum korumaları ek niteliktedir ve CMS kimlik doğrulamasının veya yönetici yetkilendirmesinin yerini almamalıdır; eklenti denetleyicileri, kimlik doğrulama/yönetici ara katmanı geçtikten sonra kimliği doğrulanmış CMS kullanıcısının mevcut olduğuna güvenebilir.
Eklenti Sözleşmesi ve Manifest
Her eklentinin bir tanıtıcısı (handle) olmalıdır:
- kebab-case
- kurulum içinde küresel olarak benzersiz
- sürümler arasında kararlı
- izinler, rotalar, tablolar, ayarlar, varlıklar ve paket kimliği için varsayılan önek olarak kullanılır
Her eklenti, bir manifest veya tanım nesnesi aracılığıyla meta verilerini bildirmelidir:
- tanıtıcı (handle)
- etiket
- sürüm
- sağlayıcı sınıfı
- isteğe bağlı açıklama
- gerekli CMS sürümü veya sürüm kısıtı
- ayar ad alanı
- veritabanı/tablo öneki
- izinler
- yönetici menü girdileri
- yönetici ve genel rotalar
- konsol komutları
- ayar şeması veya ayar sayfaları
- migration'lar
- bloklar veya blok paketleri
- varlıklar
- desteklendiğinde sağlık denetimleri
Eklentiler önce kayıt defteri (registry-first) yaklaşımıyla çalışır. CMS'e rastgele include'lar, kök görünüm geçersiz kılmaları veya kuruluma özgü rota dosyaları yerine açık sözleşmeler üzerinden bağlanırlar.
Katalog üzerinden güncellenen kurulu eklentiler, yedek paket yazıldıktan sonra CMS çekirdek çalışma zamanı yenilemesiyle yeniden yüklenir. Yenileme; eklenti kayıt defterini, izin, uzantı, sağlık ve optimize edilmiş Laravel çalışma zamanı önbellek durumunu temizler, ardından kurulu sürüm, aktif manifest sürümü, aktif sağlayıcı meta verileri ve rota/denetleyici kaynak yolu hizalı kalsın diye geçerli çalışma zamanı için aktif eklenti rotalarını yeniden oluşturur. Aynı PHP sürecinde daha eski bir kurulu paket sürümüne ait sağlayıcı sınıfı zaten yüklüyse, CMS bu sağlayıcıyı bayat kabul eder ve eski rota yollarını yeniden kullanmak yerine güncellenmiş manifest meta verilerine geri döner.
Eklenti yetkilendirmesi merkezî olarak CMS çekirdeği tarafından çözülür. Etkin eklentinin bildirdiği aktif, eklentiye ait izinler CMS super_admin kullanıcılarına izin verir ve aynı çözücü; eklenti menü görünürlüğü, gösterge paneli/sistem katkıları ve plugin.permission:* rota ara katmanı için de kullanılır. Yetkisiz kullanıcılar eşleşen eklenti menü girdilerini görmez; doğrudan URL erişimi kontrollü bir 403 olarak kalır. Kurulum gerektiren durumların ele alınması yetkilendirmeden sonra da geçerlidir ve eklenti migration'ları hâlâ açık işlemlerdir.
Geçerli kayıt defteri API biçimi:
PluginDefinition::make('webblocks-ui-manager')
->label('WebBlocks UI Manager')
->version('1.0.0')
->requiresCms('^1.32')
->provider(WebBlocksUiManagerServiceProvider::class)
->settingsNamespace('webblocks_ui_manager')
->databasePrefix('webblocks_ui_manager_')
->menu([
PluginMenuItem::make('releases')
->label('WebBlocks UI Releases')
->icon('package')
->route('webblocks.plugins.webblocks_ui_manager.releases.index')
->permission('webblocks-ui-manager.view'),
])
->permissions([
PluginPermission::make('webblocks-ui-manager.view')->label('View releases'),
PluginPermission::make('webblocks-ui-manager.manage')->label('Manage release metadata'),
PluginPermission::make('webblocks-ui-manager.publish')->label('Prepare CDN artifacts'),
])
->adminRoutes(__DIR__.'/../routes/admin.php')
->commands([
PrepareWebBlocksUiReleaseCommand::class,
])
->settings(
PluginSettingsDefinition::make()
->label('Release Settings')
->description('Controls WebBlocks UI release publishing defaults.')
)
->dashboardWidgets([
PluginDashboardWidget::make('webblocks-ui-manager.release-status')
->title('WebBlocks UI Releases')
->description('Read-only release publishing summary.')
->permission('webblocks-ui-manager.view'),
])
->systemCards([
PluginSystemCard::make('webblocks-ui-manager.cdn-status')
->title('CDN Status')
->description('Read-only CDN artifact status.')
->permission('webblocks-ui-manager.view'),
])
->blockTypes([
PluginBlockTypeDefinition::make('webblocks-ui-manager::release-card')
->label('Release Card'),
])
->publicAssets([
PluginPublicAsset::cssHead('webblocks-ui-manager.public-css', '/cms/plugins/webblocks-ui-manager/public.css'),
PluginPublicAsset::jsBodyEnd('webblocks-ui-manager.public-js', '/cms/plugins/webblocks-ui-manager/public.js'),
])
->health(WebBlocksUiManagerHealth::class);
Kesin API uygulama sırasında değişebilir, ancak sözleşme şu kuralları korumalıdır:
- bildirilen meta veriler, eklenti etkinleştirilmeden önce incelenebilir
- menü, rota, izin, komut, migration, blok, varlık ve ayar sahipliği bir eklenti tanıtıcısına atfedilebilir
- çakışmalar; kullanıcılar karışık sahiplik görmeden önce derleme, test, önyükleme tanılaması veya eklenti etkinleştirme sırasında başarısız olur
Paket Kural Kuralları
Eklenti paket kuralları, CMS çekirdek kurallarından ayrıdır. CMS çekirdeği barındırıcı sözleşmelerinin sahibidir; eklentiler kendi alan davranışlarının sahibidir.
- Tanıtıcı adlandırma:
analytics-toolsgibi kararlı kebab-case kullanın; tanıtıcı rotaları, izinleri, ayarları, tabloları, varlıkları ve yükseltme geçmişini sabitlediği için yayından sonra asla yeniden adlandırmayın. - Servis sağlayıcı kaydı: bir eklenti paketi tek bir Laravel servis sağlayıcısı sunmalı ve
PluginDefinitionnesnesini orada veya CMS kayıt defteri entegrasyon noktası üzerinden kaydetmelidir. Birinci taraf paket içi pilotlar, kendi Composer paketlerine ayrılana kadar doğrudan CMS paket sağlayıcısından kayıt yapabilir. - Tanım veya manifest yapısı:
handle,label,version,provider,description,requiresCms, ayar ad alanı, veritabanı öneki, izinler, rotalar, komutlar, uzantı slotları, varlıklar, bloklar ve sağlık raporlayıcısını açıkça bildirin. - Rota ad alanı: yönetici rotaları
/webadmin/plugins/{plugin-handle}/...altında, adları isewebblocks.plugins.{plugin_handle}.*altında yer alır. - İzin adlandırma: her eklenti izni
{plugin-handle}.ile başlar, örneğinanalytics-tools.view. - Ayar kuralları: ayar ad alanları snake_case biçimindedir ve varsayılan olarak tanıtıcının tirelerinin alt çizgiye dönüştürülmüş halidir.
- Komut adlandırma: çözülebilir Artisan komut adları
{plugin-handle}:ile başlamalıdır, örneğinanalytics-tools:sync. - Migration ve tablo adlandırma: tablolar, kayıt defterinde ayrılmış,
_ile biten snake_case bir önek kullanır; varsayılan olarak tanıtıcının snake_case'e dönüştürülmüş hali artı_. - Varlık katkıları: genel varlık tanıtıcıları eklenti tanıtıcısıyla nokta ad alanlıdır ve statik dosyalar eklentiye ait bir yol altında yayımlanmalıdır.
- Gösterge paneli ve sistem kartı katkıları: anahtarlar eklenti tanıtıcısıyla nokta ad alanlıdır ve daha sonraki bir uzantı sözleşmesi düzenlenebilir davranış ekleyene kadar salt okunur kalır.
WebBlocks UI Manager, birinci taraf pilot olarak bu kuralları izler: tanıtıcı webblocks-ui-manager, ayar ad alanı webblocks_ui_manager, veritabanı öneki webblocks_ui_manager_, komutlar webblocks-ui-manager:prepare-release ve webblocks-ui-manager:publish-release, rotalar /webadmin/plugins/webblocks-ui-manager altında ve rota adları webblocks.plugins.webblocks_ui_manager.* altında.
Uyumluluk ve Atıllık
Eklenti sürümleri semver benzeri meta verilerdir. requiresCms(), eklentinin ihtiyaç duyduğu CMS sürüm kısıtını bildirir. Mevcut temel, >=1.32.0 gibi tam/karşılaştırmalı kısıtları ve ^1.32 gibi caret kısıtlarını destekler.
Kayıt defteri, yapılandırılmış etkin durumu aktif durumdan ayırır:
- Yapılandırılmış etkin:
config/webblocks-plugins.phpeklentinin etkinleştirilmesi gerektiğini söyler. - Uyumlu: kurulu CMS sürümü, eklentinin gerekli CMS kısıtını karşılar.
- Aktif: eklenti hem yapılandırılmış etkin hem de uyumludur.
Yalnızca aktif eklentiler menülere, rotalara, komutlara, ayar rotalarına, gösterge paneli bileşenlerine, sistem kartlarına, blok bildirimlerine, genel varlıklara, izinlere ve sağlık raporlayıcı çalıştırmasına katkıda bulunur. Devre dışı ve uyumsuz eklentiler atıl kalır. Yapılandırılmış bir eklenti aktifleştirilemediğinde System -> Plugins, gerekli ve kurulu CMS sürümleriyle birlikte Incompatible gösterir.
Keşif ve Yerel Etkinleştirme
Faz 5, pazar yeri davranışı veya rastgele uzak kurulum eklemez. Güvenli keşif yerel ve açıktır:
- birinci taraf, pakete ait eklentiler CMS paket sağlayıcısı tarafından kaydedilebilir
- gelecekteki Composer paketi eklentileri, Laravel paket keşfi veya açık uygulama sağlayıcı yapılandırması üzerinden bir servis sağlayıcı kaydetmelidir
- kuruluma özel deneyler, geliştirme sırasında yerel Composer path depoları kullanabilir, ancak yine de normal bir sağlayıcı ve tanım kaydetmelidir
- etkinleştirme,
webblocks-plugins.enabled.{plugin-handle}üzerinden yapılandırma destekli kalır
Hiçbir çalışma zamanı özelliği rastgele Composer paketleri kurmaz, pazar yeri katalogları yayımlamaz, üretim CDN/güncelleme sunucusu artefaktları yazmaz, eklentileri otomatik etkinleştirmez, eklenti migration'larını/kurulumunu otomatik çalıştırmaz veya otomatik eklenti güncellemeleri yapmaz. Uzak eklenti artefakt köprüleri, aşağıda açıklanan süper yönetici tarafından başlatılan Eklenti Kataloğu kurulum/güncelleme eylemleriyle sınırlıdır ve her ikisi de eşleşen SHA-256 meta verisine sahip kontrollü katalog ZIP URL'leriyle sınırlıdır.
Ekosistem Kataloğu Yönü
CMS eklenti sistemi, daha geniş bir WebBlocks eklenti ekosistemi yönelimi için ilk uygulama barındırıcısıdır. Gelecekteki eklenti sözleşmeleri; WebBlocks CMS, QuizTem, Herne Panel, WebBlocks Publisher ve sonraki WebBlocks ürünleri tarafından, her barındırıcı kendi ürüne özgü uzantı noktalarını sunacak şekilde yeniden kullanılabilir olmalıdır.
Önerilen katalog/mağaza yüzeyi plugins.webblocksui.com'dur. Yakın vadeli hedef; keşif, meta veriler, uyumluluk, dokümantasyon, sürüm bilgisi, sağlama toplamları, kontrollü ZIP indirme bağlantıları ve güvenilir katalog artefakt meta verilerinden temkinli bir kurulum köprüsü sunan bir Eklenti Kataloğu'dur. Hesaplar, lisanslama, ücretli eklentiler, incelemeler ve onay iş akışları dahil pazar yeri davranışı ertelenmiştir.
System -> Plugins, /webadmin/plugins/catalog (admin.plugins.catalog.index) adresinde bir Browse Plugin Catalog eylemi içerir. Katalog listesi, host_product=webblocks-cms için herkese açık listelenen eklentileri GET /api/plugins üzerinden ister ve bir handle mevcut olduğunda en son uyumlu sürümü GET /api/plugins/{handle}/latest üzerinden sorgular. Katalog eklenti etiketleri ve View details eylemi /webadmin/plugins/catalog/{handle} (admin.plugins.catalog.show) sayfasını açar; bu sayfa, API tarafından döndürüldüğünde eklenti meta verilerini, uyumluluğu, sürüm notlarını, dokümantasyon/destek bağlantılarını, artefakt indirme URL'sini, SHA-256 sağlama toplamını, artefakt dosya adını, artefakt boyutunu, sürüm durumunu, artefakt doğrulama durumunu, artefakt tarama durumunu, kanalı, sürümü ve güvenli beyan edilmiş yetenek meta verilerini göstermek için GET /api/plugins/{handle} isteğini ve en son uyumlu sürüm uç noktasını çağırır. Güncel WebBlocks Plugins API detay yanıtları eklenti verilerini doğrudan data altında, sürüm verilerini data.latest_release altında ve artefakt meta verilerini data.latest_release.artifact altında döndürebilir; en son uyumlu sürüm API yanıtları ise sürüm meta verilerini data.release altında, artefakt meta verilerini de kardeş data.artifact altında döndürebilir. CMS, detayları görüntülemeden, kurulum uygunluğunu denetlemeden veya sunucu tarafı katalog kurulum eylemini işlemeden önce bu biçimleri normalleştirir. Desteklenen artefakt alanları arasında file_name, size_bytes, checksum_sha256, download_url, validation_status ve scan_status bulunur; eski düz sürüm alan adları uyumluluk için kabul edilmeye devam eder. Kanonik WebBlocks CMS ürün sürümü, uyumluluk eşleştirmesi için version ve cms_version olarak gönderilir. Yerleşik herkese açık katalog URL'si varsayılan olarak https://plugins.webblocksui.com değerini kullanır; operatörlerin varsayılan keşif için .env değişikliği yapması gerekmez ve dahili istek hedefi WEBBLOCKS_PLUGIN_CATALOG_BASE_URL (webblocks-plugins.catalog.base_url) ile geçersiz kılınabilir. Zaman aşımı ayarları WEBBLOCKS_PLUGIN_CATALOG_TIMEOUT_SECONDS ve WEBBLOCKS_PLUGIN_CATALOG_CONNECT_TIMEOUT_SECONDS üzerinden kullanılabilir. Normal katalog arayüzü, yapılandırılmış temel URL'yi veya istek sürümünü göstermez; kullanılamama durumlarında operatöre yönelik anlaşılır metinler gösterilirken güvenli tanılama bilgileri günlüklerde kalır.
Katalog detayı; Website, Documentation, Support ve Catalog Detail bağlantılarını kurulum eylemlerinden ayrı tutar. Uyumlu bir sürüm indirilebilir artefakt meta verisi içermediğinde sayfa, artefaktın kullanılamadığını net biçimde gösteren bir durum görüntüler. Download ZIP eylemi yalnızca katalog tarafından döndürülen denetimli mutlak herkese açık download_url adresini açar ve ham depolama yollarını asla açığa çıkarmamalıdır.
Install from Catalog yalnızca katalog eklentisi uyumlu olduğunda, en son uyumlu sürüm published durumunda olduğunda ve normalleştirilmiş sürüm artefaktı download_url, checksum_sha256 ve file_name değerlerini içerdiğinde kullanılabilir. Eski düz sha256/checksum_sha256 ve filename/artifact_filename sürüm alanları uyumluluk için kabul edilmeye devam eder. POST eylemi CSRF kullanır, katalog meta verilerini sunucu tarafında yeniden okur, denetimli ZIP URL'sini geçici depolamaya indirir, HTTP başarısını denetler, makul olmayan/ZIP olmayan yanıtları reddeder, SHA-256 hesaplar, bunu katalog meta verileriyle birebir karşılaştırır ve ardından geçici ZIP'i mevcut manuel eklenti ZIP doğrulayıcısından/kurucusundan geçirir. Geçici dosyalar başarı veya başarısızlık sonrasında silinir ve katalogdan ya da uzaktan gelen dosya adlarına dosya sistemi yolu olarak güvenilmez.
Katalog kurulumları, manuel yüklemeyle aynı şekilde eklentiyi varsayılan olarak devre dışı kaydeder. Eklentiyi etkinleştirmez; eklenti migration'larını/kurulumunu çalıştırmaz, eklenti provider kodunu yürütmez, eklenti rotalarını kaydetmez, izinleri kaydetmez, komutları kaydetmez, varlıkları kaydetmez, blokları kaydetmez, pano/sistem kartları eklemez, güncellemeleri uygulamaz ve etkin durumunu değiştirmez. Katalog detay sayfasında gösterilen yerel kurulu/etkin durumu yalnızca CMS eklenti kayıt defterinden gelir, uzak katalog iddialarından değil. Manuel ZIP yükleme/kurulum kullanılabilir olmaya devam eder ve değişmeden kalır.
System -> Plugins -> Registered Plugins, kurulu eklenti handle'ları için elden geldiğince (best-effort) bir katalog kullanılabilirlik sorgusu yapar. Katalog kullanılamadığında veya güvenilir meta veri sağlamadığında liste yine de görüntülenir ve hiçbir güncelleme eylemi gösterilmez. Kurulu bir handle için version_compare ile daha yeni bir en son uyumlu sürüm bulunduğunda, bu sürüm published olduğunda, eklenti uyumlu olduğunda ve normalleştirilmiş artefakt download_url, checksum_sha256 ve file_name içerdiğinde, Version sütunu Update available: {version} gösterir ve satır eylem grubunda yalnızca POST ile çalışan bir Update from Catalog simge eylemi görüntülenir.
Güncelleme POST'u katalog detay/en son sürüm meta verilerini sunucu tarafında yeniden okur, aynı uyumlu, yayında olan sürüme ait eksiksiz artefakt meta verisini gerektirir, denetimli ZIP'i indirir, SHA-256'yı doğrular, ZIP'i aynı eklenti paket doğrulayıcısından geçirir ve kurulu eklenti paketi sürümünü değiştirir. Eklentiye ait veritabanı tabloları korunur; etkin veya devre dışı yaşam döngüsü durumu, etkin durum yalnızca eski sürüm etkinse yeni sürüme taşınarak korunur ve eklenti migration'ları otomatik olarak çalıştırılmaz. Güncellenen eklenti yeni migration'lar beyan ederse veya tabloları eksikse, mevcut kurulum-gerekli yönlendirmesi ve açık Run Plugin Migrations akışı şema kurulumundan sorumlu olmaya devam eder.
Ürün düzeyindeki yönelim ve faz planı için WebBlocks Eklenti Ekosistemi ve Kataloğu belgesine bakın.
Önerilen plugins.webblocksui.com ürün yüzeyine, MVP kapsamına, aday uygulama modellerine, herkese açık katalog sayfalarına, operatör yüzeylerine ve olası salt okunur API biçimine ilişkin planlama Eklenti Kataloğu Ürün Mimarisi belgesinde yer alır.
Minimal Eklenti Örneği
Minimal bir eklenti paketi, şuna benzer bir provider ve bir tanım sunmalıdır:
final class AnalyticsToolsPlugin
{
public static function definition(): PluginDefinition
{
return PluginDefinition::make('analytics-tools')
->label('Analytics Tools')
->version('0.1.0')
->provider(AnalyticsToolsServiceProvider::class)
->requiresCms('^1.32')
->settingsNamespace('analytics_tools')
->databasePrefix('analytics_tools_')
->permissions([
PluginPermission::make('analytics-tools.view')->label('View analytics tools'),
])
->adminRoutes(__DIR__.'/../routes/admin.php')
->commands([
SyncAnalyticsCommand::class,
])
->health(AnalyticsToolsHealth::class);
}
}
Provider; paket görünümlerini, yapılandırmayı, migration'ları ve eklenti tanımını, CMS'e ait /admin, /cms veya kök düzeyindeki herkese açık rota dosyalarını eklemeden kaydetmelidir. Eklenti rotaları eklenti rota grubuna göre tanımlanmalıdır; örneğin /reports, /webadmin/plugins/analytics-tools/reports olur.
Yönetici Menüsü Kuralları
Eklentiler yönetici menüsüne girdiler ekleyebilir, ancak her eklenti menü girdisi bir izinle korunmalıdır.
Tercih edilen davranış, öğeleri şu gibi mevcut yönetici gruplarına eklemektir:
- System
- Tools
- Integrations
Üst düzey bir eklenti menüsü, yalnızca tek bir grup öğesi olarak sunulduğunda kafa karıştırıcı olacak büyük bir ürün yüzeyi için ayrılabilir.
Yönetici menüsü kuralları:
- simgeler WebBlocks UI simge kataloğundan gelmelidir
- rota adları eklenti rota ad alanı altında yer almalıdır
- menü sıralaması ve çakışma kuralları kayıt defteri tarafından yönetilmelidir
- devre dışı veya kurulu olmayan eklentiler menü girdisi görüntülememelidir
- menü öğesi etiketleri yeteneği tanımlamalı, kuruluma özgü proje adlarını genel CMS kurulumlarına sızdırmamalıdır
- sahibi olan eklenti mevcut olmadığında menü girdileri çekirdek kurulumlarda görünmemelidir
Rota Ad Alanı Kuralları
Yönetici eklenti rotaları varsayılan olarak şu URL önekini kullanır:
/webadmin/plugins/{plugin-handle}/...
Yönetici eklenti rota adları varsayılan olarak şu ad alanını kullanır:
webblocks.plugins.{plugin_handle}.*
Rota adı ad alanı, eklenti handle'ını yalnızca Laravel rota adları için gerektiği kadar dönüştürerek kullanır. Örneğin, uygulama alt çizgi gerektiriyorsa webblocks-ui-manager, webblocks.plugins.webblocks_ui_manager.* olur.
Bir eklenti, daha kısa bir yönetici önekini yalnızca kayıt defteri aracılığıyla talep edebilir. Ayrılmış kısa önekler küresel olarak benzersiz olmalıdır. Önek çakışmaları derleme, test, önyükleme tanılamaları veya eklenti etkinleştirme sırasında hataya yol açmalıdır.
Eklentiler şunları kirletmemelidir:
- CMS çekirdek rota adlarını
- ayrılmış eklenti önekleri dışında kalan
/webadminçekirdek rota ad alanını - eski
/adminad alanını /cmsstatik varlık ad alanını
Devre dışı ve uyumsuz eklentiler yönetici rotaları kaydetmemelidir. Yalnızca etkin eklentileri kaydeden mekanizma kasıtlı olarak temkinlidir: bir eklenti config/webblocks-plugins.php üzerinden devre dışı bırakılmışsa veya CMS sürüm kısıtını karşılamıyorsa, rotaları mevcut-ama-yasak olmak yerine hiç bulunmaz.
Herkese açık rotalar isteğe bağlıdır (opt-in). Herkese açık rotalar beyan eden bir eklenti, rota sahipliği test edilebilecek kadar net bir sahiplik beyan etmelidir. Herkese açık eklenti rotaları; site sayfalarıyla, CMS herkese açık rotalarıyla ve ana ürün rotalarıyla çakışmaktan kaçınmalıdır.
İzin Kuralları
Her yönetici menüsü, rotası ve eylemi bir eklenti iznine bağlanmalıdır.
İzin adları eklenti handle önekini içermelidir:
webblocks-ui-manager.view
webblocks-ui-manager.publish
webblocks-ui-manager.settings
İzin davranışı CMS izin modeliyle uyumlu kalmalıdır. Süper yönetici baypası varsa, çekirdek CMS izinleriyle aynı açık CMS yetkilendirme yolunu kullanmalıdır.
Eklenti izinleri, eklenti kurulu veya keşfedilebilir olduğunda yönetici rol yönetiminde görünür olmalıdır. Devre dışı eklenti izinleri, bir rol eşleşen bir izin dizesini hâlâ saklıyor olsa bile etkin davranışı yetkilendirmemelidir.
Ayar Kuralları
Eklenti ayarları eklentinin kendi ad alanında saklanmalıdır. Genel CMS yapılandırmasıyla, ana uygulama yapılandırmasıyla veya ortam değişkenleriyle çakışmamalıdır.
Ayar kuralları:
- ayar anahtarları eklenti handle'ı ile öneklenmelidir
- hassas değerler, mevcut olduğunda gizli değerler için güvenli depolama kullanmalıdır
- hassas değerler asla günlüklerde, sağlık denetimi çıktısında, istisna mesajlarında veya yönetici flash mesajlarında görüntülenmemelidir
- ayar arayüzü eklenti rota ad alanı altında veya
System -> Plugins -> Plugin detailiçinde yer almalıdır - ortam değişkenleri varsayılan değerleri besleyebilir, ancak çalışma zamanı ayarları eklentiye ait kalmalı ve kayıt defteri üzerinden incelenebilir olmalıdır
Faz 2, özel bir rota adı olmadan PluginSettingsDefinition beyan eden etkin eklentiler için salt okunur bir ayar rotası temeli sağlar. Varsayılan rota şudur:
/webadmin/plugins/{plugin-handle}/settings
Varsayılan rota adı şudur:
webblocks.plugins.{plugin_handle}.settings.edit
Düzenlenebilir ayar depolaması ve doğrulama şemaları sonraki bir faza ayrılmıştır. Faz 5, eklentilerin CMS çekirdek yapılandırmasıyla veya diğer eklentilerle çakışmaması için ayar ad alanlarını PluginDefinition::settingsNamespace() aracılığıyla ayırır.
Migration ve Veri Yaşam Döngüsü Kuralları
Eklenti migration'ları çekirdek migration'larla çakışmamalıdır.
Eklenti tablo adları, eklenti handle önekini veya eklenti kayıt defteri tarafından ayrılmış, belgelenmiş kısaltılmış bir öneki taşımalıdır. webblocks-ui-manager için tablo adları webblocks_ui_manager_ önekini kullanır. Faz 5, veritabanı öneklerini PluginDefinition::databasePrefix() aracılığıyla ayırır ve yinelenen önekleri reddeder.
Yaşam döngüsü durumları birbirinden ayrı olmalıdır:
- Etkinleştirme: eklenti menüsü, rotalar, komutlar, zamanlanmış işler, widget'lar, bloklar, ayarlar, sağlık denetimleri ve eylemler izinlere ve uyumluluğa göre kullanılabilir hale gelir.
- Devre dışı bırakma: eklenti menüsü, zamanlanmış işler, eklenti rotaları, eklenti eylemleri, ayar rotaları, sağlık denetimleri, widget'lar, bloklar ve varlıklar kullanılamaz; veriler yerinde kalır.
- Kaldırma: manuel olarak yüklenmiş devre dışı eklentiler, depolamaya ait kurulum kökünden kaldırılabilir. Eklentiye ait veritabanı tabloları ve geçmiş veriler yerinde kalır.
- Kaldırma: gelecekteki bir tasarıma ayrılmıştır; varsayılan olarak veri silmemelidir.
- Hizmetten çıkarma veya temizleme: açık yıkıcı onay gerektiren, gelecekte tasarlanacak yıkıcı veri silme akışı.
Kaldırma, veritabanı açısından yıkıcı olmamalıdır. Eklenti tablolarını, artefaktları, eklenti paket dizini dışındaki yüklenmiş dosyaları veya geçmiş kayıtları silmek, ayrı ve açık bir yıkıcı onay tasarımı gerektirir.
Şema yükseltmeleri mümkün olduğunca eklemeli ve geri alınabilir olmalıdır. Şemayı değiştiren bir eklenti sürümü şunları belgelemelidir:
- uyumlu en düşük CMS sürümü
- şemayı getiren eklenti sürümü
- kullanılan migration/tablo öneki
- devre dışı eklentilerin mevcut verileri güvenle yerinde bırakıp bırakamayacağı
- geri alma veya hizmetten çıkarma için operasyonel notlar
Manuel eklenti migration çalıştırıcısı kasıtlı olarak sınırlı kapsamlıdır. Yalnızca kurulu eklentinin beyan ettiği migration dizinlerini ve yalnızca bu dizinleri yapılandırılmış eklenti kurulum kökü içinde çözümledikten sonra çalıştırır. Ana uygulama migration'larını veya ilgisiz eklenti migration'larını çalıştırmaz. Eklenti migration'ları eklemeli, mümkün olduğunca geri alınabilir ve kurulum onarımı gerektiğinde güvenle yeniden denenebilir olmalıdır.
Varlık ve Statik Dosya Kuralları
Eklenti varlıkları kendi ad alanları altında yayımlanmalıdır. Çekirdek public/cms varlıklarıyla karışmamalıdır.
WebBlocks UI Manager için sürümlü CDN çıktısı şu gibi değişmez yollar kullanmalıdır:
public/cdn/webblocks-ui/v2.7.9/...
Varlık kuralları:
- sürümlü artefakt dizinleri değişmezdir
- eski sürümlü dizinler normal yayımlamanın bir parçası olarak silinmemelidir
latestbirinci taraf CDN tüketimi için kullanılmamalıdır- kuru çalıştırma (dry-run) yayımlama; yazmaları, atlamaları ve engellenen işlemleri dosya yazmadan raporlamalıdır
- uygulamalı (apply) yayımlama; yazmadan önce beklenen dist dosyalarını, kaynak yollarını, sürüm numarasını, hedef yolları, sağlama toplamlarını ve manifest tutarlılığını doğrulamalıdır
- sağlama toplamı eşleşen mevcut dosyalar atlanır; sağlama toplamı farklı olan mevcut dosyalar çalıştırmayı engeller
- CDN veya statik barındırma, mümkün olduğunda Nginx veya başka bir statik hizmet tarafından sunulmalıdır
- Laravel rota tabanlı varlık akışı CDN dosyaları için varsayılan olmamalıdır
- eklenti yönetici varlıkları çekirdek CMS yönetici varlıklarından yalıtılmalı ve bir eklenti ad alanı altında yayımlanmalıdır
WebBlocks UI Manager yerel yayımlama iş akışı yalnızca yapılandırılmış, projeye ait statik hedefe yazar; varsayılan hedef public/cdn/webblocks-ui/{version}/... şeklindedir. Harici üretim altyapısına dağıtım yapmaz, güncelleme sunucusu meta verileri yayımlamaz, CMS çekirdeğinin WebBlocks UI tüketim URL'lerini değiştirmez ve uzak paketler kurmaz.
Faz 3, etkin eklentiler için kayıt defteri destekli herkese açık varlık beyanları ekler. Bu beyanlar şu anda açıkça belirtilen varlık URL'leriyle sınırlıdır ve yalnızca sahibi olan eklenti etkin olduğunda herkese açık sayfa varlıkları olarak işlenir:
- head CSS, herkese açık
<head>içinde<link rel="stylesheet">olarak işlenir - head JS, herkese açık
<head>içinde deferred veya async/module<script>etiketleri olarak işlenir - body sonu JS, herkese açık
<body>öğesinin sonuna yakın işlenir - varlık handle'ları
analytics-tools.public-jsörneğindeki gibi eklenti handle'ı ile nokta ayraçlı ad alanı kullanmalıdır - devre dışı eklenti varlıkları toplama ve işleme aşamalarında yer almaz
Bu, bir varlık katkı kancası temelidir; bir eklenti paket kurucusu veya varlık yayımlayıcısı değildir. Eklentiler, kendi statik dosyalarını eklentiye ait bir ad alanı altında yayımlamaktan sorumlu olmaya devam eder.
Olay, Kanca ve Uzantı Slotu Kuralları
Eklentiler çekirdeği monkey patch yöntemiyle değiştirmemeli veya geçersiz kılmamalıdır. Çekirdek uzantı slotları açık, belgelenmiş ve test edilebilir olmalıdır.
İlk uzantı slotu adayları:
admin.menuadmin.dashboard.widgetsadmin.system.cardspermissions.registryblock.registrypublic.head.assetspublic.body_end.assets
Slot sözleşmeleri tipli ve değer nesnesi tabanlı olmalıdır. Çakışmaların, geçersiz yapıların ve sahipliğin erken doğrulanabilmesi için mümkün olduğunca ham dizi sözleşmelerinden kaçının.
Faz 3, şu tipli genişletme slotu nesnelerini uygular:
- Salt okunur gösterge paneli kartları için
PluginDashboardWidget - Salt okunur sistem kartları veya bağlantıları için
PluginSystemCard - Eklentiye ait blok tipi bildirimleri için
PluginBlockTypeDefinition - Gruplanmış eklenti bloğu bildirimleri için
PluginBlockPackDefinition - Public head ve body sonu varlık bildirimleri için
PluginPublicAsset - Yalnızca etkin olanların toplanması için
PluginAdminExtensionRegistry,PluginBlockRegistryvePluginPublicAssetRegistry
Gösterge paneli widget'ı ve sistem kartı anahtarları, eklenti handle'ı ile nokta ad alanına sahip olmalıdır; örneğin analytics-tools.overview. Public varlık handle'ları da aynı nokta ad alanı kuralına uyar. Eklenti blok handle'ları, analytics-tools::score-card gibi eklentiye ait bir ad alanı kullanmalıdır; hero gibi nitelenmemiş çekirdek stili blok handle'ları reddedilir. Bu kancalar, eklenti katkılarını çekirdek paket görünümlerini değiştirmeden keşfedilebilir ve izlenebilir kılar.
Gösterge paneli widget'ları yalnızca eklenti etkinken ve mevcut kullanıcı, bildirilmişse widget iznini karşılayabildiğinde süper yönetici gösterge panelinde işlenir. Sistem kartları, aynı etkinlik ve izin kontrolleri altında yalnızca amaçlanan sistem genel bakış yüzeylerinde işlenir. System -> Plugins yönetim sayfası genel eklenti katkı kartlarını işlemez; eklenti yönetimi için gelecekte açıkça tasarlanmış bir genişletme slotu olmadıkça manuel eklenti kurulumu, yaşam döngüsü, sağlık, kurulum, ayarlar ve kaldırma eylemlerine odaklı kalır. Her iki slot da kasıtlı olarak salt okunur temellerdir.
Blok kancaları yalnızca bildirim amaçlı temellerdir. Etkin eklentilerin, eklentiye ait blok tiplerini ve blok paketlerini kayıt defteri üzerinden sunmasına izin verirler; ancak çekirdek blok sözleşmelerinin, çekirdek blok görünümlerinin, çekirdek blok seeder'larının veya blok düzenleme servislerinin yerini almazlar.
Eklenti Yaşam Döngüsü
Tam yaşam döngüsü hedefi:
- keşfet
- kur
- etkinleştir
- devre dışı bırak
- sağlık/durum
- yükselt
- daha sonraki bir yıkıcı veri tasarımında kaldır veya hizmetten çıkar
Uygulanan Faz 1'den Faz 5'e kadar olan çalışma zamanı hedefi, tam yaşam döngüsünden kasıtlı olarak daha küçüktür:
- kayıt defteri
- etkinlik yapılandırması
System -> PluginslistelemeSystem -> Pluginsdetay ve salt okunur ayar yüzeyleri- yönetici menüsü kaydı
- izin kaydı
- yalnızca etkinken yönetici rotası kaydı
- yalnızca etkinken komut kaydı
- temel sağlık/durum raporlama
- tipli, salt okunur gösterge paneli ve sistem kartı genişletme slotları
- eklentiye ait blok ve blok paketi bildirim kancaları
- public head ve body sonu varlık katkı kancaları
- sürüm meta verileri, güvenli yerel manifest hazırlama ve kontrollü yerel CDN dry-run/apply yayınlama içeren birinci taraf WebBlocks UI Manager pilot eklentisi
- eklenti sürümü ve gerekli CMS uyumluluğu meta verileri
- uyumsuz eklenti etkin durum ve sağlık raporlaması
- paket kuralları ve çakışma korumaları
- rota sahipliği korumaları
Bu temel, eklentiler daha derin yaşam döngüsü davranışları kazanmadan önce CMS'e güvenli bir ana bilgisayar sınırı sağlar.
Faz 1 Uygulama Notu
İlk Faz 1 çalışma zamanı artık şunları içeriyor:
- paket
Support\Pluginsad alanı altındaPluginDefinition,PluginRegistry,PluginMenuItemvePluginPermissiondeğer nesneleri - kebab-case handle'lar, yinelenen handle'lar, yinelenen menü öğesi anahtarları, semver benzeri sürümler ve handle önekli eklenti izinleri için deterministik doğrulama
config/webblocks-plugins.phpüzerinden yapılandırma destekli etkinlik durumu/webadmin/system/pluginsadresinde pakete ait birSystem -> Pluginslistelemesi/webadminkanonik kalırken CMS'e ait/adminve Laravel/cmsrotalarının mevcut olmadığını kanıtlayan rota koruma kapsamı
Faz 1; dinamik Composer eklenti keşfini, eklenti migration'larını, kurma/etkinleştirme/devre dışı bırakma arayüz eylemlerini, public eklenti rotalarını, pazar yeri/katalog davranışını veya WebBlocks UI Manager iş mantığını içermez. Yapılandırma destekli etkinlik durumu kasıtlı olarak bir köprüdür; sonraki bir yaşam döngüsü fazı, kurma/etkinleştirme/devre dışı bırakma durumunu kalıcı depolamaya taşıyabilir.
Faz 2 Uygulama Notu
Faz 2 çalışma zamanı artık şunları içeriyor:
PluginRouteRegistrarüzerinden yalnızca etkinken eklenti yönetici rotası kaydı/webadmin/plugins/{plugin-handle}/...altında varsayılan yönetici eklenti URL'leriwebblocks.plugins.{plugin_handle}.*altında varsayılan yönetici eklenti rota adlarıPluginSettingsDefinitionbildiren etkin eklentiler için varsayılan salt okunur ayar sayfalarıPluginCommandRegistrarüzerinden yalnızca etkinken konsol komutu toplama- temel durum raporlaması için
PluginHealthResult,PluginLifecycleStatusvePluginHealthMonitor - yaşam döngüsü, sağlık, ayar, rota, komut, izin ve menü katkı özetlerini sunan
System -> Pluginsdetay sayfaları - etkin test eklentisi rotalarının kaydolduğunu, devre dışı eklenti rotalarının mevcut olmadığını,
/webadmin'in kanonik kaldığını,/cms'in bir Laravel yönetici rota ad alanı olmadığını ve CMS'e ait/adminrotalarının mevcut olmadığını kanıtlayan rota koruma kapsamı
Bu faz; migration keşfini, eklenti kurma/uygulama/çalıştırma eylemlerini, yıkıcı yaşam döngüsü eylemlerini, dinamik Composer keşfini, public eklenti rotalarını ve WebBlocks UI Manager çalışma zamanı davranışını kasıtlı olarak kapsam dışında tutar.
Faz 3 Uygulama Notu
Faz 3 çalışma zamanı artık şunları içeriyor:
Support\Plugins\Contractsaltında tipli yönetici genişletme sözleşmeleriPluginAdminExtensionRegistryüzerinden toplananPluginDashboardWidgetvePluginSystemCarddeğer nesneleri- süper yönetici gösterge panelinde yalnızca etkinken gösterge paneli widget'ı işleme
System -> Pluginsyaşam döngüsü yönetim sayfasından ayrı tutulan, amaçlanan sistem genel bakış yüzeyleri için yalnızca etkinken sistem kartı toplama- eklentiye ait blok bildirimleri için
PluginBlockTypeDefinition,PluginBlockPackDefinitionvePluginBlockRegistry - güvenli public head ve body sonu varlık bildirimleri için
PluginPublicAssetvePluginPublicAssetRegistry - genişletme anahtarları, widget anahtarları, sistem kartı anahtarları, blok handle'ları, blok paketi ad alanları, varlık handle'ları, eklenti sahipliği ve yinelenen bildirimler için doğrulama korumaları
- gösterge paneli widget'ları, sistem kartları, blok kancaları ve public varlıklar için devre dışı eklenti etkisizlik davranışı
/webadminve/webadmin/plugins/...geçerli kalırken/adminve Laravel/cmsyönetici rotalarının mevcut olmadığını doğrulayan rota koruma kapsamı
Bu faz; gerçek pazar yeri davranışını, paket kurulumunu, eklenti migration çalıştırıcılarını, public eklenti rotalarını, düzenlenebilir widget'ları, çekirdek blok geçersiz kılma kancalarını ve WebBlocks UI Manager eklentisini kasıtlı olarak kapsam dışında tutar. Eklentiler yine de paket görünümlerini geçersiz kılmamalı veya çekirdek servisleri monkey patch etmemelidir.
Faz 4 Uygulama Notu
Faz 4 çalışma zamanı artık birinci taraf webblocks-ui-manager pilot eklentisini içeriyor. Eklenti, paket kayıt defteri tarafından kaydedilir ancak config/webblocks-plugins.php üzerinden varsayılan olarak devre dışıdır.
Etkinleştirildiğinde pilot şunları katkıda bulunur:
- handle önekli izinler:
webblocks-ui-manager.view,webblocks-ui-manager.managevewebblocks-ui-manager.publish /webadmin/plugins/webblocks-ui-manager/...altında, rota adlarıwebblocks.plugins.webblocks_ui_manager.*olan bir eklenti yönetici rota ad alanı- WebBlocks UI sürüm kayıtları için bir eklenti menü öğesi
- Faz 3 genişletme slotları üzerinden salt okunur gösterge paneli ve sistem kartları
- Faz 2 ayar temeli üzerinden salt okunur ayar/detay görünürlüğü
- sürüm meta verisi hazırlığı, kurulum gerekli/eksik tablo durumu ve yapılandırılmış CDN taban yolu hazırlığı için eklenti sağlık kontrolleri
- eklentiye ait tablolar ve modeller:
webblocks_ui_manager_releases,webblocks_ui_manager_artifactsvewebblocks_ui_manager_publish_runs - sürüm meta verilerini kaydeden, artefakt SHA-256 sağlama toplamlarını hesaplayan ve isteğe bağlı olarak yerel bir
manifest.jsonyazabilen güvenli yerel birwebblocks-ui-manager:prepare-releasekomutu - yayınlama çalıştırmalarını kaydeden ve yalnızca doğrulama geçtikten sonra yazan kontrollü bir
webblocks-ui-manager:publish-release {version} --dry-runvewebblocks-ui-manager:publish-release {version}iş akışı public/cdn/webblocks-ui/{version}/...altında birinci taraf CDN hedef kuralları
Devre dışı durum etkisiz kalır: rotalar, komutlar, menüler, ayar rotaları, izinler, gösterge paneli/sistem kartları, sağlık davranışı ve varlık katkıları etkin toplamada bulunmaz. Etkin ancak kurulumu yapılmamış durum güvenli kalır: menü görünür olabilir, ancak Releases rotası sorgulamadan önce şema hazırlığını kontrol eder ve sürüm tabloları eksikse kurulum gerekli yönergesini gösterir. Etkin ve uyumlu manuel eklenti yönetici URL'leri, dinamik rota hidrasyonu eskiyken veya rota önbellekleme devredeyken gösterge paneline geri düşmemelidir; eklenti rota geri dönüşü, bilinen eklenti yönetici sayfalarını /webadmin/plugins/{plugin-handle}/... URL'lerinde tutar ve kontrollü kurulum veya operasyonel ekranları işlemeden önce eklentiye ait rotaları/kaynağı yeniden hidratlar. Birinci taraf WebBlocks UI Manager Releases, sürüm create/store/show/edit/update/dry-run/publish eylemleri ve Settings URL'leri, eski kurulu artefakt kaynağının bu eylemleri gösterge paneline geri gönderememesi için eklenti rota dosyaları çalışmadan önce ayrıca CMS çekirdeği üzerinden köprülenir.
Faz 4; harici üretim CDN dağıtım otomasyonunu, pazar yeri davranışını, genel üçüncü taraf eklenti kurma/güncelleme akışlarını, genel eklenti migration çalıştırıcılarını, public eklenti rotalarını, çekirdek görünüm geçersiz kılmalarını, güncelleme sunucusu yayınlamayı veya CMS çekirdeği WebBlocks UI tüketim URL'lerinde değişiklikleri kasıtlı olarak eklemez.
Faz 5 Uygulama Notu
Faz 5 çalışma zamanı artık paketleme ve ekosistem hazırlık temellerini içeriyor:
- kurulu CMS sürümüne karşı eklenti sürümü ve
requiresCms()uyumluluk kontrolleri - etkin durumdan ayrılmış yapılandırılmış etkinlik durumu; böylece uyumsuz yapılandırılmış eklentiler etkisiz kalır
Enabled,DisabledveIncompatibleiçinSystem -> Pluginsyaşam döngüsü mesajları- eklenti sağlık raporlayıcılarını çalıştırmayan uyumsuz eklenti sağlık sonuçları
- ayar ad alanları ve veritabanı/tablo önekleri için kural meta verileri
{plugin-handle}:...gerektiren, çözümlenebilir Artisan komut sınıfları için komut adı korumaları- veritabanı öneki çakışma korumaları
- uyumluluk meta verileri, uyumsuz davranış, komut ve önek çakışmaları, devre dışı/uyumsuz etkisizlik, WebBlocks UI Manager regresyonu, paket sınırları ve rota sahipliği için odaklı testler
- paket kuralları, yerel keşif, minimal eklenti oluşturma, şema yükseltme stratejisi ve sürüm uyumluluk politikası için dokümantasyon
Faz 5; pazar yeri/katalog arayüzünü, keyfi uzak paket kurulumunu, dinamik uzak Composer keşfini, genel üçüncü taraf eklenti migration çalıştırıcılarını, otomatik harici üretim CDN dağıtımını, genel güncelleme sunucusu yayınlamayı veya public eklenti rotalarını kasıtlı olarak eklemez.
Test Ve Sürüm Korumaları
Eklenti sistemi; rota sahipliği, paket sınırı ve birlikte çalışma testleriyle korunmalıdır.
Gerekli korumalar:
- eklenti rota sahipliği test edilebilir
- çekirdek CMS kurulumları, hiçbir eklenti etkin değilken eklenti menüsü göstermez
- devre dışı eklenti menüleri işlenmez
- devre dışı eklenti rotaları ve eylemleri kullanılamaz veya yetkilendirmeyi geçemez
- devre dışı eklenti widget'ları, sistem kartları, blok bildirimleri ve public varlıkları mevcut değildir
- uyumsuz eklenti rotaları, komutları, menüleri, izinleri, widget'ları, sistem kartları, blok bildirimleri, public varlıkları, ayar rotaları ve sağlık raporlayıcı davranışı mevcut değildir
- komut adları, veritabanı önekleri, handle'lar, genişletme slotları, widget'lar, bloklar, varlıklar ve izin ad alanları çakışmaya karşı korunur
- eklenti gösterge paneli/sistem genişletme kartları yalnızca etkinken ve izin verildiğinde işlenir
- eklentiye ait blok bildirimleri, çekirdek blok sözleşmelerini geçersiz kılmadan keşfedilebilir
- eklenti public varlıkları güvenli konuma göre toplanır ve devre dışıyken mevcut değildir
- eklenti rota kaydı, CMS'e ait bir
/adminad alanını geri getirmemelidir /webadminkanonik CMS yönetici öneki olarak kalır/cmsstatik varlık alanı olarak kalır, bir Laravel eklenti rota ad alanı değildir- eklentinin çekirdek tabloları, rota adlarını veya görünümleri geçersiz kılma girişimleri testlerde veya tanılamalarda başarısız olmalıdır
- paket sınırı testleri, eklentiye ait rotaları, görünümleri, varlıkları, migration'ları ve komutları kapsayacak şekilde genişler
- birlikte çalışma testleri, yol haritasında CMS + QuizTem + eklenti senaryolarını kapsamalıdır
Çekirdek CMS'in genel kurulumlarda temiz kalması için eklenti testleri hem eklenti-yok hem de eklenti-devre-dışı durumlarını içermelidir. WebBlocks UI Manager pilotu ayrıca migration/şema, komut, manifest/sağlama toplamı, yalnızca etkinken, devre dışıyken etkisiz, yönetici işleme, rota koruma ve paket sınırı testleri taşır.
WebBlocks UI Manager Pilot Eklenti Kararları
WebBlocks UI Manager, CMS çekirdek davranışına gömülü değildir. Eklenti ana bilgisayarının, WebBlocks UI sürüm/CDN yönetimini genel CMS çekirdeğine taşımadan gerçek, ürüne özgü bir operasyonel yüzeyi kanıtlayabilmesi için şu anda CMS paket ad alanı altında pakete ait, birinci taraf bir pilot eklenti olarak başlar.
Tercih edilen uzun vadeli model, eklenti yaşam döngüsü ve paketleme kuralları olgunlaştıktan sonra yine de ayrı bir Composer paketi veya ayrı bir depo haline gelebilir.
Eklentinin sorumluluğu:
- WebBlocks UI sürüm artefakt kayıtları
- kaynak dist doğrulama
- güvenli yerel yayın hazırlığı
- kontrollü yerel statik yayın dry-run ve apply çalıştırmaları
- yayın çalıştırma geçmişi
- manifest ve sağlama toplamı üretimi
- CDN sağlık kontrolleri
WebBlocks UI derlemesi, WebBlocks UI deposunda kalır. Eklenti, WebBlocks UI'ı derlemez. Sürüm artefaktlarını alır veya doğrular, birinci taraf CDN yolları için yerel meta verileri kaydeder ve doğrulanmış dosyaları yapılandırılmış yerel/projeye ait statik hedefe yayınlayabilir. Harici üretim CDN dağıtımı kasıtlı olarak ertelenmiştir ve açık kalmalıdır.
Kendi ürünlerimiz, sabitlenmiş birinci taraf varlıklar için cdn.webblocksui.com tüketebilir. Harici kullanıcı dokümantasyonu, bu politika ayrıca değişmedikçe GitHub veya jsDelivr CDN tüketimini önermeye devam etmelidir.
Pilot için CDN kuralları:
- sürümlü yollar kullanın
latestkullanmayın- mevcut bir sürümlü artefakt dizinini asla değiştirmeyin
- normal yayınlama sırasında eski sürümlü CDN dizinlerini silmeyin
- manuel çalışırken apply öncesinde dry-run çalıştırın
- dosyaları sessizce değiştirmek yerine sağlama toplamı uyuşmazlıklarını engelleyin
- Laravel rota akışı yerine statik sunumu tercih edin
WebBlocks UI Manager Yayınlama Akışı
Sürüm meta verilerini ve sağlama toplamlarını hazırlayın:
php artisan webblocks-ui-manager:prepare-release v2.7.9 --artifact=/path/to/webblocks-ui.css --artifact=/path/to/webblocks-icons.css --artifact=/path/to/webblocks-ui.js
Yayınlamayı dry-run ile deneyin:
php artisan webblocks-ui-manager:publish-release v2.7.9 --dry-run
Yerel yayınlamayı uygulayın:
php artisan webblocks-ui-manager:publish-release v2.7.9
Yönetici sürüm detay ekranı; eklenti etkinken, uyumluyken ve kullanıcı webblocks-ui-manager.publish iznine sahipken aynı dry-run ve yayınlama eylemlerini sunar. Gerçek yayınlama eylemi bir onay modalı kullanır. Dry-run yıkıcı değildir.
Gerekli ayarlar:
WEBBLOCKS_UI_MANAGER_ENABLED=trueeklentiyi etkinleştirir.WEBBLOCKS_UI_MANAGER_CDN_BASE_PATH=cdn/webblocks-ui,public/altındaki yerel/projeye ait statik kökü kontrol eder.WEBBLOCKS_UI_MANAGER_CDN_BASE_URL, üretilen public URL'ler için isteğe bağlı görüntüleme meta verisidir.webblocks-plugins.webblocks_ui_manager.expected_dist_files, gerekli dist dosya adlarını listeler.
Yayınlama doğrulama kontrolleri:
- sürüm meta verisi mevcuttur ve taslak değildir
- sürüm numarası semver benzeridir
- sürüm CDN yolu, yapılandırılmış kök artı sürüm numarasına eşittir
- beklenen dist dosyaları mevcuttur
- kaynak dosyalar proje kökü içinde bulunur ve symlink kaçışı değildir
- artefakt hedef yolları yapılandırılmış CDN kökü içinde kalır
- saklanan artefakt sağlama toplamları, mevcut kaynak dosyalarla ve manifest meta verileriyle eşleşir
- mevcut yayınlanmış dosyalar ya sağlama toplamlarıyla eşleşip atlanır ya da çalıştırmayı engeller
- mevcut manifest içeriği, hazırlanan manifest içeriğiyle eşleşmelidir
Yayınlama çalıştırmaları; mod, durum, hedef yollar, işlem detayları ve gizli bilgi içermeyen hata mesajlarıyla webblocks_ui_manager_publish_runs tablosunda saklanır.