通过 uid 嵌入对象的 Plone 最佳实践
Plone best practice for embedding of objects by uid
我有一个 Plone 4 网站,我目前使用以下方法在用户可编辑的 HTML 内容中嵌入对象(例如图像、视频、表格……):
- 我有一个自定义
transform
浏览器,它接受 HTML 文本并转换所有 a
和 img
元素,这些元素通过 UID 引用元素(即,具有href="…/resolveuid/abc123…"
或 src="…/resolveuid/abc123…"
).
- 我的视图模板读取
text
字段并让浏览器 transform
它;
- 浏览器有一个 Python 字典
TYPE2TEMPLATE
,它有 portal_type
个键和 template_id
个值;
- 对于每个通过 UID 引用对象的
a
或 img
,
- 对象由
o = brain._unrestrictedGetObject()
获取
- 模板 id
t_id
取自 TYPE2TEMPLATE
dict
- "embed" 方法由
method = o.unrestrictedTraverse(t_id)
获取
- 该方法被调用(在某些情况下使用一些关键字参数),结果 - 包含在一个顶部 HTML 元素中 - 替换 "raw"
a
或 img
元素.
现在我正在开发一个额外的自定义包(其中包含新的对象类型,现在使用 Dexterity),我想知道是否还有更多 "plonish" 方法。例如,是否有一些 embed
操作?
我不知道有一个包可以做同样的事情,你所做的对我来说听起来很正常 ;-)
我只是会使用 https://pypi.python.org/pypi/plone.outputfilters 而不是您的 transform
BrowserView。
如果可以明确标记不应自动嵌入的链接(例如通过 span.noEmbed a.internal-link
选择器),这可能会成为一个有用的插件。
我想 portal_type=='File' 你还需要检查 mimetype 来决定你是嵌入视频文件还是其他东西...
我知道在您的克隆网站之外嵌入内容的其他产品(例如 collective.embedly)
另一种方法是在编辑页面的 html-body 时使用 tinymce 插件生成正确的嵌入 html(我个人不会走这条路,因为有不同的tiny 版本支持 4.3 和 5.0,我们不确定未来是否会取代 tiny 作为默认编辑器)
我有一个 Plone 4 网站,我目前使用以下方法在用户可编辑的 HTML 内容中嵌入对象(例如图像、视频、表格……):
- 我有一个自定义
transform
浏览器,它接受 HTML 文本并转换所有a
和img
元素,这些元素通过 UID 引用元素(即,具有href="…/resolveuid/abc123…"
或src="…/resolveuid/abc123…"
). - 我的视图模板读取
text
字段并让浏览器transform
它; - 浏览器有一个 Python 字典
TYPE2TEMPLATE
,它有portal_type
个键和template_id
个值; - 对于每个通过 UID 引用对象的
a
或img
,- 对象由
o = brain._unrestrictedGetObject()
获取
- 模板 id
t_id
取自TYPE2TEMPLATE
dict - "embed" 方法由
method = o.unrestrictedTraverse(t_id)
获取
- 该方法被调用(在某些情况下使用一些关键字参数),结果 - 包含在一个顶部 HTML 元素中 - 替换 "raw"
a
或img
元素.
- 对象由
现在我正在开发一个额外的自定义包(其中包含新的对象类型,现在使用 Dexterity),我想知道是否还有更多 "plonish" 方法。例如,是否有一些 embed
操作?
我不知道有一个包可以做同样的事情,你所做的对我来说听起来很正常 ;-)
我只是会使用 https://pypi.python.org/pypi/plone.outputfilters 而不是您的 transform
BrowserView。
如果可以明确标记不应自动嵌入的链接(例如通过 span.noEmbed a.internal-link
选择器),这可能会成为一个有用的插件。
我想 portal_type=='File' 你还需要检查 mimetype 来决定你是嵌入视频文件还是其他东西...
我知道在您的克隆网站之外嵌入内容的其他产品(例如 collective.embedly)
另一种方法是在编辑页面的 html-body 时使用 tinymce 插件生成正确的嵌入 html(我个人不会走这条路,因为有不同的tiny 版本支持 4.3 和 5.0,我们不确定未来是否会取代 tiny 作为默认编辑器)