Zope外部编辑器

Products.ExternalEditor的Python项目详细描述


Zope外部编辑器

zope外部编辑器是将zope与 客户端工具。它具有以下功能:

  • 直接从ZMI本地编辑对象。
  • 使用任何图形编辑器应用程序,这些应用程序可以从 命令行,包括:emacs、gvm、xemacs、nedit、gimp等。
  • 自动将更改保存回zope而不结束编辑 会话。
  • 通过将任何客户端编辑器应用程序与任何zope对象关联 元类型或内容类型。文本和二进制对象内容都可以是 编辑<
  • 在编辑对象时锁定它们。自动解锁 编辑会话结束时。
  • 可以自动添加文件扩展名以改进语法突出显示或 文件类型检测。
  • 适用于基本auth、cookie auth和zope版本。凭据是 自动传递给帮助程序应用程序。不需要 重新验证。
  • 支持https(需要openssl)

Zope版本兼容性

对于Zope 4,请使用2.0版及更高版本。对于之前的zope版本 4.0,请使用1.1分支的externaleditor版本。

使用它

使用该应用程序就像使用浏览器后的zmi一样简单 已配置(请参阅安装说明)。编辑对象 在外部,只需单击zmi中对象旁边的铅笔图标。 将使用编辑器应用程序下载并打开对象 已选择(第一次选择编辑器时将提示您)。

像编辑其他文件一样编辑对象。当您将更改保存到 你的编辑,他们会自动上传回zope 背景。当对象在编辑器中打开时,它被锁定在zope中。 以防止并发编辑。当你结束编辑工作时 关闭编辑器)对象已解锁。

工作原理

好吧,这听起来有点太好了,不是吗?那他妈的怎么样 不管怎样都管用?首先我给你一个框图:

+------------+     +------------+     +---------+        +------+
| Editor App | <-- | Helper App | <-- | Browser | <-/ /- | Zope |
+------------+     +------------+     +---------+        +------+
            ^       ^     ^                                ^
             \     /       \                              /
              v   v         -----------------------/ /----
             -------
            / Local \
            \  File /
             -------

现在让它工作的关键是解决编辑 无法了解zope,只能处理本地文件。另外,还有 没有标准的方式与编辑沟通,所以 频道可以是包含对象内容或代码的本地文件。

当你下载的时候让浏览器启动你的编辑器是很简单的 浏览器中的特定数据类型。但那对你没什么好处, 因为一旦数据被下载,浏览器就不再涉及自身。它 只需创建一个临时文件并触发注册的应用程序,传递 它是文件路径。一旦编辑器运行,它只知道本地 文件,但不知道其来源。

为了解决这个问题,我开发了一个助手应用程序,其任务是 本质上是双重的:

  • 为给定的zope对象确定要启动的正确编辑器
  • 保存更改时将数据返回zope

所以,让我们一步一步地看看它是如何工作的:

  1. 点击zope中的外部编辑器链接(铅笔图标) 管理界面。
  2. 服务器上的产品代码创建一个响应,该响应封装 必要的元数据(url、元类型、内容类型、cookies等)和 zope对象的内容,可以是文本或二进制数据。这个 响应的内容类型为"application/x-zope-edit"。
  3. 浏览器接收请求,并找到我们的helper应用程序 注册"application/x-zope-edit"。它保存响应数据 本地到磁盘并生成助手应用程序来处理它。
  4. helper应用程序读取其配置文件和响应数据文件。这个 分析文件中的元数据将内容复制到新的 临时文件。适当的编辑器程序基于 数据文件和配置。
  5. 编辑器作为helper应用程序的子进程启动,并将 包含内容数据的文件。
  6. 如果是这样配置的,helper应用程序将向zope发送一个webdav锁请求 以锁定对象。
  7. 每隔一段时间(如果有配置的话),helper应用就会统计内容文件 看看它是否被改变了。如果是,它会发送一个http put请求 返回到包含新数据的zope。
  8. 关闭编辑器后,将再次检查内容文件,并 已上载(如果已更改)。然后向zope发送一个webdav解锁请求。
  9. 助手应用程序退出。
  10. < > >

配置

helper应用程序支持几个配置选项,每个选项 可以在对象元类型、内容类型的任意组合中触发 或域。这允许您为不同的 zope对象和内容的类型,甚至不同的服务器。这个 配置文件存储在文件"~/.zope external edit"(Unix)或 "~zopeedit.ini"(窗口)。如果在 助手应用程序启动时,会在您的家中创建一个默认配置文件 目录。

配置文件遵循标准的python configparser格式, 这与Windows中的旧.ini文件格式非常相似。文件 由以下格式的节和选项组成:

[section 1]option1=valueoption2=value[section 2]...

选项

配置文件所有部分的可用选项是:

