我正在使用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)
我是否正确地认为我应该将此处理转移到事物的上游?也就是说,存储缩短的内容以及完整的内容。我认为这样可以节省足够的处理时间,使其值得额外存储。
答案 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的大小。