澄清:帖子的创建者应该能够决定何时发生截断。
我在我的博客中使用以下辅助函数实现了类似[--- MORE ---]功能的Wordpress:
# application_helper.rb
def more_split(content)
split = content.split("[---MORE---]")
split.first
end
def remove_more_tag(content)
content.sub(“[---MORE---]", '')
end
在索引视图中,帖子正文将显示(但没有)[--- MORE ---]标记的所有内容。
# index.html.erb
<%= raw more_split(post.rendered_body) %>
在节目视图中,除了[--- MORE ---]标签外,还会显示帖子正文中的所有内容。
# show.html.erb
<%=raw remove_more_tag(@post.rendered_body) %>
这个解决方案目前对我没有任何问题。 由于我还是编程的初学者,我一直想知道是否有更优雅的方式来实现这一目标。
你会怎么做?
感谢您的时间。
这是更新版本:
# index.html.erb
<%=raw truncate(post.rendered_body,
:length => 0,
:separator => '[---MORE---]',
:omission => link_to( "Continued...",post)) %>
...并在展会视图中:
# show.html.erb
<%=raw (@post.rendered_body).gsub("[---MORE---]", '') %>
答案 0 :(得分:8)
我只使用截断,它具有您需要的所有选项。
truncate("And they found that many people were sleeping better.", :length => 25, :omission => '... (continued)')
# => "And they f... (continued)"
<强>更新强>
在阅读了评论之后,又挖掘了一些文档,似乎:separator
完成了工作。
来自doc:
Pass a :separator to truncate text at a natural break.
有关参考资料,请参阅docs
truncate(post.rendered_body, :separator => '[---MORE---]')
在展示页面上,您必须使用gsub
答案 1 :(得分:0)
您可以在索引页面上使用辅助函数,该函数仅捕获字符串中的前X个字符。所以,它看起来更像是:
<%= raw summarize(post.rendered_body, 250) %>
获取帖子中的前250个字符。那么,你不必在[--- MORE ---]字符串上处理w / split。而且,在您的帖子的展示页面上,您根本不需要做任何事情......只需渲染post.body
。
这是一个示例摘要帮助程序(您将放入application_helper.rb):
def summarize(body, length)
return simple_format(truncate(body.gsub(/<\/?.*?>/, ""), :length => length)).gsub(/<\/?.*?>/, "")
end
答案 2 :(得分:0)
我试过,发现这个是最好最简单的
def summarize(body, length)
return simple_format = body[0..length]+'...'
end
s = summarize("to get the first n characters in your post. So, then you don't have to deal w/ splitting on the [---MORE---] post.body.",20)
ruby-1.9.2-p290 :017 > s
=> "to get the first n ..."
答案 3 :(得分:0)
我需要一个可以在此ERB调用模板上使用的模板。这只是一个简单的字符串:
<%= @page_info.user_name %>
我尝试了<%= truncate(@page_info.user_name, :length => -2)
但它实际上会根据数字重复两次或不同的长用户名。我只想允许显示10个字符的用户名。