用于通过uid

时间:2017-10-23 14:28:44

标签: plone dexterity plone-4.x archetypes

我有一个Plone 4网站,我目前使用以下方法在用户可编辑的HTML内容中嵌入对象(例如图片,视频,表格等):

  • 我有一个自定义transform浏览器,该浏览器接收HTML文本并转换所有通过UID引用元素的aimg元素(即具有href="…/resolveuid/abc123…"的元素或src="…/resolveuid/abc123…")。
  • 我的视图模板会读取text字段并让该浏览器transform;
  • 浏览器有一个Python词典TYPE2TEMPLATE,其中包含portal_type个键和template_id值;
  • 每个aimg
  • 由UID引用一个对象,
    • 该对象由o = brain._unrestrictedGetObject()
    • 提取
    • 模板ID t_id取自TYPE2TEMPLATE dict
    • "嵌入"方法由method = o.unrestrictedTraverse(t_id)
    • 获取
    • 调用该方法(在某些情况下使用一些关键字参数),结果 - 包含在一个顶级HTML元素中 - 替换" raw" aimg元素。

既然我正在开发一个额外的自定义包(其中包含新的对象类型,现在使用Dexterity),我想知道是否还有更多的" plonish"办法。例如,有一些embed动作吗?

1 个答案:

答案 0 :(得分:2)

我不知道一个包装是否也是如此,你所做的一切听起来对我有用; - )

我只会使用https://pypi.python.org/pypi/plone.outputfilters而不是transform BrowserView。

如果可以明确标记不应自动嵌入的链接(例如通过span.noEmbed a.internal-link选择器),这可能会成为一个有用的插件。

我想对于portal_type =='文件',您还需要检查mimetype以确定您是否嵌入了视频文件或其他内容......

我知道在plone网站之外嵌入内容的其他产品(例如,collective.embedly)

另一种方法是使用tinymce插件在编辑页面的html体时生成正确的嵌入html(我个人不会这样做,因为有不同的小版本支持4.3和5.0而我们“我不确定将来是否会将其替换为默认编辑器”