一个分页效果ruby版可作为面试题吧
2010-11-19 19:52
281 查看
#coding:utf-8total_pages=11current_page=10a=(1..total_pages).to_a #<div class="page_box"><span><font>«首页</font></span><span><font>上一页</font></span>#<span id="page_on"><font>1</font></span>#<span><a href="" >2</a></span>#<span><a href="" >3</a></span>#<span><a href="" >4</a></span>#<span><a href="" >5</a></span>#<span><a href="" >...</a></span>#<span><a href="" >11</a></span>#<span><a href="">下一页</a></span>#<span><a href="" >尾页»</a></span>#<span><font>1/共11页</font></span>#</div>#r=[]#if current_page-5>0# r<<"1"# r<<"..."+(current_page-3).to_s# r<<current_page-2# r<<current_page-1# r<<current_page# if current_page+1<=total_pages# r<<current_page+1# end# if current_page+2<==total_pages# r<<current_page+2# end#else# r.concat((1...current_page).to_a)#end#r<<current_page#if current_page+5<=total_pages# r<<current_page+1# r<<current_page+2# r<<"..."+(current_page+3).to_s#else# r.concat(((current_page+1)..total_pages).to_a)#end####puts r#r=[]#r<<current_page#if current_page-2>0# r.unshift current_page-1# #end#if current_page-5>0 and current_page+2<=total_pages# a[1..#end#puts ar=[]if total_pages<=6 r.concat((1..total_pages).to_a)else if current_page-5>0 if current_page+2<=total_pages a.delete_if{|x| x< current_page-2} elsif current_page+1<=total_pages a.delete_if{|x| x<current_page-3} elsif current_page<=total_pages a.delete_if{|x| x<current_page-4} end end if current_page+5>0 if current_page-2>0 a.delete_if{|x| x >current_page+2} elsif current_page-1>0 a.delete_if{|x| x>current_page+3} elsif current_page>0 a.delete_if{|x| x>current_page+4} end endendif a.first!=1 a.unshift "..." a.unshift 1endif a.last!=total_pages a<<"..." a<<total_pagesendputs a我也是费了好久,快要penkui了,可以看到注释的部分我也是很糊,另外也有对ruby的函数不熟悉,(这个是借口,主要是脑子不好使)效果参见ecshop的分页效果,实现如下效果«首页上一页1...1415161718下一页尾页»17/共18页
«首页上一页1...1415161718下一页尾页»18/共18页
«首页上一页12345...18下一页尾页»1/共18页
«首页上一页123456...18下一页尾页»4/共18页
«首页上一页1...45678...18下一页尾页»6/共18页
«首页上一页1下一页尾页»1/共1页之前blog有一篇有python写的分页,比这个简单,可以算是这个的子集
最终的代码
#coding:utf-8
total_pages=11
current_page=10
a=(1..total_pages).to_a
#<div class="page_box"><span><font>«首页</font></span><span><font>上一页</font></span>
#<span id="page_on"><font>1</font></span>
#<span><a href="" >2</a></span>
#<span><a href="" >3</a></span>
#<span><a href="" >4</a></span>
#<span><a href="" >5</a></span>
#<span><a href="" >...</a></span>
#<span><a href="" >11</a></span>
#<span><a href="">下一页</a></span>
#<span><a href="" >尾页»</a></span>
#<span><font>1/共11页</font></span>
#</div>
#r=[]
#if current_page-5>0
# r<<"1"
# r<<"..."+(current_page-3).to_s
# r<<current_page-2
# r<<current_page-1
# r<<current_page
# if current_page+1<=total_pages
# r<<current_page+1
# end
# if current_page+2<==total_pages
# r<<current_page+2
# end
#else
# r.concat((1...current_page).to_a)
#end
#r<<current_page
#if current_page+5<=total_pages
# r<<current_page+1
# r<<current_page+2
# r<<"..."+(current_page+3).to_s
#else
# r.concat(((current_page+1)..total_pages).to_a)
#end
#
#
#
#puts r
#r=[]
#r<<current_page
#if current_page-2>0
# r.unshift current_page-1
#
#end
#if current_page-5>0 and current_page+2<=total_pages
# a[1..
#end
#puts a
if total_pages>6
if current_page-5>0
if current_page+2<=total_pages
a.delete_if{|x| x< current_page-2}
elsif current_page+1<=total_pages
a.delete_if{|x| x<current_page-3}
elsif current_page<=total_pages
a.delete_if{|x| x<current_page-4}
end
end
if current_page+5>0
if current_page-2>0
a.delete_if{|x| x >current_page+2}
elsif current_page-1>0
a.delete_if{|x| x>current_page+3}
elsif current_page>0
a.delete_if{|x| x>current_page+4}
end
end
end
if a.first!=1
a.unshift "..."
a.unshift 1
end
if a.last!=total_pages
a<<"..."
a<<total_pages
end
puts a
puts "----------"
pos=a.index(current_page)
def gen_link(page)
page=page.to_s
#拼接样式输出
%Q{<span><a href="">#{page}</a></span>}
end
r=[]
a.each_with_index do |elem,index|
page=elem
if elem=="..." and index<pos
page=a[a.index("...")+1]-1
end
if elem=="..." and index>pos
page=a[a.rindex("...")-1]+1
end
r<<gen_link(page)
end
#修改当前页的样式
r[pos]=%Q{<span id="page_on"><font>#{a[pos]}</font></span>}
if current_page==1
r.unshift %q{<span><font>上一页</font></span>}
r.unshift %q{<span><font>«首页</font></span>}
r.unshift %q{<div class="page_box">}
else
page=current_page-1
r.unshift %Q{<span><a href="">上一页</a></span>}
r.unshift %Q{<span><a href="">首页</a></span>}
r.unshift %q{<div class="page_box">}
end
if current_page==total_pages
r<<%q{<span><a href="">下一页</a></span>}
r<<%q{<span><a href="" >尾页»</a></span>}
r<<%q{<span><font>1/共11页</font></span>}
r<<%q{</div>}
else
page=current_page+1
r<< %Q{<span><a href="">下一页</a></span>}
r<< %Q{<span><a href="">尾页»</a></span>}
r<<%q{</div>}
end
puts r
puts r.join("")
«首页上一页1...1415161718下一页尾页»18/共18页
«首页上一页12345...18下一页尾页»1/共18页
«首页上一页123456...18下一页尾页»4/共18页
«首页上一页1...45678...18下一页尾页»6/共18页
«首页上一页1下一页尾页»1/共1页之前blog有一篇有python写的分页,比这个简单,可以算是这个的子集
最终的代码
#coding:utf-8
total_pages=11
current_page=10
a=(1..total_pages).to_a
#<div class="page_box"><span><font>«首页</font></span><span><font>上一页</font></span>
#<span id="page_on"><font>1</font></span>
#<span><a href="" >2</a></span>
#<span><a href="" >3</a></span>
#<span><a href="" >4</a></span>
#<span><a href="" >5</a></span>
#<span><a href="" >...</a></span>
#<span><a href="" >11</a></span>
#<span><a href="">下一页</a></span>
#<span><a href="" >尾页»</a></span>
#<span><font>1/共11页</font></span>
#</div>
#r=[]
#if current_page-5>0
# r<<"1"
# r<<"..."+(current_page-3).to_s
# r<<current_page-2
# r<<current_page-1
# r<<current_page
# if current_page+1<=total_pages
# r<<current_page+1
# end
# if current_page+2<==total_pages
# r<<current_page+2
# end
#else
# r.concat((1...current_page).to_a)
#end
#r<<current_page
#if current_page+5<=total_pages
# r<<current_page+1
# r<<current_page+2
# r<<"..."+(current_page+3).to_s
#else
# r.concat(((current_page+1)..total_pages).to_a)
#end
#
#
#
#puts r
#r=[]
#r<<current_page
#if current_page-2>0
# r.unshift current_page-1
#
#end
#if current_page-5>0 and current_page+2<=total_pages
# a[1..
#end
#puts a
if total_pages>6
if current_page-5>0
if current_page+2<=total_pages
a.delete_if{|x| x< current_page-2}
elsif current_page+1<=total_pages
a.delete_if{|x| x<current_page-3}
elsif current_page<=total_pages
a.delete_if{|x| x<current_page-4}
end
end
if current_page+5>0
if current_page-2>0
a.delete_if{|x| x >current_page+2}
elsif current_page-1>0
a.delete_if{|x| x>current_page+3}
elsif current_page>0
a.delete_if{|x| x>current_page+4}
end
end
end
if a.first!=1
a.unshift "..."
a.unshift 1
end
if a.last!=total_pages
a<<"..."
a<<total_pages
end
puts a
puts "----------"
pos=a.index(current_page)
def gen_link(page)
page=page.to_s
#拼接样式输出
%Q{<span><a href="">#{page}</a></span>}
end
r=[]
a.each_with_index do |elem,index|
page=elem
if elem=="..." and index<pos
page=a[a.index("...")+1]-1
end
if elem=="..." and index>pos
page=a[a.rindex("...")-1]+1
end
r<<gen_link(page)
end
#修改当前页的样式
r[pos]=%Q{<span id="page_on"><font>#{a[pos]}</font></span>}
if current_page==1
r.unshift %q{<span><font>上一页</font></span>}
r.unshift %q{<span><font>«首页</font></span>}
r.unshift %q{<div class="page_box">}
else
page=current_page-1
r.unshift %Q{<span><a href="">上一页</a></span>}
r.unshift %Q{<span><a href="">首页</a></span>}
r.unshift %q{<div class="page_box">}
end
if current_page==total_pages
r<<%q{<span><a href="">下一页</a></span>}
r<<%q{<span><a href="" >尾页»</a></span>}
r<<%q{<span><font>1/共11页</font></span>}
r<<%q{</div>}
else
page=current_page+1
r<< %Q{<span><a href="">下一页</a></span>}
r<< %Q{<span><a href="">尾页»</a></span>}
r<<%q{</div>}
end
puts r
puts r.join("")
相关文章推荐
- 非常不错的一个JS分页效果代码,值得研究
- 测测你的显示器的显示效果,编程时遇到的,或许可以作为购买显示器的一个小标准
- 将分页作为一个单独的控件
- 非常不错的一个JS分页效果代码,值得研究
- 一个JS分页效果代码
- 非常不错的一个JS分页效果代码
- 如何实现 画一个屏幕的渐变效果,并将其作为程序的背景模板
- 非常不错的一个JS分页效果代码,值得研究
- 创建ORCLE存储过程含有一个输出游标参数和输出整型参数(实现对表的分页效果)
- [Transfer][VB]DataGrid分页机制,通过编程做一个十分有个性、功能十分完善的分页效果
- FreeMarker编写一个用于实现分页效果的通用指令
- 原创一个分页效果共享,思路应早就有了。
- 百度面试题--盒子凸起一个角效果实现的讨论
- 今天有写了一个分页不过显示的效果不一样,哈哈!
- return 和 finally(个人觉得可以作为一个面试题)
- 将分页作为一个单独的控件
- 自已写的一个分页翻页效果
- 自已写的一个分页翻页效果
- 分页程序,可以作为面试题
- 一个很好玩的效果,可以作为很多特效使用