2011-09-15 11 views
5

मैं प्लोन 4 के लिए एक सामग्री प्रकार विकसित कर रहा हूं, और मैं अपने उपयोगकर्ता ऑब्जेक्ट से प्राप्त सभी उपयोगकर्ता, समूह और संदर्भ पोर्टल को अवरुद्ध करना चाहता हूं। मैं इस बिंदु पर प्रलेखन द्वारा पूरी तरह उलझन में हूं- portlets.xml, <blacklist/> केवल पथ-विशिष्ट अवरोधन को संबोधित करता है। <assignment/> मुझे लगता है कि जैसा लगता है, लेकिन यह बहुत विशिष्ट लगता है- मैं अपने सामग्री प्रकार पर सभी संभावित पोर्टलों के लिए असाइनमेंट प्रबंधित नहीं करना चाहता हूं।प्लोन सामग्री प्रकार-विशिष्ट पोर्टलेट असाइनमेंट

ऐसे संकेत हैं जो मैंने पाया है कि सामग्री प्रकार के लिए विशिष्ट आईएलएफटी कॉलम और आईराइट कॉलम पोर्टलेट प्रबंधक को अनुकूलित करना, लेकिन मुझे कोई अच्छा उदाहरण नहीं मिल रहा है। क्या किसी के पास कोई संकेत या सुझाव हैं? मुझे लगता है कि मैं कुछ मृत सरल याद कर रहा हूँ।

उत्तर

6

पोर्टलेट अधिग्रहण को रोकने और पोर्टलर्ट जोड़ने की संभावना को बनाए रखने के लिए आप अपनी सामग्री के निर्माण पर एक ईवेंट श्रोता जोड़ सकते हैं जो ऑटो अधिग्रहण को अवरुद्ध करता है।

इस तरह

:

<subscriber 
     for="my.package.interfaces.IMyContent 
      zope.app.container.interfaces.IObjectAddedEvent"     
handler=".subscribers.blockPortletsUpponMyContentCreation" 
        /> 

और से ऐसा करते हैं:

from zope.component import getMultiAdapter, getUtility 
from plone.portlets.interfaces import IPortletManager 
from plone.portlets.interfaces import ILocalPortletAssignmentManager 
from plone.portlets.constants import USER_CATEGORY 
from plone.portlets.constants import GROUP_CATEGORY 
from plone.portlets.constants import CONTENT_TYPE_CATEGORY 
from plone.portlets.constants import CONTEXT_CATEGORY 

def blockPortletsUpponMyContentCreation(mycontent, event): 
    for manager_name in ('plone.leftcolumn','plone.rightcolumn'): 
     manager = getUtility(IPortletManager, name=manager_name) 
     assignable = getMultiAdapter((mycontent, manager,), ILocalPortletAssignmentManager) 
     for category in (GROUP_CATEGORY, CONTENT_TYPE_CATEGORY,CONTEXT_CATEGORY,USER_CATEGORY): 
      assignable.setBlacklistStatus(category, 1) 

नोट: इस कोड plone.app.portlet manage view

संपादित 19/08/2011 से प्रेरित है: फिक्स शामिल के रूप में सुझाव @ unillested कोड में @will द्वारा ... अब परीक्षण किया गया है

+0

धन्यवाद! यह वही है जो मैं करना चाहता था, यह भविष्य में उन्हें असाइन करने की उपयोगकर्ता की क्षमता को बनाए रखने के दौरान मौजूदा पोर्टल को अवरुद्ध करता है। मैं portlets.xml में कुछ करने की कोशिश कर रहा था कि एक ग्राहक मेरे साथ नहीं हुआ था। – Will

+1

वंशावली के लिए, इसे बनाने के लिए उपरोक्त कोड में कुछ संशोधन किए जाने चाहिए। जेडसीएमएल में, 'फैक्ट्री' विशेषता 'हैंडलर' होनी चाहिए, प्रबंधक नामों को 'getUtility() 'के साथ अपने संबंधित' आईपॉर्टलेट प्रबंधक 'प्रबंधकों से मेल खाना चाहिए। – Will

+0

@Will कृपया आप इस प्रश्न को अपने प्रश्न के उत्तर के रूप में चिह्नित कर सकते हैं? – toutpt

1

साइट्सअपअप (कंट्रोल पैनेल) के माध्यम से साइट पर अपने पोर्टटाइप को असाइनमेंट करें -> प्रकार -> "इस सामग्री प्रकार को निर्दिष्ट पोर्टलेट प्रबंधित करें"।

फिर ZMI -> portal_setup -> निर्यात-टैब -> 'पोर्टलेट' का चयन करें -> नीचे 'निर्यात' पर क्लिक करें।

प्रकार/YourType.xml-file निकालें और अपने पैकेज के प्रोफाइल/डिफ़ॉल्ट/प्रकार/YourType.xml में प्रासंगिक भागों की प्रतिलिपि बनाएँ।

+0

ऐसा लगता है कि आप केवल पोर्टलेट जोड़ सकते हैं, न कि ब्लॉक के माता-पिता पोर्टल। क्या आप इस तरह से निश्चित हैं? –

+0

आह नहीं, इस तरह से अवरुद्ध करना संभव नहीं है, मैं केवल आपके दूसरे पैराग्राफ का जिक्र कर रहा था। आप पूरी तरह से झुकाव को अवरुद्ध नहीं करना चाहते हैं, लेकिन फिर भी नए को असाइन करने में सक्षम हैं, है ना? – ida

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