一个简单的jQuery Plone组件,用于隐藏电子邮件地址以防止垃圾邮件。
项目描述
Zest emailhider
本文档描述了zest.emailhider包。
依赖关系
此包依赖于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的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 96055836894f0126e7d73e7c5ed1c415fa6c2f3081f007263ef125309c816389 |
|
MD5 | 306325b4c695fbd890e82621e9a88026 |
|
BLAKE2b-256 | 615692c2f59b69982b4858832321a2cb300ccf19350fb641eb3bb1488b96bc10 |