2011-07-11 11 views
7

pragnę włączyć specjalny indeks, o nazwie sektorów, dla atrybutu („sektorów”) mojego niestandardowego typu zawartości opartej Zręczności.problem z plone.indexer i zręczności

W moim schemacie wewnątrz typy/mycontent.py mam:

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, 
     ) 

    (...) 

I następnie zdefiniować indeks w ten sposób, wewnątrz 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 

Wreszcie w pakiet główny configure.zcml:

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

Jednak to nie działa. Nawet po ponownym zainstalowaniu produktu nie widzę, aby indeks w katalogu portal_ portal i obiekt mózgu katalogu nie zawierał go.

Co robię źle?

Odpowiedz

10

Nie są zdefiniowaniu indeksu katalogu. To spowoduje, że indeksator będzie dostępny do dodania. Potrzebny jest catalog.xml w swoim profilu GenericSetup z:

<?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

Nadal nie dodać nowy indeks z Generic instalacji, ponieważ spowoduje utratę wszystkich danych, jeśli ponowna używając quick_installer. –

+1

Ponowna instalacja produktów jest oznaką, że robisz to źle. – MatthewWilkes

0

przyjętego rozwiązania może być nieco niejasne, więc oto kilka wyjaśnień:

1) Nie wolno zmieniać swoją globalną konfigurację rodzajowe.

Chyba że robisz coś bardzo dziwnego, musisz konfiguracji witryny w postaci szeregu rozszerzeń Plone i mają strukturę folderów jak:

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) użytkownik nie mieć mieć blok xml (zgodnie z przyjętym rozwiązaniem) w pliku catalog.xml, możesz po prostu utworzyć indeks z ZMI interfejsu. Jeśli jednak to zrobisz, zostanie zerwany podczas następnego instalowania wtyczek. Więc prawdopodobnie chcesz do chcesz.

3) Po zainstalowaniu catalog.xml, przejdź do interfejsu ZMI do portal_catalog i sprawdzić, czy na karcie „” Twoje indeksy indeks istnieje. Jeśli to nie pomieszałeś.

4) Aby zbudować indeks, należy przejść do zakładki "zaawansowane" i wybrać odbudować.

5) Indeksator łapczywie pochłania wyjątki i nie podnosi ich (szczególnie ważne dla AttributeError; nie można indeksować niektórych wartości, które mają być indeksowane), więc jeśli chcesz się upewnić, że indeksator faktycznie działa, spróbuj dodać dziennik lub druk oświadczenie w nim:

@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 '' 

Jeżeli nic innego nie powinny być widoczne jakieś wyjście jak:

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() jak wspomniano w niektórych z dokumentacją (http://developer.plone.org/reference_manuals/external/plone.app.dexterity/advanced/catalog-indexing-strategies.html?highlight=custom%20indexing#creating-custom-indexers) jest o rejestrowaniu wirtualnych p właściwości i nie zmniejsza konieczności konfigurowania pliku catalog.xml.

Wreszcie ktoś umieścić przykład przerobieniu na github tutaj, co jest niezwykle przydatne:

https://github.com/aclark4life/event_days_indexer