跳转到主要内容

一个简单的jQuery Plone组件,用于隐藏电子邮件地址以防止垃圾邮件。

项目描述

Zest emailhider

本文档描述了zest.emailhider包。

https://secure.travis-ci.org/zestsoftware/zest.emailhider.png?branch=master

依赖关系

此包依赖于jquery.pyproxy以集成Python代码与jQuery代码。

概览

本包提供了一种使用JavaScript隐藏电子邮件地址的机制。或者更准确地说:使用此包,您可以将电子邮件地址默认隐藏,这样它们就不会出现在HTML中;然后通过JavaScript获取并显示地址。

对于您网站上的每个内容项,您都可以有一个电子邮件地址,因为我们通过UID查找对象的电子邮件地址。对于想要这样做的对象,您应该注册一个简单的适配器到IMailable接口,这样我们可以从这个适配器请求一个 email 属性和一个 UID 方法。'emailhider' 视图提供用于生成占位链接的功能。

对象显示一个具有 hidden-email 类、uid rel 属性以及设置为对象UID的 email-uid-<some uid> 类的占位链接;当页面加载时,将运行一些jQuery来请求所有这些链接,将它们替换为该对象的‘mailto’链接。使用这种机制,电子邮件地址在初始页面加载时不可见,并且需要JavaScript才能看到——因此,对于垃圾邮件发送者来说,要收集它们要困难得多。

特殊情况:当UID包含‘email’或‘address’时,显然这不是一个真正的UID。在这种情况下,我们不对IMailable接口进行任何操作,但我们尝试从门户的属性表中获取具有此‘uid’的属性。主要用例当然是‘email_from_address’,但您也可以添加其他地址,如‘info_email’。如果您想在网站的任何静态组件中显示email_from地址,请使用以下HTML代码

<a class="hidden-email email-uid-email_from_address"
   rel="email_from_address">
   Activate JavaScript to see this address.</a>

您可以通过加载 test_emailhider 页面来查看此功能是否正常工作。

为您自己的包的说明

如果您想在自己的包中,为自己的内容类型使用此功能,您需要做什么?

首先,您需要使您的内容类型能够直接或通过适配器适应IMailable接口。

如果您的内容类型已经具有 UID 方法(如所有Archetypes内容类型)和一个 email 属性,则可以像这样使用一些zcml

<class class=".content.MyContentType">
  <implements interface="zest.emailhider.interfaces.IMailable" />
</class>

如果没有,则您需要为您的内容类型注册一个适配器,该适配器具有此方法和属性。例如,像这样

from zope.component import adapts
from zope.interface import implements
from zest.emailhider.interfaces import IMailable
from your.package.interfaces import IMyContentType

class MailableAdapter(object):
    adapts(IMyContentType)
    implements(IMailable)

    def __init__(self, context):
        self.context = context

    def UID(self):
        return self.context.my_special_uid_attribute

    @property
    def email(self):
        return self.context.getSomeContactAddress()

其次,在您的内容类型的页面模板中,您需要添加代码来显示占位文本,而不是实际的电子邮件地址

<span>For more information contact us via email:</span>
<span tal:replace="structure context/@@emailhider" />

请注意,如果您希望在没有安装 zest.emailhider 时仍能使用此功能,可以使用以下代码

<span tal:replace="structure context/@@emailhider|context/email" />

这将在 zest.emailhider 不可用的情况下显示未受保护的纯文本电子邮件。当您使用 zest.emailhider 2.6 或更高版本时,这会更好一些,因为我们引入了自己的浏览器层:只有当 zest.emailhider 实际安装在 Plone 站点中时,@@emailhider 页面才可用。这也使得在单个 Zope 实例中拥有多个 Plone 站点且只想在一个站点中使用 emailhider 时,使用 zest.emailhider 变得更加安全。

请注意,模板中生成的代码非常小,因此您也可以查看 zest.emailhider 中的页面模板并复制一些代码,然后根据您的需求进行修改。只要您的对象可以在 uid_catalog 中通过UID找到,并且您的内容类型可以适配到 IMailable 以获取电子邮件属性,一切都应该运行正常。

关于旧版本中 KSS 使用的说明

旧版本(包括1.3)使用KSS而不是jQuery。由于我们的功能也应该对匿名用户有效,我们必须使KSS公开可访问。因此,所有需要的KSS JavaScript都为匿名用户加载。

我们无法自动撤销这一操作,因为该包没有方法知道是否需要其他包进行相同的更改,或者是否由管理员出于其他有效原因进行更改。因此,您应该在ZMI中的JavaScript注册表中检查是否需要撤销更改,以便匿名用户不再接收到kss JavaScript,因为它们不再需要。

以下是在++resource++kukit.js条件字段的正常行(所有在一行)

