代码之家  ›  专栏  ›  技术社区  ›  sjbuysse

Rails-将erb标签与markdown混合

  •  0
  • sjbuysse  · 技术社区  · 9 年前

    我希望我的博客站点上的用户能够在文本区域中键入标记文本,以制作博客帖子。然后,将使用诸如红毯或kramdown之类的工具转换该标记文本。现在,我还希望用户能够调用一个局部视图来显示一些图片。换言之,我希望用户能够在标记文本之间的任何位置键入以下代码(并将其解释为erb代码)

    <%= render partial: "slider", locals: {imgs: ["image1.jpg", "image2.jpg"]} %>
    

    这是可能的吗?kramdown允许您使用块级HTML标记(div、p、pre),所以这可能会有一些好处?

    1 回复  |  直到 9 年前
        1
  •  3
  •   Francesco Belladonna    9 年前

    你真的希望你的客户能够写ERB吗?这非常危险,他们可以使用ERB中的任何Ruby函数,包括内核功能。让一个简单的 模板系统 ,可以是自定义的,也可以是现有的。例如,您可以使用 Liquid (来自Shopify),提供一些自定义标签,这样他们就不需要所有的样板,只需要 {% dosomething 'partial', 'img1', 'img2' %} ,然后首先将液体转换为普通文本,然后将markdown转换为html, 缓存它 并将其显示给用户。例如:

    # get your customer text from somewhere, like params[:markdown_text]
    template = params[:markdown_text]
    markdown = Liquid::Template.parse(template).render
    html_text = Redcarpet::Markdown.new(renderer, extensions = {}).render(markdown)
    
    puts html_text.to_s # => text with html tags, ensure to use `html_safe` on it in views
    

    你已经准备好了