2011-07-11 17 views
7

के साथ समस्या मैं अपने निपुणता आधारित कस्टम सामग्री-प्रकार के एक विशेषता ('सेक्टर') के लिए सेक्टर नामक एक विशेष इंडेक्स को सक्षम करना चाहता हूं।plone.indexer और Dexterity

मेरी स्कीमा में, अंदर प्रकार/mycontent.py मेरे पास है:

class IMyContent(form.Schema): 
    """ 
    My Content 
    """ 
    sectors = schema.Set(
      title=_(u"Sectors"), 
      description=_(u"Select some sectors"), 
      value_type=schema.Choice(vocabulary=vocs.sectors), 
      required=True, 
     ) 

    (...) 

मैं तो सूचकांक इस तरह से, में परिभाषित indexers.py अंदर

from plone.indexer.decorator import indexer 
from zr.content.types.mycontent import IMyContent 

@indexer(IMyContent) 
def Sectors(obj): 
    """Indexer for Sectors attribute. 
    """ 
    d = getattr(obj, "sectors", u"") 
    return d if d else None 

अंत में रूट पैकेज config.zcml:

<adapter name="Sectors" factory=".indexers.Sectors"/> 

हालांकि, यह काम नहीं प्रतीत होता है। उत्पाद को पुनर्स्थापित करने के बाद भी, मुझे पोर्टल_catalog में अनुक्रमणिका नहीं दिखती है और कैटलॉग मस्तिष्क ऑब्जेक्ट में ऐसा प्रतीत नहीं होता है।

मैं क्या गलत कर रहा हूं?

उत्तर

10

आप कैटलॉग इंडेक्स को परिभाषित नहीं कर रहे हैं। यह सिर्फ सूचकांक को जोड़ने के लिए उपलब्ध कराएगा। आप के साथ अपने GenericSetup प्रोफ़ाइल में एक catalog.xml आवश्यकता होती है:

<?xml version="1.0"?> 
<object name="portal_catalog" meta_type="Plone Catalog Tool"> 
<index name="Sectors" meta_type="KeywordIndex"> 
    <indexed_attr value="Sectors"/> 
</index> 
</object> 
+1

फिर भी,, सामान्य सेटअप के साथ नया सूचकांक में शामिल न करें यदि आप को पुन: क्योंकि आप अपने सभी डेटा खो देंगे यह quick_installer का उपयोग कर रहा है। –

+1

सामान्य रूप से उत्पादों को पुनर्स्थापित करना एक संकेत है जिसे आप गलत कर रहे हैं। – MatthewWilkes

0

स्वीकार कर लिया समाधान थोड़ा अस्पष्ट हो सकता है, इसलिए यहाँ स्पष्टीकरण के एक जोड़े हैं:

1) अपने वैश्विक जेनेरिक सेटअप संपादित न करें।

जब तक आप कुछ बेहद अजीब कर रहे हैं, आप प्लोन विस्तारीकरण की एक श्रंखला के रूप में अपनी साइट सेटअप होगा, और की तरह एक फ़ोल्डर संरचना है:

app.plugin/ 
app.plugin/app/ 
app.plugin/app/configure.zcml 
app.plugin/app/profiles/ 
app.plugin/app/profiles/default 
app.plugin/app/profiles/default/types 
app.plugin/app/profiles/default/types/Folder.xml 
app.plugin/app/profiles/default/types/app.mydexteritytype.xml 
app.plugin/app/profiles/default/types.xml 
app.plugin/app/profiles/default/portlets.xml 
app.plugin/app/profiles/default/catalog.xml <---- ADD THIS 

2) आप नहीं है catalog.xml में एक एक्सएमएल ब्लॉक (स्वीकार्य समाधान के अनुसार) रखने के लिए, आप केवल फ्रंटेंड जेएमआई से इंडेक्स बना सकते हैं। हालांकि, अगर आप ऐसा करते हैं, तो अगली बार जब आप अपने प्लगइन इंस्टॉल करेंगे तो इसे उड़ा दिया जाएगा। तो आप शायद करना चाहते हैं।

3) अपना कैटलॉग.एक्सएमएल स्थापित करने के बाद, पोर्टल_catalog में जेएमआई इंटरफ़ेस पर ब्राउज़ करें और जांचें कि 'इंडेक्स' टैब के अंतर्गत आपकी अनुक्रमणिका मौजूद है। यदि यह गड़बड़ नहीं हुआ है।

4) इंडेक्स बनाएं, आपको 'उन्नत' टैब पर जाना होगा और पुनर्निर्माण करना होगा।

5) सूचकांक लालच से अपवादों का उपभोग करता है और उन्हें विशेष रूप से महत्वपूर्ण नहीं बनाता है (विशेष रूप से विशेषता के लिए महत्वपूर्ण; आप कुछ मानों को इंडेक्स नहीं कर सकते हैं जिन्हें आप अनुक्रमणित करना चाहते हैं), इसलिए यदि आप यह सुनिश्चित करना चाहते हैं कि आपका इंडेक्सर वास्तव में चल रहा है, तो जोड़ने का प्रयास करें उस में एक लॉग या प्रिंट बयान:

@indexer(IMyDexterityType) 
def dummy_indexer(obj, **kw): 
    try: 
     print('indexed: %r' % obj) 
     return obj.title 
    except Exception as e: 
     print('index fail: %r' % e) 
    return '' 

और कुछ नहीं है कि आपने कभी उत्पादन की तरह देखना चाहिए:

2013-08-12 16:42:28 INFO GenericSetup.archetypetool Archetype tool imported. 
2013-08-12 16:42:28 INFO GenericSetup.resourceregistry Stylesheet registry imported. 
2013-08-12 16:42:28 INFO GenericSetup.resourceregistry Javascript registry imported. 
indexed: <MyDexterityType at /Plone/test/cat-document-0> 
indexed: <MyDexterityType at /Plone/test/hello> 

6) grok.global_adapter() के रूप में से कुछ प्रलेखन (http://developer.plone.org/reference_manuals/external/plone.app.dexterity/advanced/catalog-indexing-strategies.html?highlight=custom%20indexing#creating-custom-indexers में उल्लेख किया है) है आभासी पी पंजीकरण के बारे में roperties, और अपने catalog.xml सेटअप करने की आवश्यकता को कम नहीं करता है।

अंत में, कोई एक काम उदाहरण ऊपर GitHub पर यहाँ रखा है, जो अत्यंत उपयोगी है:

https://github.com/aclark4life/event_days_indexer