使用HTML内容显示文章的缩短版本

时间:2011-12-12 09:00:40

标签: html ruby-on-rails ruby-on-rails-3 preview

我正在使用rails 3.1建立一个网站,它的核心是一堆文章(类似于博客文章)。它们以HTML格式存储和格式化。现在,我需要的是生成文章内容的预览,以便在这些文章的Feed中只显示简短版本。必须缩短内容而不破坏其HTML。

有一种简单的方法吗?宝石将是完美的,但是想要一种简洁的方法来实现缩短功能我自己也会很棒。谢谢!

修改 在进行进一步的实验时,我正在使用Sanitize gem处理这类事情,而且似乎运行得很好:

def shortened_content(length)
    Sanitize.clean(content[0..length], Sanitize::Config::RELAXED)
end

我不喜欢稀释和改变问题的方向,但我想我必须这样做。

对于这类事物,是否有更好的解决方案? (我认为,sanitize gem会删除不需要的内容以及清理HTML。我只需要它来清理HTML)

我是否正确地认为我应该将此处理转移到事物的上游?也就是说,存储缩短的内容以及完整的内容。我认为这样可以节省足够的处理时间,使其值得额外存储。

4 个答案:

答案 0 :(得分:1)

你需要点击html而不破坏标签,试试这个jquery truncator plugin

答案 1 :(得分:1)

是的,Sanitize宝石是正确的方法。我使用Nokogiri宝石做了类似的事情 - 你可以看到Sanitize宝石依赖于它。除了完整的HTML之外,将缩短的HTML预览存储在新列中绝对更加精明。所以在before_save

中是这样的
def generate_preview
   self.preview_content ||= shortened_content(100)
end

一个很好的副作用是管理员现在可以根据需要手动编写预览。

答案 2 :(得分:1)

为Rails使用'HtmlSlicer'gem。

将此行放在您的Gemfile中:

gem 'html_slicer'

然后捆绑:

% bundle

你的模特:

class YourModel < ActiveRecord::Base
  slice :content, :as => :shorten, :slice => {:maximum => 100, :limit => 1, :text_break => "..."}
end

您的观点:

<%= @your_model.shorten %>

答案 3 :(得分:0)

您可以将所有文本放在div(或您要使用的任何块级元素)中,将其设置为固定大小,然后将overflow: hidden;放在其上。您也可以使用text-overflow: ellipsis;,浏览器会显示...,如果它支持,则会截断文本。

#synopsis {
    width: 300px;
    height: 100px;   
    overflow: hidden;
    text-overflow: ellipsis;
}

你可能最终会得到很多多余的文字,只会增加你需要下载的HTML的大小。

Example fiddle