For Dexterity content types I was able to achieve that by registering an adapter to zope.publisher.interfaces.browser.IBrowserRequest
, overriding the default adapter plone.dexterity.browser.traversal.DexterityPublishTraverse
.
In traversal.py
:
from plone.dexterity.browser.traversal import DexterityPublishTraverse
from zope.component import adapter
from zope.publisher.interfaces.browser import IBrowserRequest
@adapter(IMyContentType, IBrowserRequest)
class MyContentTypePublishTraverse(DexterityPublishTraverse):
def publishTraverse(self, request, name):
u"""Override `FSConnectorPublishTraverse`."""
try:
return DexterityPublishTraverse.publishTraverse(self, request, name)
except AttributeError:
# Do your thing here.
And in configure.zcml
:
<adapter factory=".traversal.MyContentTypePublishTraverse" />