Bir dosyayı vendor/ altında düzenlemek, günümüzün sorununu çözebilir ancak bir sonraki güncellemede sorun yaratabilir.
İlk değişiklik genellikle zararsız görünür: bir blok ürün sayfasında taşınır, bir sipariş kuralı eklenir, ürünlerin yüklenme şekli ayarlanır. Birkaç değişiklikten sonra, mağaza özel bir çatala bağımlı hale gelir ve her Composer güncellemesi üçlü bir fark ile başlar.
Aimeos, her tür değişim için ayrı bir yer sağlar. İfadeler çeviri yapılandırmasında, sayfa kompozisyonu sayfa yapılandırmasında, iş kuralları dekoratörlerde yer alabilir. Daha büyük özellikler kendi Composer paketlerinde yaşayabilir.
Yeni bir gereksinim geldiğinde, bunu karşılayacak en dar katmanı bulmakla başlayın.
En Küçük Genişletme Noktasını Seçin
En Küçük Genişletme Noktasını Seçin
Bir sınıf yazmadan önce, gereksinimi sahiplenen katmanı tanımlayın.
| Gereksinim | Kullanım |
|---|---|
| Bir etiket, sayfa boyutu veya özellik anahtarını değiştirin | config/shop.php |
| Bir vitrin bileşenini ekleyin veya kaldırın | sayfa yapılandırması |
| Laravel sayfa kabuğunu değiştirin | bir aşırı yazılmış Blade görünümü |
| Mağaza stilini değiştirin | özel bir tema |
| Bileşen markup’ını değiştirin | bir şablon aşırı yazması |
| Proje spesifik ürün verilerini saklayın | özellikler veya nitelikler |
| Mevcut mantığın etrafına davranış ekleyin | bir dekoratör |
| Bir uygulamayı tamamen değiştirin | bir yapılandırılmış sınıf değiştirme |
| Yeni depolama, davranış veya entegrasyon ekleyin | bir proje spesifik Aimeos genişlemesi |
Problemi çözebilen ilk satırı kullanın. Yapılandırma değişikliği için bir alt sınıf yaratmak veya bir kontrolörü kopyalamak yerine bir dekoratör yeni davranış ekleyebilir.
Yapılandırma ile Başlayın
Yapılandırma ile Başlayın
Laravel entegrasyonu, mağaza yapılandırmasını config/shop.php dosyasında açığa çıkarır. İç içe geçmiş diziler, Aimeos bileşenleri ve kontrolörlerinin yapısını takip eder, bu nedenle bir ayarın yeri, sistemin hangi kısmını etkilediğini belirler.
Diyelim ki bir mağaza sayfa başına 24 ürün, ürün listelerinde sepete ekleme butonu olmadan, iki seviyeli mega menü ve “Tedarikçiler” yerine “Markalar” istiyor. İlgili yapılandırma kısa:
'client' => [
'html' => [
'catalog' => [
'lists' => [
'basket-add' => false,
'size' => 24,
],
],
],
],
'controller' => [
'frontend' => [
'catalog' => [
'levels-always' => 2,
],
],
],
'i18n' => [
'en' => [
'client' => [
'Suppliers' => ['Brands'],
],
],
],
Hiçbir hizmet sağlayıcı, dinleyici veya kopyalanmış bileşen yer almıyor.
Bazı yapısal değişiklikler ortam anahtarlarıdır. Çok dilli yollar, satıcıya özel siteler ve satıcı kaydı, yönlendirme katmanını yeniden inşa etmeden etkinleştirilebilir:
SHOP_MULTILOCALE=true
SHOP_MULTISHOP=true
SHOP_REGISTRATION=true
Birçok proje için config/shop.php, özelleştirmelerin başlayacağı yerdir.
Sayfaları Bileşenlerden Oluşturun
Sayfaları Bileşenlerden Oluşturun
Bir vitrin sayfası bileşenlerden oluşturulur. Ürün detay sayfası, dil seçimi, mini sepet, kategori navigasyonu, arama, bir sahne alanı, ürünün kendisi ve henüz görüntülenen ürünler gibi oturum tabanlı listeleri içerebilir.
Liste config/shop.php dosyasında yaşamaktadır:
'page' => [
'catalog-detail' => [
'locale/select',
'basket/mini',
'catalog/tree',
'catalog/search',
'catalog/stage',
'catalog/detail',
],
],
Bu versiyon catalog/session satırını hariç tutar. Sayfa artık en son görüntülenen ve sabit ürün alanını hazırlamaz, ancak ürün detay bileşeni dokunulmaz kalır.
Mevcut bir bileşeni bir sayfaya ekleyebilir veya bir Laravel rotası oluşturup gereken Aimeos bileşenlerini Shop facade’i aracılığıyla render edebilirsiniz.
Laravel genişletme kılavuzu, mevcut sayfa bölümlerini, rotaları ve facade entegrasyonunu belgelemiştir.
Sayfa Kabuk Markup’ını ve Temayı Ayrı Tutun
Sayfa Kabuk Markup’ını ve Temayı Ayrı Tutun
Aimeos, sunumu üç katmana ayırır. Blade görünümleri, çevresindeki Laravel sayfasını tanımlar, bileşen şablonları vitrin markup’ını oluşturur ve temalar CSS, JavaScript, fontlar ve resimleri sağlar.
Tam bir ürün detay sayfası kabuğunu değiştirmek için, ilgili paket görünümünü uygulama’nın vendor görüşü dizinine kopyalayın:
resources/views/vendor/shop/catalog/detail.blade.php
Laravel, uygulama kopyasını tercih eder, böylelikle paket dosyası dokunulmaz kalır.
Sayfa kabuğu zaten doğruysa ama ürün markup’ı değilse, yalnızca proje genişletmesinde ilgili şablonu aşırı yazın:
templates/client/html/catalog/detail/body.php
Aynı adlı proje şablonu, varsayılanın üzerinde öncelik kazanır. Özel bir resim galerisi yalnızca catalog/detail/image.php gerektirebilir; tüm detay bileşeninin bir kopyasını gerektirmez.
HTML yapısı zaten doğruysa, bir tema yeterlidir. Aimeos, bileşen başına catalog-detail.css ve basket-mini.js gibi varlıkları saklar, böylece sayfalar yalnızca kullandıkları bileşenlerin varlıklarını yükler.
Aşırı yazmanın boyutu, güncellemeler sırasında önemlidir. Örneğin, image.php yerine body.php‘yı değiştirmek, daha az üst akış kodu karşılaştırma bırakır.
Geliştirme sırasında, yapılandırma veya şablon değişiklikleri görünmüyorsa Aimeos ve derlenmiş Blade önbelleklerini temizleyin:
php artisan aimeos:clear
php artisan view:clear
Resmi kılavuzlar, şablon aşırı yazmaları ve özel temalar ile ilgili bilgileri kapsamaktadır.
İş Kurallarını Dekoratörlerle Ekleyin
İş Kurallarını Dekoratörlerle Ekleyin
Pek çok proje kuralı, yalnızca mevcut davranışın etrafında çalıştırılmasını gerektirir. Tipik örnekler arasında bölgesel kullanılabilirlik kontrolü, audit olayı, harici bir hizmetten gelen veriler veya bir öğe saklanmadan önceki doğrulama yer alır.
Bir dekoratör, mevcut nesneyi sarar, yalnızca ilgili yöntemleri değiştirir ve geri kalanını devreder.
Örneğin, bir ürün kontrolörü dekoratörü, get() üzerinden bireysel olarak alınan ürünleri, Laravel projesine ait bir uygulama servisine karşı kontrol edebilir:
namespace Aimeos\Controller\Frontend\Product\Decorator;
use App\Commerce\AvailabilityRule;
use Aimeos\MShop\Product\Item\Iface;
final class Availability extends Base
{
public function get(string $id): Iface
{
$item = parent::get($id);
app(AvailabilityRule::class)->assertPurchasable($item);
return $item;
}
}
AvailabilityRule sıradan bir Laravel uygulama kodudur. Dekoratör, bunu Aimeos ürün kontrolörü ile bağlar.
Sınıf,
src/Controller/Frontend/Product/Decorator/Availability.php
Şu şekilde config/shop.php dosyasında kaydedilir:
'controller' => [
'frontend' => [
'product' => [
'decorators' => [
'local' => ['Availability'],
],
],
],
],
Sadece get() değişir. Ürün aramaları, toplama ve kalan kontrolör API’si, orijinal uygulama üzerinden devam eder. Bu örnek, yalnızca doğrudan ürün alımını güvence altına alır. Eğer kural, bir ürünün satın alma durumunu belirliyorsa, bunun sepet veya ödeme aşamalarında da tekrar gerçekleşmesi sağlanmalıdır.
HTML istemcileri ve veri yöneticileri aynı deseni destekler. Birden fazla dekoratör bir arada kullanılabilir, böylece ilgili kurallar bir proje sınıfında toplanmadan uygulanabilir.
Standart davranış uygun olmadığında, Aimeos fabrikaları isimlendirilmiş değişimler konusunda da destek verir. Örneğin, controller/frontend/product/name değerini Project olarak ayarlamak, Aimeos\Controller\Frontend\Product\Project sınıfını seçer. Bu, eğer bir dekoratör, orijinal uygulamanın çoğu kısmını değiştirmesi gerekiyorsa kullanılabilir.
Daha Büyük Özelleştirmeleri Tek Bir Pakette Toplayın
Daha Büyük Özelleştirmeleri Tek Bir Pakette Toplayın
Bir özelleştirme birden fazla sınıf, şablon, çeviri veya veritabanı değişikliğini içerdiğinde, bir proje spesifik Aimeos uzantısına dönüşmelidir.
Temel bir tabloyu genişletmeden önce, gereksinimin bir Aimeos özelliği, niteliği veya ilgili alan öğesine uyup uymadığını kontrol edin. Çoğu proje spesifik ürün verisi, çekirdek şemayı değiştirmeden saklanabilir.
Kendi başına dağıtım, zaten packages/*‘ı bir Composer yol deposu olarak beyan eder. Bir uzantı, geliştirme sırasında orada yaşayabilir ve başka bir bağımlılık gibi yüklenebilir:
composer require acme/shop-extension
Tipik bir proje uzantısı şunları içermektedir:
packages/shop-extension/
├── composer.json
├── manifest.php
├── config/
├── i18n/
├── setup/
├── src/
├── templates/
└── themes/
Manifest, paketin katkıda bulunduğu kaynakları kaydeder. setup/ dizini şemayı güncelleyerek taşıyabilir, Composer otomatize eder ve uzantı Laravel ile Aimeos’tan bağımsız olarak versiyonlanabilir.
Tek bir mağaza için, Aimeos’a özgü kodunu tek yerde saklamak sağlar. Birden fazla mağaza çalıştıran kuruluşlar, bir entegrasyon, tema veya iş kuralını uygulama arasında paylaşmak için aynı paketi kullanabilirler.
uzantı belgeleri, manifest ve paket yapısını açıklarken, uzantı oluşturucusu başlangıç dosyalarını oluşturur.
HTML Ön Yüzünü Ne Zaman Değiştireceğinizi Bilin
HTML Ön Yüzünü Ne Zaman Değiştireceğinizi Bilin
Şablon aşırı yazmaları, uygulama bileşen modeline uyduğu sürece iyi çalışır. Eğer neredeyse her sayfanın değiştirilmesi gerekiyorsa veya aynı ticaret arka ucu web, mobil ve mağaza istemcilerine hizmet vermek zorundaysa, API’ler genellikle daha temiz bir seçenek sunar.
Aimeos, vitrin verilerini JSON:API üzerinden ve yönetimi GraphQL aracılığıyla açığa çıkarır. Ürün, fiyat, stok, sepet ve sipariş mantığı yerinde kalırken, yeni bir istemci sunumu değiştirebilir.
Bir ekip bu değişikliği bir anda yapmak zorunda değildir. Çalışan vitrin korunabilir, birkaç şablonun aşırı yazılması ve API’lerin yalnızca ayrı bir arayüze ihtiyaç duyan kanallar için kullanılması mümkündür.
Yapının Maliyeti
Yapının Maliyeti
İlk uzantı, bazı yönler gerektirir. Yapılandırma yolları, sınıf ve şablon yollarına karşılık gelir ve adlandırma kuralı, genel bir Laravel kancasından daha açıktır.
Bir kez controller/frontend/product/decorators/local ürün denetleyicisinin dekoratör dizinine yol açtığında, aynı ilişki platform boyunca tekrar eder. Yollar, davranışın kimin sahip olduğunu ve projenin nasıl bir değişim geçirdiğini görme olanağı tanır.
Ayrım, özel kodu yukarı akış değişikliklerine karşı korumaz. Şablonlar, dekoratörler ve yer değiştirme sınıfları, büyük güncellemeler sırasında hala gözden geçirilmelidir, ancak etkilenen yüzey, açık ve projeye özgü uzantıya hapsedilmiştir.
Yukarı akış kodu vendor/‘da kalır, proje kodu proje uzantısında kalır ve güncellemeler, bir kaynak kodu birleştirmesi yerine belirli bir uyumluluk incelemesi gerektirir.
Her tür değişikliğin net bir evi vardır. Uygun olana en darını kullanarak, bir mağaza Aimeos varsayılanlarından uzaklaşabilir, özelleştirmelerini yaparken bir çatal haline gelmiş olmaz.
Kaynak: Orijinal Makale


