I18n davranışını genişletmek istiyorum, böylece çeviri tablosuna otomatik olarak, herhangi bir sorgu türünde (DQL, ilişkiler, getTable) katılır.
Ayrıca, varsayılan dil parametresini tanımlamalıdır, bu nedenle dil ayarı olmadan bir sorgu yaptığımda, varsayılan dile geri döner.
Not: Genelleştirilmiş bir davranış arıyorum, bu nedenle tüm i18n model nesnelerine uygulanır, sınıfların her biri için yazılmaz ve geçersiz kılınamaz. Yapmam akım çözümü ile> id, lang, adı, tanımı ...Doctrine 1.2 otomatik katılma i18n?
- -> id, category_id, fiyat ...
tablo product_translation
tablo product
: Burada
Doctrine_Core::getTable('Product')->findAll()
, tüm ürünleri çevirilere katılmadan alır.
Doctrine_Core::getTable('Product')->findAll()
o lang katıldı değerleri almalısınız = 'tr:
Yani denetleyicisi ben böyle bir şey istiyorum$product->name = $product->Translation['en']->name
ile, döngü teknesi tüm kayıtlarına sahip ve tercüme değerlerini yeniden uygulamak 'Mesela ben çeviriler dahil olan bir koleksiyon dönmelidir birçok ürün
$user->Products
olan bir sınıf Kullanıcı varsa yüzden- yukarıdaki gibi
Doctrine_Core::getTable('Product)->findAll('en')
aynı Ayrıca, ilişkiler çalışması gerekir.- Ayrıca
$user->Products('en')
gibi bir şey Herkes yardımcı olabilir - Sihirli fonksiyonlar da (mümkünse) güzel olurdu diğer (varsayılan olmayan) diller için toplama ...
Doctrine_Core::getTable('Product')->getByCategoryAndLang(1,'en')
gibi bir şey dönmelidir? Şablonlara ve davranışlara bakıyorum, bu yoldan gitmenin bir yolu olduğunu düşünüyorum, ancak bu
DÜZENLEME: Nasıl uygulanacağına dair bir fikrim yok. daha basit bir soru. Genellikle i18n alanlarını ilişkilerle nasıl alırsınız. Örneğin, $user->Products
numaralı telefonu nasıl arayabilirim ve yüklü çeviri olan ürünleri nasıl alabilirim?
Teşekkürler, ama önerileriniz DAO olmadan yapılabilir. Sadece ProductTable sınıfını belirtin ve Çeviri ile birleştirme işlemini gerçekleştiren getXy yöntemlerini ekleyin. Her neyse, bu sorunu çözmüyor, çünkü bu alanlara $ product-> name, ama $ product-> Translation ['en'] -> name – ZolaKt
ile erişemiyorum. Bu modelde açıklanmayan ürün modeli (ve db tablosunda mevcut değildir). Benim yöntemimle, tüm sütunları tek bir nesnede (Doctrine_Collection içinde) ve ONE somut çeviri için alırsınız. Bu nedenle, $ products = DAO :: get ('Some \ Namespace \ Product') -> getProducts (dizi ('lang' => 1)); bu şekilde 'foreach ($ ürün olarak $ ürün) {. ..} '' ** ** IMHO '$ product-> name' öğesine erişebilir. Yapamıyor musun? – shadyyx
Hmm ... Modalda açıklanmadığını söylediğin gibi ona hala erişebileceğini sanmıyorum. Yapabildiğim şey onu dizi olarak hidrolize etmek ve sonuçları yeniden düzenlemek (Çeviri'yi kaldırmak ve adı bir seviye yukarı ilerletmek). Şimdi kullanıyorum budur. Yine de, yöntem sınıflarında, Tablo sınıflarındaki normal tanımlama yöntemleriyle karşılaştırıldığında bir fark göremiyorum. – ZolaKt