2015-11-17 19 views
9

मैं एक कस्टम सोनाटा पेजनेवबार

सरल मार्ग

medapp_adminStreamCommands: 
    path:  /admin/stream 
    defaults: { _controller: MedAppBundle:VideoChat/VideoChat:adminStreamCommands } 

नियंत्रक कि व्यवस्थापक पूल रिटर्न

public function adminStreamCommandsAction(Request $request) 
    { 

     return $this->render('@MedApp/AdminSonata/Stream/stream_commands.html.twig', array(
      'admin_pool' => $this->get('sonata.admin.pool'))); 
    } 

सादा दृश्य टेम्पलेट

बना लिया है करने के लिए कस्टम सोनाटा पेज मार्ग जोड़ें
{% extends '@MedApp/AdminSonata/standard_layout.html.twig' %} 

{% block content %} 
foobar 
{% endblock content 

यह काम करता है, मैं सी /admin/foo के साथ मेरी वेबसाइट पर इसका उपयोग करें और मुझे एक पृष्ठ मिलता है जिसमें सोनाटा व्यवस्थापक टेम्पलेट मेरे 'foobar' सामग्री के साथ है।

मेरा सवाल है, मैं डिफ़ॉल्ट टेम्पलेट को संशोधित किए बिना बाएं और शीर्ष नौसेना में यह मार्ग कैसे जोड़ सकता हूं? ऐसा इसलिए है क्योंकि है छोड़ दिया मेनू एक KNP मेनू द्वारा प्रदान की गई है:

{% block side_bar_nav %} 
    {% if app.user and is_granted('ROLE_SONATA_ADMIN') %} 
     {{ knp_menu_render('sonata_admin_sidebar', {template: admin_pool.getTemplate('knp_menu_template')}) }} 
    {% endif %} 
{% endblock side_bar_nav %} 

और मैं किसी भी तरह अपने नए पेज जोड़ने की जरूरत है इस मेनू से प्रदान करने की।

आम तौर पर, एक पृष्ठ पर एक सेवा के माध्यम से जोड़ा जाता है, लेकिन इन एक इकाई के शीर्ष पर बनाया जाता है:

servicename: 
    class: Bundle\Class 
    arguments: [~, Bundle\Entity\Entityname, ~] 
    tags: 
     - { name: sonata.admin, manager_type: orm, group: admin, label: CustomName} 

मेरे पेज एक इकाई का उपयोग नहीं कर रहा है, हालांकि, सिर्फ स्थैतिक सामग्री या सामग्री नहीं निर्भर है कि एक इकाई पर

मुझे पहले से पता है कि मैं मेनू उत्पन्न करने वाले ब्लॉक को संशोधित कर सकता हूं, लेकिन मैं सोच रहा था कि सबसे अच्छा तरीका मेरी कक्षा को sonata.admin के रूप में टैग की जाने वाली सेवा के रूप में जोड़ना होगा जिसमें एक ओआरएम प्रबंधक_ टाइप नहीं है, दूसरे शब्दों, एक संस्था नहीं है। वह कैसे किया जा सकता है?

उत्तर

1

मुझे नहीं लगता कि यह संभव है, आपको एक नया लेआउट बनाना होगा, sonata admin layout कॉपी करें और इसे अपनी आवश्यकता के अनुसार अनुकूलित करें।

आप sonata_admin (टेम्पलेट्स -> लेआउट) या extending the SonataAdmin bundle के लिए yml कॉन्फ़िगरेशन को बदलकर और अपना खुद का layout.html.twig बनाने के द्वारा उपयोग किए गए लेआउट को बदल सकते हैं।

+0

मैंने पहले ही ऐसा किया था। हालांकि, मुझे व्यवस्थापक पूल मार्ग और अपने स्वयं के कस्टम पेज दोनों के आधार पर मेनू जेनरेट करना होगा। मैं सोच रहा था कि सोनाटा के पास मुझे अपना खुद का मेनू बनाने के बजाय yml फ़ाइल या किसी अन्य आसान तरीके से ऐसा करने का कोई तरीका है। मुझे कल्पना है कि मैं ऐसा पहला नहीं हूं जो समान कार्यक्षमता चाहता है, लेकिन मुझे ऐसा कोई उदाहरण नहीं मिला जो ऐसा करता है। –

+0

पता नहीं है कि अपना खुद का मेनू बनाने का कोई दूसरा तरीका है या नहीं, आप अपने पेज के वर्तमान मार्ग की जांच करके अपने स्वयं के लिंक भी सेट कर सकते हैं और अपना खुद का एचटीएमएल जोड़ सकते हैं, यह करने का एक गंदा तरीका है लेकिन काम करेगा। – HypeR

+0

दरअसल। एक और तरीका एक मॉडल के लिए एक एडमिन क्लास सेट करना होगा जो ओआरएम से जुड़ी एक इकाई नहीं है। मैंने इस तरह के बारे में चर्चा देखी है लेकिन फिर से, इसे कैसे किया जाए इस पर कोई उदाहरण नहीं मिला। यह निश्चित रूप से काम करेगा क्योंकि मैं वर्तमान मॉडल के रूटकोलेक्शन में मार्ग जोड़ सकता हूं और कस्टम क्रियाओं को लागू कर सकता हूं। दुर्भाग्यवश ऐसा कुछ है जिसके बारे में मुझे कुछ भी नहीं मिला या यदि यह भी संभव है। –

2

आपको standard_layout को ओवरराइड करना चाहिए और side_bar_nav ब्लॉक की सामग्री को संशोधित करना चाहिए। यह सरल और तेज़ तरीका है। या आप admin_pool.dashboardgroups में कुछ इंजेक्ट करने के लिए सोनाटा कोड में खोद सकते हैं - मज़े करें :)

+0

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

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