python: not
here.restrictedTraverse('@@plone_portal_state').anonymous() and
here.restrictedTraverse('@@kss_devel_mode').isoff()

以下是在++resource++kukit-devel.js条件字段的正常行(所有在一行)

python: not
here.restrictedTraverse('@@plone_portal_state').anonymous() and
here.restrictedTraverse('@@kss_devel_mode').ison()

兼容性

版本3.0应在Plone 4.1、4.2、4.3、5.0上工作。

对于较旧的Plone版本,请坚持使用2.x线。截至编写时的最新版本是2.7。

请注意,在Plone 5.0中,我们并不完全现代:我们在旧的门户工具中注册我们的CSS和JavaScript,而不是在新资源注册表中。因此,它们最终会出现在Plone旧捆绑包中。

zest.emailhider包的历史

3.1.3 (2018-02-20)

  • 将“请求中未找到任何uids”改为警告,而不是错误。我看到机器人请求这个URL。[maurits]

3.1.2 (2017-03-08)

  • 不要将我们的JavaScript内联渲染。当它包含在404页面或其他非20x页面中时会导致显示问题:在Products.ResourceRegistries中失败断言,导致返回的HTML带有javascript类型。这似乎是任何内联脚本的可能问题。添加了此升级步骤。[maurits]

3.1.1 (2017-02-24)

  • 修复了导致即使没有任何电子邮件也会揭示请求的JavaScript错误。[maurits]

3.1 (2016-11-02)

  • 一次性查询和揭示所有电子邮件。如果您将员工内容类型连接到zest.emailhider,并且您有一个显示五十名员工的页面,以前我们会触发五十个Ajax请求。现在我们将所有内容汇集到一个请求中。[maurits]

3.0 (2015-10-03)

  • 添加了Travis徽章。[maurits]

  • 通过从注册表中读取plone.email_from_address来支持Plone 5。这失去了与Plone 4.0的兼容性。我们首先尝试从注册表中读取任何电子邮件(包括您的附加电子邮件),并在plone.之前添加,然后查找门户根上的属性。[maurits]

  • 在我们的JavaScript中使用$而不是jq。现在它不需要jquery-integration.js即可工作。这失去了与Plone 3的兼容性。[maurits]

  • 添加了test_emailhider页面,该页面隐藏门户email_from_address,因此您可以轻松地进行测试。当您禁用您的JavaScript时,您不应看到电子邮件地址。[maurits]

2.7 (2012-09-12)

  • 迁移到github。[maurits]

2.6 (2011-11-11)

  • 添加了MANIFEST.in,以便将我们生成的.mofiles添加到源分发中。[maurits]

  • 只为我们的新浏览器层注册我们的浏览器视图。为此添加了一个升级步骤。这使得其他包更容易对zest.emailhider有条件依赖。[maurits]

2.5 (2011-06-01)

  • 更新了对“jq_reveal_email”的调用,以使用站点根部的版本以避免安全错误。[vincent]

2.4 (2011-05-10)

  • 更新了jquery.pyproxy依赖性,至少为0.3.1,并删除了现在不再需要的clean_string调用。[maurits]

2.3 (2010-12-15)

  • 不仅查找email_from_address的虚构uid作为门户属性,而且查找任何包含“email”或“address”的虚构uid。当找不到虚构或真实uid的电子邮件地址时记录警告。[maurits]

2.2 (2010-12-14)

  • 增加了一个升级步骤,因为我们确实需要在升级时应用我们的javascript注册表。实际上,在这一点上,在portal_quickinstaller中重新安装实际上是可以的,我们也可以将其定义为升级步骤,但现在先不考虑这个。

2.1 (2010-12-14)

  • 增加了两个升级步骤,通过安装jquery.pyproxy并运行我们的kss步骤(仅删除我们不再需要的kss文件)来升级到1.x。

2.0 (2010-12-09)

  • 使用jquery.pyproxy代替KSS。这使得匿名用户的页面加载量大大减少。

1.3 (2009-12-28)

  • 使reveal_email始终可用,因为当我们要隐藏全局的‘email_from_address’时,它应该始终可以工作。如果我们有一个真实的uid目标,那么尝试将目标适配到IMailable接口,如果失败,我们只是静默地什么也不做。

1.2 (2008-11-19)

  • 使用kss.plugin.cacheability并将其添加为依赖项。

  • 允许将uid设置为email_from_address。

  • 将KSS修改为使用load事件而不是click事件 - 现在它要么透明地工作,要么要求用户激活JS。

1.1 (2008-10-24)

  • 增加了翻译并修改了模板以使用它们。

  • 项目的初始创建。

1.0 (2008-10-20)

  • 项目的初始创建。

项目详情


下载文件

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

源分布

zest.emailhider-3.1.3.tar.gz (22.8 kB 查看散列值)

上传时间

由以下机构支持