< DL> 编辑器
用于调用编辑器应用程序的命令行或插件名称。论 windows,如果没有找到您编辑的对象的编辑器设置,则 helper应用程序将在文件类型注册表中搜索适当的编辑器 基于对象的内容类型或文件扩展名(可以是 使用下面的扩展选项指定)。默认情况下,文件路径 将要编辑的本地文件的附加到此命令行。到 在命令中间插入文件路径,对unix使用"$1" 分别为Windows和%1。
保存间隔
(float)帮助程序检查 已编辑文件以进行更改。
使用锁
(1或0)是否使用WebDAV锁定。用户编辑必须具有 正确的WebDAV相关权限使其正常工作。
总是借用锁
(1或0)启用"使用锁定"时,此功能将抑制警告 尝试编辑已锁定的对象时。启用时, 外部编辑器将始终"借用"现有的锁令牌,而不是 自己上锁。当使用cmfstaging进行 实例。如果省略,此选项默认为0。
清除文件
(1或0)是否删除创建的临时文件。警告温度 来自浏览器的文件包含身份验证信息和 因此,将此值设置为0是一种安全风险,特别是在共享 机器。如果设置为1,则最早删除该文件 机会,在编辑诞生之前。设置为0进行调试 只.
分机
(文本)要添加到内容文件的文件扩展名。允许更好的 处理图像并可以改进语法突出显示。
温度方向
(path)存储正在编辑的对象数据的本地副本的路径。默认值 到操作系统临时目录。 注意:此设置没有明显的 对Windows的影响 8^(
长文件名
(1或0)是否包括对象的整个路径,包括 文件名中的主机名(默认)或对象的ID 正在编辑。在您的 编辑,以及不喜欢长名字的编辑。
文件名分隔符 (字符串)用于分隔长路径元素的字符 外部编辑器使用的文件名。默认为逗号(,)。这必须 在柏拉图的文件名中使用合法字符(即,不要 使用路径分隔符!)。如果 "长文件名"设置为0。

章节

配置文件的部分指定对象的类型和 下面的选项适用于的内容。

只有一个强制部分"[常规]",它应该定义所有 以上选项中没有默认值的。如果没有其他 节定义给定对象的选项,常规设置为 使用。

其他节可以应用于特定域、内容类型或 元类型。由于对象可以具有所有这些属性,因此选项是 按此优先顺序应用:

  1. 按整个内容类型列出的选项(例如, [内容类型:文本/html] )。
  2. 按主要内容类型列出的选项(例如, [内容类型:text/*] )。
  3. 按zope元类型列出的选项(例如, [元类型:文件] )。
  4. 按域列出的选项(例如, [domain:www.mydomain.com] )。几个 如果需要,可以为每个域级别添加节。
  5. 一般选项(即 [一般] )。
  6. < > >

    此方案允许您按内容类型指定扩展名, 编辑器(按元类型)、锁定设置(按域)和其他 给定对象的"常规"下的选项。

编辑器插件

为了更紧密的客户端集成,外部编辑器有一个插件系统 它可以直接与支持的应用程序交互。

在windows上,这通常意味着使用com调用应用程序,打开 内容文件,等待用户保存并关闭该文件。因为 每个应用程序都有不同的远程脚本功能和api, 特定于编辑器的插件必须针对每个支持的 应用程序和平台。

此系统允许外部编辑器有效连接到运行 不重新启动应用程序,因此完全支持MDI 环境。以下应用程序当前支持插件:

Application       Platform    Plugin Module Name(s)
===================================================
HomeSite          Windows     homesite5, homesite
Dreamweaver       Windows     dreamweaver
Photoshop         Windows     photoshp, photoshop
MS Word           Windows     winword, word
MS Excel          Windows     excel
MS Powerpoint     Windows     powerpnt, powerpoint

外部编辑器将尝试在 使用常规编辑器控件方法。它通过匹配 编辑器中应用程序可执行文件(sans扩展名)的名称 带有可用插件的命令行。

因为插件不需要编辑器应用程序的路径来工作, 您只需在 配置文件(如果需要)。例如,为所有用户指定photoshop 映像文件,使用将以下部分添加到配置文件 (windows上的zopeedit.ini):

[content-type:image/*]
editor=photoshop

这只是一个快捷方式,指定完整的应用程序路径将 尽可能使用插件。

插件注释

< DL>
photoshop
photoshop的com api非常有限,外部编辑器无法检测到 在退出整个应用程序(它 仍然可以检测到保存)。因此,您可能需要关闭DAV锁定 (使用锁=0)或借用锁(始终借用锁=1)。
梦织女
外部编辑器无法检测您何时完成对单个 文件。使用Dreamweaver编辑的对象将保持锁定在服务器上 直到退出应用程序。与上面的photoshop一样,您可能需要 关闭Dreamweaver的锁定。

如果你最喜欢的编辑器需要一个插件,因为一般的支持是 不够好,请告诉我。记住我必须能够 运行应用程序的副本以便为其开发插件。所以, 除非应用程序是免费的,或者可以下载完整的演示 我帮不了什么忙。插件不难编写,我 鼓励哟你要为你最喜欢的编辑写一篇,从阅读开始 一个现存的。我很高兴将第三方插件与 发行版。

权限

外部编辑由"使用外部编辑器"权限控制。 具有此权限的用户可以从Editable启动外部编辑器 物体。为了保存更改,用户将需要其他权限 适合他们正在编辑的对象。

如果用户希望使用内置的锁定支持,则必须具有 "WebDAV访问"、"WebDAV锁定项"和"WebDAV解锁项"权限 对于他们正在编辑的对象。

如果zope中没有设置这些权限,那么helper应用程序将 从Zope接收未经授权的错误,并将其呈现给用户。

与外部编辑器集成

zope中的外部编辑器产品安装了一个全局可用的对象 可以格式化可通过ftp/dav访问的对象以供帮助程序使用 申请。您可以在 拥有自己的内容管理应用程序。

假设在名为 "我的东西"。查看对象的URL为:

http://zopeserver/my_stuff/document

启动此文档外部编辑器的URL为:

http://zopeserver/my_stuff/externalEdit_/document

现在,如果你习惯于将视图附加到 URL的结尾。因为在python上工作需要externaledit 脚本和页面模板,它们将 URL在其后面,您必须将调用放到 externaledit 直接在要编辑的对象之前。你可以在ZPT用 页面模板中的一些tal,如:

<ahref='edit'attributes='href
   string:${here/aq_parent/absolute_url}/externalEdit_/${here/getId}'>
   Edit Locally
</a>

另外,还可以传递要编辑的对象的路径 当您调用其index_html方法时,直接指向 externaledit_ 对象。 它可以通过url直接调用,也可以通过python脚本调用。 externaledit\u 将返回要编辑的对象的正确响应数据。 您可以通过url来调用它:

http://zopeserver/externalEdit_?path=/my_stuff/document

或通过python:

returncontext.externalEdit_.index_html(context.REQUEST,context.RESPONSE,path='/my_stuff/document')

将外部编辑器与已经使用dav的cms集成时 锁,默认情况下允许用户借用服务器上的锁 显示确认对话框后。尽管你能做到 通过在外部编辑器中指定"always_borrow_locks=1"自动 配置文件,当 使用服务器。为了方便这一点,可以指定锁 应在URL中自动借用(0.7中新增),即:

+------------+     +------------+     +---------+        +------+
| Editor App | <-- | Helper App | <-- | Browser | <-/ /- | Zope |
+------------+     +------------+     +---------+        +------+
            ^       ^     ^                                ^
             \     /       \                              /
              v   v         -----------------------/ /----
             -------
            / Local \
            \  File /
             -------
0

外部编辑器还定义了一个全局方法,您可以调用它来插入 适当对象的铅笔图标链接。方法自动检查 如果对象支持外部编辑,并且用户是否 "外部编辑器"对该对象的权限。如果两者都是真的,它就会返回 插入外部编辑器图标链接的HTML代码。否则它会返回 空字符串。

方法是"externaleditlink(object)"。对象参数是 对象以创建链接(如果适用)。下面是一些示例页面 插入指向当前文件夹和 适当的外部编辑器图标:

+------------+     +------------+     +---------+        +------+
| Editor App | <-- | Helper App | <-- | Browser | <-/ /- | Zope |
+------------+     +------------+     +---------+        +------+
            ^       ^     ^                                ^
             \     /       \                              /
              v   v         -----------------------/ /----
             -------
            / Local \
            \  File /
             -------
1

结论

我希望你喜欢使用这个软件。如果你有什么意见和建议 或者要报告错误,请向作者发送电子邮件:

凯西·邓肯

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java在二维数组中获取所有值的组合   java如何在Heroku上运行Flyway迁移?   当Tomcat作为windows服务启动时,其他计算机无法使用java Tomcat应用程序   java SPNEGO获取用户详细信息   java多线程SaxParser解析多个xml文件   如何将十六进制字符串转换为字节。JAVA   java Android:如何在MapBox中添加自定义标记?   java如何从Android广播UDP数据包?   java驱动程序。executeScript()返回简单javascript的NullPointerException   java我们如何在网站上从系统上传文件?   java在JTextArea中剪切和粘贴   java PrimeFacesRequestContext。getCurrentInstance()。为SelectOne菜单重置   java在安卓中动态存储运行时变量   java如何检测“文本内容中发现无效字符”   Java数据结构:错误“无法访问LinkedList”   java合并排序(根据频率排序单词)   java为什么/如何将整数设置为1使while循环工作?   java Maven编译器插件抱怨“未找到SLF4J提供程序”   jakarta ee java锁定文件   java Hibernate会话。update()与update查询?