Переопределить канонический объект в Plone - PullRequest
4 голосов
/ 21 апреля 2011

Я хотел бы отобразить вид объекта вместо другого объекта, но при этом сохранить канонический путь как тот, который был изначально пройден, чтобы хлебные крошки, вкладки объектов и т. Д. Все действовали одинаково.

Я знаюкак визуализировать другой объект вместо канонического, но кажется почти невозможным переопределить то, что используется для канонического объекта, если я, возможно, не переопределю метод «canonical_object» в представлении браузера «plone_context_state».

Вот код, который у меня есть: вызов метода для рендеринга другого объекта:

item = aq_base(default_item).__of__(self.context)
layout = item.getLayout() or item.getDefaultLayout()
try:
    return aq_acquire(item, layout)(*args, **kwargs)
except AttributeError:
    try:
        return getMultiAdapter((item, self.request), name=layout)(*args, **kwargs)
    except: pass

return super(DefaultItemEnabledView, self).__call__(*args, **kwargs)

Теперь можно ли сделать канонический объект, используемый для подведения, первоначально пройденным, так что крошки, вкладки объектов и т. д. применяются соответствующим образом?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

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

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

Если у вас нет сценария использования, который требует работы всех возможных макетов, вы можете просто создать собственное представление для своего канонического объекта, которое просто хорошо визуализирует содержимое для другого объекта.Многие представления для контента уже включают макросы, которые вы можете использовать повторно, например.Взгляните на skins/plone_content/folder_full_view_item.pt для примера шаблона, который использует такие макросы для визуализации элементов в папке для шаблона folder_full_view.

1 голос
/ 21 апреля 2011

bda.contentproxy был продуктом, который делает это, но имейте в виду ... это очень сложная задача, полная проблем за углом

...