งานที่ทำในตอนนี้ต้องทำในส่วนของการค้นหา โดยต้องมี highlight ให้ text ที่ตรงกับคำค้นหา ซึ่งการให้ทำ highlight นั้น Rails Framework ได้เตรียม text_helper ไว้ให้ใช้งานแล้ว โดยมีลักษณะดังนี้
highlight(text, phrase, highlighter = '<font color="#ff0000">\1</font>')
ตัวอย่าง คือ <%= highlight('You searched for: rails', 'rails') %>
ผลลัพธ์ที่ได้ คือ You searched for: rails
แต่ข้อด้อย คือ ไม่รองรับการทำ highlight ของคำหลายๆ คำ เช่น
ตัวอย่าง คือ <%= highlight('You searched for: ruby on rails', 'rails ruby') %>
ผลลัพธ์ที่ได้ คือ You searched for: ruby on rails
ผลลัพธ์ที่ต้องการ คือ You searched for: ruby on rails
หลังจากทดสอบแล้วว่ามันคงตามที่เราต้องการไม่ได้ ผมจึงคิดเขียนเพิ่มขึ้นมาเอง แต่เพื่อประหยัดเวลาและคิดว่าคงมีคิดเหมือนเรา ดังนั้น Google จึงเป็นทางเลือกที่ดีที่สุด และก็ได้พบกับ Rails Trac (กะไว้แล้วว่าต้องมีคนทำไว้ . . . สบาย) โดยต้องเพิ่มส่วน code ข้างล่างลงใน application_helper.rb
def highlight(text, phrases, highlighter = '<font color="#ff0000" class="highlight">\1</font>') if text.blank? || phrases.blank? text else phrase = phrases.split(‘ ‘).to_a match = Array(phrase).map do |p| p.split(//u).map do |x| Regexp.escape(x) end.join end.join(‘|’) text.gsub(/(#{match})/i, highlighter) end end
ตัวอย่าง คือ <%= highlight('You searched for: ruby on rails', 'rails ruby') %>
ผลลัพธ์ที่ได้ คือ You searched for: ruby on rails
ปล. ผมได้ทำการทดสอบกับภาษาไทยแล้ว ยังไม่เจอปัญหาใดๆ หากใครเจอก็เอามาบอกด้วยละกัน ช่วยๆกันแก้
คำแนะนำเพิ่มเติม: เขียน CSS ของ highlight ด้วยจะได้เห็นชัดเจนมากยิ่งขึ้น


