iT邦幫忙

DAY 10
11

Rails 的簡單任務系列 第 11

[RoR] 簡單做出搜尋功能

多筆資料除了能夠分頁瀏覽之外,也需要能夠用字串搜尋來列出,而找出來的筆數過多也要能夠分頁列出,接續昨天的內容就可以建置出來。
簡單搜尋功能建置
只要更動兩個地方就可運作了

# 在 app/views/bibles/index.html.erb 的適當位置,加入以下的 search form
<% form_tag bibles_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>
# 再把剛才編輯過的 app/controllers/bibles_controller.rb 部份,更改成:
    @bibles = Bible.paginate :page => params[:page],
      :conditions => ['txt like ?', "%#{params[:search]}%"]

馬上就可以做聖經內容的字串查詢,而且沒有什麼中文字碼的問題。

將搜尋字串反白處理
搜尋後把所 search 的字串用粗體或者不同的顏色標示出來,可更醒目些,

# 修改 app/views/bibles/index.html.erb,將原來這一行 <td><%=h bible.txt %></td> 改成:
<td><%= highlight(bible.txt, params[:search], highlighter = '<b style="color:black;background-color:#ffff66">\1</b>') -%></td>

可從http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M001729看詳細的語法說明。

然而回到在第八日的例子中曾用到反白的例子,最初會看不懂這個寫法:

<%= highlight(highlight(@text, params[:forward]), 'stat=Sent', highlighter = '<b style="color:black;background-color:#ffff66">\1</b>') -%>

其實是將內層第二個 highlight 的結果,作為外層第一個 highlight 的 text,而內層 highlight 所強調的轉信地址,用一般的粗體字標示出,而外層 highlight 標示 'stat=Sent' 的字樣,用黃底黑色的粗體字標示,這樣的方式才不會把兩種標示的目的都用同一種 highlight 標示出來。

斑馬條紋似的table
常見的 table 像鐵人賽的HTML table 會有一白一淺藍地列出一行一行來,較有層次;要做到同樣的效果,可以加個簡單語法就完成:

# app/views/layouts/bibles.html.erb 將額外的 option.css 碼加在整個 bibles 的 layout template 上
<%= stylesheet_link_tag 'option' %>
# 編輯一個 public/stylesheets/option.css 
.even {
background-color:#EDF5FF;
}
# 修改 app/views/bibles/index.html.erb
... 
<% for bible in @bibles %>
  <tr class="<%= cycle("even", "odd") -%>">
    <td><%=h bible.engs %></td>
...


上一篇
[RoR] 簡單完成分頁功能
下一篇
[RoR] 簡單完成上傳功能
系列文
Rails 的簡單任務33

1 則留言

0
gric
iT邦高手 1 級 ‧ 2009-03-13 21:35:55

謝謝分享咯!

我要留言

立即登入留言