Grails 和 Google PlusOne

Posted

技术标签:

【中文标题】Grails 和 Google PlusOne【英文标题】:Grails and Google PlusOne 【发布时间】:2011-11-02 15:30:30 【问题描述】:

Google PlusOne 代码如下所示:<g:plusone size="medium"></g:plusone>

不幸的是,在 Grails 世界中,“g:”是保留的。

我相信您可以修改 Grails 库,但我正在寻找一种更简单的方法。 我怎样才能简单地要求 Grails 不解析这个字符串?

【问题讨论】:

为什么不使用html +1 code 而不是无效的、伪命名空间的、XMLish 版本? 我不知道 HTML 版本,现在测试它,你应该发布作为答案 'g:' 是什么意思?对于 taglib 命名空间? 【参考方案1】:

我将回答我自己的问题并感谢 Quentin,他对问题发表了评论但没有写下答案(如果您发布答案,我会选择您作为正确答案)。

有一个HTML版本:

<div class="g-plusone" data-size="medium"></div>

【讨论】:

【参考方案2】:

或者你可以在你的 gsp 文件中这样输出它:

$'<g:plusone annotation="inline" href="http://www.anythinggoeshere_xyz.com"></g:plusone>'

【讨论】:

【参考方案3】:

好吧,您唯一的解决方案就是更改您正在使用的 taglib。

如果您使用的是 taglib,您唯一需要做的就是添加一个名为 namespace 的静态属性,并使用您想要的名称,如下例所示:

static namespace = google1

【讨论】:

【参考方案4】:

在 taglib solution by James Williams 的基础上,我能够使用这个 taglib 呈现 +1 按钮,我在我的 taglib 文件夹中命名为 GooglePlusOneTagLib.grooovy:

class GooglePlusOneTagLib 

    def plusone =  attrs, body ->
        out << "<g:plusone "+(attrs.size ? "size=$attrs.size" : "") +"></g:plusone>"
    

    def plusoneScript =  attrs, body ->
        out << '''<script type="text/javascript">
                  (function() 
                    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
                    po.src = 'https://apis.google.com/js/plusone.js';
                    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
                  )();
                    </script>'''
    


然后您只需在 gsp 中使用这些标签

<g:plusone size="medium"></g:plusone>
<g:plusoneScript />

【讨论】:

看了之后,我更喜欢纯 HTML 解决方案 (***.com/a/7219746/421356),但我会留下我的,因为它仍然有效。

以上是关于Grails 和 Google PlusOne的主要内容,如果未能解决你的问题,请参考以下文章

使用 Grails 创建 Google 登录

Google-App-Engine 上的 Grails - 它死了吗? [关闭]

Grails 通过 Spring Security 插件使用 Google 身份验证

Grails URL 验证

Grails spring-security-oauth-google:如何设置

如何在 Groovy/Grails 上实现社交网络登录? [关闭]