跳转到主要内容

Plone插件,用于添加AJAX导航

项目描述

为Plone站点添加AJAX导航。

这可能是添加AJAX导航不是最先进或最前沿的方式;对于Plone 5,我听说基于 plone.patternslib,基于 patternslib

对于 Volto 站点,由于使用 React.js,可能整个基于jQuery的处理都已经过时。

在我写作的时候,由于我仍在使用Plone 4.3,所以没有这些选项。因此,我需要一个可行的解决方案。根据质量,我将在跳跃到Plone 5时切换到某个类似Plone 5的解决方案,或者我会坚持使用自己的。

总体思路是

  • 捕获页面上每个 a 元素的 click 事件。

  • 对于某些链接,将进行特殊检查以继续执行标准行为,即以标准方式加载目标;这包括

    • 当前站点之外的链接目标(给出了另一个主机名)

    • 管理页面(例如以 manage_ 开头)

    • 其他不加载导航链接等或通过AJAX加载时不会工作或其他页面

    • 具有某些属性(data-fullpage-only="true")的锚点元素

    • 尚未具有适合嵌入视图的上下文的视图

    对于此类链接目标,此函数将简单地返回 true,并且页面将以标准方式加载。

  • 如果检查函数得出“让我们通过AJAX加载目标”的结论,它将向一个.../@@ajax-nav地址发送请求,该地址将返回所有必要的JSON数据;使用结果,它将在页面上查找某些元素并尝试更新它们

    • #content(默认配置下content的目标)

    以及可选的

    • 面包屑

    • 其他页面元素,如上下文特定的搜索表单。

    它还将相应地设置页面URL和标题(分别来自JSON回复的@url@title键),允许浏览器记录历史。

  • 如果尝试的URL无法返回可用的JSON答案,或者目标URL因其他原因不合适(例如,页面局部或离开当前站点),则将正常加载目标页面(即,加载整个页面)。

  • 所有超链接将继续在关闭JavaScript的情况下工作;当然,打开JavaScript时页面加载速度会更快。

功能

  • 为每个a元素尝试最多两个URL(如果目标URL以“/”结尾,或者如果最终路径元素可以被认为是视图方法名称而不是对象ID,则只有一个)

  • 可以使用Plone注册表进行配置

    • a元素的target属性默认按照最小惊讶原则处理。然而,鼓励您忽略它们,因为不建议使用此属性。

    • 默认情况下,a[target]元素通过添加一个noopenerrel值来保护。

待办事项

  • 使用Web Worker

  • 使此包RequireJS感知。

  • 提供对更多搜索配置的支持。

  • 从要替换的内容中选择值,并重新插入它们(例如,上下文特定搜索表单中的搜索表达式)。

示例

此插件目前正在开发中,尚未在公共互联网网站上使用。

文档

最终用户的完整文档可以在“docs”文件夹中找到。

安装

通过将其添加到您的buildout中安装visaplan.plone.ajaxnavigation

[buildout]

...

eggs =
    visaplan.plone.ajaxnavigation

然后运行bin/buildout

或者,更有可能的是

将其添加到您的包的依赖项中,例如在您的setup.py文件中。

您需要为您的内容类型提供@@embed视图;理想情况下,您可以使用您现有的BrowserView类。通常,复制您的view模板并注入一个ajax_load=1请求变量就足够了。

问题

“为什么你不简单地自动在每个BrowserView代码中注入那个ajax_load变量?”

是的,我们已经这样做了。

有一个简单的.views.AjaxLoadBrowserView类负责这个,还有一些子类。

“为什么你不丢弃那个embed视图名称,而简单地使用view,并注入ajax_load=1?”

我们这样做作为一个后备选项。但是,我们的一些页面根本不按这种方式工作(例如,因为一些必要的脚本在METAL槽中加载,如果发现ajax_load为真,则该槽被丢弃),所以我们需要能够明确。

因此,如果存在,将使用..._embed视图,然后作为后备,标准视图将跳入。

visaplan.plone.ajaxnavigation包是为了可能没有完全做到位的站点而开发的即插即用解决方案。如果你的站点在注入ajax_load后运行正常,你将需要进行更少的自定义工作来使其运行。

很可能有多个方面可以做得更好。欢迎贡献力量。

贡献

支持

如果你遇到问题,请告诉我们;请使用上面提到的问题追踪器

许可证

本项目采用GPLv2(或更高版本)许可。

贡献者

变更日志

1.0.0.3 (2020-03-06)

  • 由于定制问题导致的即时修复(仅限内部使用)。

[tobiasherp]

1.0.0 (2020-03-06)

  • 首次发布。 [tobiasherp]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源代码分发

visaplan.plone.ajaxnavigation-1.0.0.tar.gz (92.1 kB 查看哈希)

上传时间

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面