मैं i18n व्यवहार का विस्तार करना चाहता हूं, ताकि यह किसी भी प्रकार की क्वेरी (डीक्यूएल, रिलेशनशिप, गेटटेबल) पर स्वचालित रूप से अनुवाद तालिका में शामिल हो।
इसके अतिरिक्त इसे डिफ़ॉल्ट भाषा पैरामीटर को परिभाषित करने की आवश्यकता है, इसलिए जब मैं भाषा सेट के बिना कोई क्वेरी करता हूं, तो यह डिफ़ॉल्ट भाषा पर वापस आ जाता है।
नोट: मैं एक सामान्यीकृत व्यवहार की तलाश में हूं, इसलिए यह सभी i18n मॉडल ऑब्जेक्ट्स पर लागू होता है, प्रत्येक वर्ग के लिए लिखना और ओवरराइड नहीं करना। -> आईडी, category_id, कीमत ...
तालिका product_translation
-> आईडी, भाषा, नाम, विवरण ...सिद्धांत 1.2 ऑटो-जॉइन i18n?
वर्तमान समाधान जब मैं करता हूँ के साथ
तालिका product
:
यहाँ एक उदाहरण है इस तरह कुछ: Doctrine_Core::getTable('Product')->findAll()
, यह अनुवाद में शामिल किए बिना सभी उत्पादों को प्राप्त करता है।
तो नियंत्रक में मैं पाश गर्त सभी रिकॉर्ड करने के लिए है और अनुवाद मूल्यों पुन: लागू, $product->name = $product->Translation['en']->name
साथ मैं कुछ इस तरह करना चाहते हैं:
Doctrine_Core::getTable('Product')->findAll()
यह लैंग के लिए शामिल हो गए मूल्यों को प्राप्त करना चाहिए = 'एन 'ऊपर- रूप
Doctrine_Core::getTable('Product)->findAll('en')
ही यह भी संबंधों के साथ काम करना चाहिए ताकि उदाहरण के लिए मैं जो कई उत्पादों$user->Products
यह एक संग्रह लौटना चाहिए अनुवाद के साथ शामिल है एक वर्ग उपयोगकर्ता है।- इसके अलावा
$user->Products('en')
की तरह कुछ अन्य (गैर डिफ़ॉल्ट) भाषाओं के लिए संग्रह - जादू कार्य भी अच्छा होगा (यदि संभव हो) ...
Doctrine_Core::getTable('Product')->getByCategoryAndLang(1,'en')
की तरह कुछ लौट किसी को भी मदद कर सकते हैं करना चाहिए? मैं टेम्पलेट्स और व्यवहार को देख रहा हूँ, मुझे लगता है कि जाने का रास्ता है, लेकिन कोई सुराग नहीं है कि यह कैसे
संपादित लागू करने के लिए: मैं देख रहा हूँ कि इस में ज्यादा रुचि नहीं है, तो मुझे एक साथ की कोशिश करते हैं सरल सवाल आप आमतौर पर संबंधों के माध्यम से i18n फ़ील्ड कैसे प्राप्त करते हैं। उदाहरण के लिए मैं $user->Products
पर कॉल कैसे कर सकता हूं और लोड किए गए अनुवाद वाले उत्पादों को प्राप्त कर सकता हूं?
धन्यवाद, लेकिन आप जो सुझाव दे रहे हैं वह डीएओ के बिना किया जा सकता है। बस ProductTable क्लास घोषित करें, और getXy विधियों को जोड़ें जो अनुवाद के साथ जुड़ते हैं। वैसे भी यह समस्या का समाधान नहीं करता है, क्योंकि मैं अभी भी उन उत्पादों को $ product-> नाम के साथ एक्सेस नहीं कर सकता, लेकिन $ product-> अनुवाद ['en'] -> नाम – ZolaKt
आप 'नाम' संपत्ति का उपयोग ' उत्पाद' मॉडल जैसा कि इस मॉडल में वर्णित नहीं है (और डीबी तालिका में मौजूद नहीं है)। मेरी विधि के साथ आप एक ऑब्जेक्ट में सभी कॉलम प्राप्त करते हैं (Doctrine_Collection के भीतर) - और एक ठोस अनुवाद के लिए। तो '$ उत्पादों = डीएओ :: के माध्यम से लूपिंग ('कुछ \ Namespace \ product') प्राप्त करें -> getProducts (सरणी ('lang' => 1)); इस तरह 'foreach ($ उत्पाद के रूप में $ उत्पादों) {। ..} 'आप ** ** IMHO तक पहुंच सकते हैं '$ product-> name'। तुम नहीं कर सकते? – shadyyx
हम्म ... मुझे नहीं लगता कि आप अभी भी इसका उपयोग कर सकते हैं, जैसा कि आपने कहा था कि इसे मोडल में वर्णित नहीं किया गया है। मैं क्या कर सकता था इसे सरणी के रूप में हाइड्रेट करता है, और परिणामों को पुनर्व्यवस्थित करता है (अनुवाद हटाएं, और नाम एक स्तर ऊपर प्रसारित करें)। यही वह है जो मैं अब उपयोग कर रहा हूं। लेकिन फिर भी, तालिका तालिकाओं में सामान्य परिभाषा विधियों की तुलना में मैं आपकी विधि में कोई अंतर नहीं देख सकता – ZolaKt