Twig

2011-07-24 18 views
5

का उपयोग कर सिम्फनी 2 में गतिशील थीम मैं सिम्फनी 2 के लिए एक बहु-किरायेदार एप्लिकेशन तैयार कर रहा हूं, जहां प्रत्येक किरायेदार के पास एक थीम हो सकती है जो डिफ़ॉल्ट एप्लिकेशन टेम्पलेट को ओवरराइड करता है। तो एक थीम में एक अद्वितीय base.html.twig फ़ाइल होगी, और डिफ़ॉल्ट टेम्पलेट फ़ाइलों को ओवरराइड करने वाली अन्य फ़ाइलों को शामिल या शामिल नहीं किया जा सकता है।Twig

Symfony2 पहले से ही app/Resources/views को टेम्पलेट्स के लिए चेक करता है जो बंडल टेम्पलेट को ओवरराइड करते हैं। लेकिन Symfony2 मानता है app/Resources/views में केवल टेम्पलेट्स का एक सेट है जो डिफ़ॉल्ट टेम्पलेट्स को ओवरराइड कर सकता है। मैं गतिशील विभिन्न अधिभावी टेम्पलेट्स के लिए एक किरायेदार के कस्टम विषय फ़ोल्डर देखना, जैसे:

  1. थीम:
    • app/Resources/views/theme1/base.html.twig
  2. थीम:
    • app/Resources/views/theme2/base.html.twig
    • app/Resources/views/theme2/SomeBundle/Resources/views/page.html.twig

मुझे यकीन है कि Symfony2 में इस संरचना करने के लिए सबसे अच्छा तरीका और टहनी में यह कॉन्फ़िगर करने के लिए नहीं कर रहा हूँ। क्या मुझे ऐप/संसाधन/विचारों में फ़ोल्डरों में सभी अलग-अलग विषयों को ढेर करना चाहिए? या मुझे किसी प्रकार का थीमबंडल बनाना चाहिए जो सब कुछ संभालता है? धन्यवाद!

+0

आपके परीक्षण अब तक क्या प्रकट हुए? – hakre

+0

मैं ऐप/संसाधन/विचार निर्देशिका में विषयों को डालने की ओर झुका रहा हूं, लेकिन मुझे यकीन नहीं है कि सही थीम को गतिशील रूप से कैसे जांचें। साथ ही, भविष्य में, हम उपयोगकर्ताओं को थीम ट्विग फाइलों को संपादित करने की अनुमति दे सकते हैं ... जिससे मुझे लगता है कि उन्हें एक बंडल होना चाहिए। – Acyra

उत्तर

1

बंडलों के बारे में जानें: Symfony2 Bundle Structure, a use case - बंडल समर्थन थीम।

विषय संकल्प के बारे में जानें & कैस्केड: LiipThemeBundle - पढ़ने के लिए कोड के साथ आता है और जो कुछ भी आप ढूंढ रहे हैं उसे होना चाहिए।

+0

लिंक के लिए धन्यवाद। मैंने लीपथीमबंडल पर एक दूसरा नज़र डाला, दुर्भाग्य से यह आपको कॉन्फ़िगरेशन में सभी संभावित विषयों को सूचीबद्ध करने की आवश्यकता है, जो गतिशील नहीं है, और मुझे सैकड़ों या हजारों विषयों का समर्थन करने की आवश्यकता है। – Acyra

+0

@ डीसी कोड: कॉन्फ़िगरेशन कहीं भी लोड किया गया है। जांचें कि यह क्या करता है, वही करें लेकिन आपके गतिशील इनपुट के आधार पर। – hakre

3

मेरे पास ऐसा कुछ करने का प्रयास करने में बुरा समय है ... ii ने liipthemebundle के कोड को देखा और इसे बहुत अधिक विन्यास की आवश्यकता है ... मैंने इंटरनेट पर बहुत कुछ देखा ... और फिर मैंने सोचना शुरू कर दिया ... और क्या मैंने देखा यह गया था:

http://symfony.com/doc/current/book/templating.html#overriding-bundle-templates

उस पेज में उपयोगी जानकारी का एक बहुत कुछ है ... लेकिन क्या मुझे एक सरल उपाय करने के लिए ले लिया इस तथ्य था: अनुप्रयोग में सिम्फोनी देखो/संसाधन/[MyBundle] टेम्पलेट्स और चीजों के लिए ... और मुझे पता चला कि उसके लिए ज़िम्मेदार सेवा यह फ़ाइल_लोकेटर सेवा है ...

इसलिए, यदि आप एक पैरामीटर को परिभाषित, मान लीजिए कि parameters.yml में त्वचा

और अपने अनुप्रयोग/config/config.yml

file_locator: 
     class: %file_locator.class% 
     arguments: [@kernel,%kernel.root_dir%/Resources/skins/%skin%] 

तुम अपनी खाल है ...

को यह पंक्तियाँ जोड़ें
1

मुझे एक ही समस्या थी, और मैंने इसे हल करने के लिए LiipThemeBundle का उपयोग किया। मुझे कॉन्फ़िगर करने में कुछ मिनट लग गए:

  • संगीतकार के साथ बंडल इंस्टॉल करें और इसे सक्रिय करें।
  • बंडल कॉन्फ़िगर करें (ऐप/कॉन्फ़िगर/कॉन्फ़िगरेशन।YML)


    liip_theme: 
     themes: ['theme1', 'theme2', 'theme3'] 
     active_theme: 'theme1' 

  • तीन लाइनों ऐप्लिकेशन/config/routing.yml


    liip_theme: 
     resource: "@LiipThemeBundle/Resources/config/routing.xml" 
     prefix: /theme 

  • \ विषयों \ THEME1 \ चाल संसाधन से फाइल \ विचारों \ संसाधन को कॉपी

और तैयार !!

उसके बाद, जब मैं नियंत्रक में टेम्पलेट प्रस्तुत करना:



    return $this->render('AcmeDemoBundle:Demo:index.html.twig'); 

यह "\ THEME1 \ डेमो \ index.html.twig संसाधन \ विषयों" में स्थित फ़ाइल का उपयोग करता है। जब मैं, एक और विषय के लिए स्विच करने के लिए मेरे मामले में, क्योंकि मेरे मॉडल में से कुछ संस्थाओं कस्टम विषयों की जरूरत है, मैं कोड की एक पंक्ति के साथ यह कर सकते हैं:



    $this->get('liip_theme.active_theme')->setName('theme2'); 
    return $this->render('AcmeDemoBundle:Demo:index.html.twig'); 

और अब "संसाधन में स्थित फ़ाइल का उपयोग करता है \ विषयों \ विषय 2 \ डेमो \ index.html.twig "

इतना आसान !! (और साफ)

संबंधित मुद्दे

 संबंधित मुद्दे