2012-02-08 11 views
5

मान लीजिए पोर्टलेट एक्स को लिफ़ेरे में तैनात किया गया है और इसमें एक दोस्ताना यूआरएल मैप किया गया है। मान लें कि कोई उपयोगकर्ता मैप किए गए यूआरएल के माध्यम से लिफ़ेरे पोर्टल में प्रवेश करता है लेकिन पोर्टल पोर्टल में मौजूद नहीं है - इसे तैनात किया गया है लेकिन पेज में नहीं जोड़ा गया है।पोर्टेयर चेतावनी उपयोगकर्ता जब पोर्टलेट मौजूद नहीं है

मेरी समस्या यह है कि जब उपयोगकर्ता मैप किए गए यूआरएल का उपयोग करता है तो कुछ नहीं होता - पोर्टल कोई दृश्य प्रतिक्रिया नहीं देता है, लक्ष्य पोर्टल मौजूद नहीं है।

मैं इसे कैसे बदल सकता हूं? मैं उपयोगकर्ता के लिए एक चेतावनी/नोटिस के कुछ प्रकार की आवश्यकता है ...

- संपादन -

मैं अभी तक एक और portlet की उपस्थिति की जांच करने के लिए एक दूसरा portlet का उपयोग जरूरत नहीं है।

Kindest का संबंध है,

उत्तर

4

AFAIK, वहाँ कोई natual ऐसा करने के लिए तरीका है। एक पोर्टलेट को को किसी पृष्ठ पर हमेशा इंस्टॉल करने की आवश्यकता नहीं है। तो, व्यवहार काफी सामान्य है। एक JSP में ThemeDisplay वस्तु <liferay-theme:defineObjects /> का उपयोग कर जो JSP दायरे में निहित वस्तु themeDisplay का पर्दाफाश होगा की

  1. प्राप्त पकड़:

    एक नहीं बल्कि hacky समाधान मैं के बारे में सोच सकता है। प्रकार सेटिंग्स स्ट्रिंग के

  2. प्राप्त पकड़ का उपयोग कर:

    String typeSettings = themeDisplay.getLayout().getTypeSettings(); 
    
  3. प्रकार सेटिंग्स नीचे की तरह मान होगा:

    layout-template-id=foobar_2column 
    sitemap-include=1 
    column-1=foo_WAR_barportlet,abc_WAR_barportlet,56_INSTANCE_K4Vv, 
    column-2=baz_WAR_xyzportlet, 
    sitemap-changefreq=daily 
    
  4. तो अगर आप आईडी के साथ एक गैर instanceable portlet है foo WAR फ़ाइल bar के अंदर, लेआउट पर पोर्टलेट की अद्वितीय आईडी foo_WAR_barportlet होगी।

  5. एक बार जब आप उस पोर्टलेट आईडी को जानते हैं जिसे आप उपस्थित होने की उम्मीद कर रहे हैं, तो यह केवल स्ट्रिंग की एक जांच है।

    <% if(!typeSettings.contains("foo_WAR_barportlet")) { %> 
        <h3 style="color: red">Alert! Portlet foo_WAR_barportlet not installed.</h3> 
    <% } %> 
    

तुम भी एक विषय के अंदर ऊपर के चरणों को कर सकते हैं, लेकिन आप जावा के बजाय वेग में यह तो करना होगा। उम्मीद है की वो मदद करदे।

संपादित

आप अंदर यह पंक्ति जोड़ सकते अपने portal_normal.vm

#if(!$layout.getTypeSettings().contains("foo_WAR_barportlet")) 
    <h3 style="color: red">Alert! Portlet foo_WAR_barportlet not installed.</h3> 
#end 
+0

मैं यह कोड कहां जोड़ूं? – Queequeg

+0

आप इसे थीम में जोड़ सकते हैं, लेकिन फिर आपको इसे कम से कम संशोधित करना होगा क्योंकि थीम वेग में लिखी गई हैं। – adarshr

+0

@Queequeg मेरा अपडेट देखें – adarshr

1

हाँ आप प्राप्त कर सकते इंटर portlet संचार का उपयोग कर कि, उपयोगकर्ता को अधिसूचित करने के लिए कि क्या portlet में जोड़ा जाता है के लिए पेज या नहीं। आपको एक और पोर्टलेट बनाने की ज़रूरत है (इसे इसे श्रोता पोर्टल कहते हैं) जो डिफ़ॉल्ट रूप से पृष्ठ पर बैठता है।

आप थीम में श्रोता पोर्टल जोड़ सकते हैं, ताकि डिफ़ॉल्ट रूप से यह प्रत्येक पृष्ठ में जोड़ा जा सके।

अब, जब आप अपने पृष्ठ पर अपना पोर्टलेट जोड़ते हैं, तो आपके पोर्टलेट को क्लाइंट-साइड जावास्क्रिप्ट ईवेंट ट्रिगर करना चाहिए और अपने श्रोता पोर्टल को सूचित करना चाहिए कि आपका पोर्टलेट आपके पृष्ठ में जोड़ा गया है।

अपने portlet कॉल से,

Liferay.trigger(eventName, data) 

और घटना

Liferay.bind(eventName, function, [scope]) //make the scope as page 

इस तरह अगर आपके portlet पेज या नहीं में जोड़ा जाता है अपने श्रोता portlet पता चल जाएगा करने के लिए अपने श्रोता portlet बाँध। और यदि पोर्टलेट जोड़ा नहीं गया है तो आप उपयोगकर्ता को एक संदेश प्रदर्शित कर सकते हैं।

आगे के संदर्भ की जांच IPC

और के लिए और अधिक विशेष रूप client-side Inter portlet communicaton

+0

उत्तर के लिए धन्यवाद। बात यह है कि मुझे एक और पोर्टल नहीं चाहिए - इसे पहले पोर्टलेट जितना आसान हो सकता है। मुझे एक अलग पोर्टल की तुलना में लिफ़ेरे पोर्टल द्वारा प्रदर्शित सार्वभौमिक चेतावनी की आवश्यकता है। – Queequeg

+0

जीवनभर द्वारा प्रदान की गई कोई ऐसी सीधी विधि नहीं है जो बताएगी कि एक पृष्ठ में एक पोर्टल जोड़ा गया है या नहीं। –

0

यह बेहतर होगा अगर हम इस कोशिश,

ThemeDisplay themeDisplay = request.getAttribute(WebKeys.THEME_DISPLAY); 

Layout layout = LayoutLocalServiceUtil.getLayout(themeDisplay.getLayout().getPlid()); 
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet)layout.getLayoutType(); 

List allPortletIds = layoutTypePortlet.getPortletIds(); 

तो सूची रिक्त है तो पेज does not किसी भी portlets शामिल ।

LayoutTypePortlet गेटिंग्स सुनिश्चित करता है कि उपयोगकर्ता को रीडायरेक्ट किया गया पृष्ठ लेआउट प्रकार पोर्टलेट है।

+0

मैं यह कोड कहां जोड़ूं? – Queequeg

+0

@sharanbm, यह एक अच्छा विचार है, लेकिन फिर भी यह कोड एक पोर्टल में जाएगा, जिसे किसी पृष्ठ में जोड़ा जाना आवश्यक है। –

+0

@Queequeg आपको एक एमवीसीपीलेट बनाने की आवश्यकता है और इस कोड को उसके अंदर रखें, और उस पोर्टल को पृष्ठ में जोड़ा जाना चाहिए। –

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