【问题标题】:How can I display Gravtar using Middleman?如何使用 Middleman 显示 Gravtar?
【发布时间】:2014-01-07 22:03:07
【问题描述】:

我正在尝试构建我的第一个 ruby​​ gem,它使用Middleman Frontmatter 来显示 Gravatar 图像。

我的目标是使用这样的frontmatter作为输入

---
email: example@mail.com
---

...和 ​​输出 .erb 文件中的关联 Gravatar 图像,如下所示:

<%= gravatar_for(article.data.email) %>

这是我根据 Gravatar 提供的通过 ruby​​ 显示图像的说明得出的:

require "gravatar/version"
require 'digest/md5'

module Gravatar

  def gravatar_for(email)
    hash = Digest::MD5.hexdigest(email.chomp.downcase)
    "http://www.gravatar.com/avatar/#{hash}"
  end

end

我在运行代码时收到的错误是

NoMethodError at/
undefined method `gravatar_for'...

gem 和 repo 可以在这里找到:https://rubygems.org/gems/snagagrav

【问题讨论】:

  • 你应该解释一下你遇到了什么问题,也许添加一些代码?
  • @rainkinz 对不起。第一次发帖——太早点击提交。
  • 不用担心,我自己做的 :-)

标签: ruby gem middleman gravatar


【解决方案1】:

执行此操作的最简单方法不涉及制作您自己的中间人扩展:

把这个放到config.rb:

require 'digest/md5'
helpers do
  def gravatar_for(email)
    hash = Digest::MD5.hexdigest(email.chomp.downcase)
    "http://www.gravatar.com/avatar/#{hash}"
  end
end

现在你可以在模板中做:

<%= gravatar_for(article.data.email) %>

【讨论】:

    【解决方案2】:

    我假设您已成功尝试将类似的内容添加到您的 config.rb:

    require 'digest/md5'
    class Gravatar < Middleman::Extension
      def initialize(app, options_hash={}, &block)
        super
        puts "#{options_hash.inspect}"
      end
    
      helpers do
        def make_a_link(url, text)
          "<a href='#{url}'>#{text}</a>"
        end
    
        def gravatar_for(email)
          hash = Digest::MD5.hexdigest(email.chomp.downcase)
          "http://www.gravatar.com/avatar/#{hash}"
        end
      end
    end
    
    ::Middleman::Extensions.register(:gravatar, Gravatar)
    
    set :css_dir, 'stylesheets'
    
    set :js_dir, 'javascripts'
    
    set :images_dir, 'images'
    
    # Build-specific configuration
    configure :build do
      activate :gravatar
    end
    

    然后在你的模板中:

    ---
    title: Welcome to Middleman
    email: example@mail.com
    ---
    
    <div class="welcome">
      <h1>Middleman is Watching</h1>
      <p class="doc">
        <%= gravatar_for(current_page.data.email) %>
      </p><!-- .doc -->
    </div><!-- .welcome -->
    

    这对我有用。好像你需要把你的 gem 变成 MiddleMan 扩展并注册它。

    【讨论】:

      【解决方案3】:

      想通了!这是我所做的:

      在目录 middleman-gravatar/lib/ 中创建了一个名为 middleman-gravatar.rb 的 gem

      class MiddlemanGravatar < ::Middleman::Extension
      
        helpers do
          def gravatar_for(email, options_hash={})
            if email
              # Creates md5 hash for email address
              hash = Digest::MD5.hexdigest(email.chomp.downcase)
              # Returns Gravatar image for email (.jpg)
              "<img src='http://www.gravatar.com/avatar/#{hash}.jpg' />"
            else
              # Returns default mysterman image if no Gravatar exists
              "<img src='http://www.gravatar.com/avatar/?d=mm' />"
            end
          end
        end
      
      end
      
      ::Middleman::Extensions.register(:middleman_gravatar, MiddlemanGravatar)
      

      将此添加到config.rb 文件中

      # Gravatar
      require('middleman-gravatar/lib/middleman-gravatar')
      activate :middleman_gravatar
      

      将此添加到index.html.erb 以显示 Gravatar

      <%= gravatar_for(article.data.gravatar) %>
      

      并将其添加到文章文件的frontmatter

      ---
      gravatar: email@example.com
      ---
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多