Почему мой контентный объект не отображается в portal_catalog? - PullRequest
0 голосов
/ 18 февраля 2012

Я пытаюсь реализовать базовый тип контента Zope2 напрямую, не используя ловкость или архетипы, потому что мне нужно, чтобы это было чрезвычайно бережно

from OFS.SimpleItem import SimpleItem
from Products.ZCatalog.CatalogPathAwareness import CatalogAware
from persistent.list import PersistentList

class Doculite(SimpleItem, CatalogAware):
    """ implement our class """

    meta_type = 'Doculite'

    def __init__(self, id, title="No title", desc=''):
        self.id = id
        self.title = title
        self.desc = desc
        self.tags = PersistentList()
        self.default_catalog = 'portal_catalog'

    def add_tags(self, tags):
        self.tags.extend(tags)

    def Subject(self):
        return self.tags

    def indexObject(self):
        self.reindex_object()

Из внешнего метода я делаю это:

def doit(self):
    pc = self.portal_catalog
    res1 = pc.searchResults()
    o1 = self['doc1']
    o1.add_tags(['test1', 'test2'])
    o1.reindex_object()
    res2 = pc.searchResults()
    return 'Done'

Я очищаю каталог и запускаю свой внешний метод. Мой объект не попадает в каталог. Но на вкладке индексов, когда я просматриваю предметный указатель, я вижу свой элемент контента в списке со значениями. И res1 и res2 и пусто.

Почему мой элемент контента не отображается внутри searchResuts () каталога?

Ответы [ 5 ]

2 голосов
/ 19 февраля 2012

Plone - это полнофункциональная система управления контентом, если вы хотите чего-то худого, это, вероятно, неправильный выбор (возможно, попробуйте Pyramid.)

Чтобы ваш тип контента был полной частью Ploneсайт должен соответствовать ряду требований на уровнях Zope2, CMF и Plone.plone.app.content.item.Item о простейшем базовом классе, который вы можете получить для элемента контента для сайта Plone, хотя более простой базовый класс сам по себе не сделает экземпляры вашего типа контента более «худыми» -Экземпляр класса в Python - это, по сути, просто dict и указатель на его класс.

Большая часть работы над просмотром страницы будет представлять различные функции пользовательского интерфейса сайта.Рендеринг основанных на схеме форм добавления / редактирования каркасов, таких как Archetypes и Dexterity, также относительно дорог.

Я бы потратил немного времени на профилирование вашего приложения с использованием одной из поддерживаемых систем типов контента, прежде чем уделять время созданию собственного.

0 голосов
/ 07 мая 2019

CatalogAware будет удален в Zope 4 и больше не сможет использоваться.

ср https://github.com/zopefoundation/Products.ZCatalog/issues/26

0 голосов
/ 20 февраля 2012

Plone требует, чтобы каждый объект содержимого предоставлял индекс "allowRolesAndUsers" для возврата объекта в searchResults.

Вероятно, есть фрагмент кода zcml, который включит это для моего типа содержимого.Но я смог заставить все работать, добавив другой метод следующим образом:

def allowedRolesAndUsers(self):
    return ['Manager', 'Authenticated', 'Anonymous']
0 голосов
/ 19 февраля 2012

Вам необходимо зарегистрировать свой тип в каталоге мультиплексора. Посмотрите конфигурацию в zmi -> archetypes_tool.

Я не уверен, но вам также может понадобиться регистрация portal_type также ...

Однако, как сказал Лоуренс, вам лучше использовать одну из существующих платформ типов контента, если вы хотите иметь возможность каталогизировать свои данные с помощью каталога портала plone. Если вы можете иметь дело с отдельным каталогом, посмотрите на repoze.catalog.

0 голосов
/ 19 февраля 2012

Чтобы увидеть ваши объекты на вкладке "Каталог" в portal_catalog, у ваших объектов должен быть метод "getPhysicalPath()", который возвращает кортеж, представляющий их путь (например, ('','Plone','myobject')). Также попробуйте использовать это:

from Products.CMFCore.CMFCatalogAware import CMFCatalogAware

как базовый класс.

...