Sayfaya kalıcı baÄŸlantı adresleri için verilecek stringlerde temizlik yapmak lazım oluyor. Bunu yazmıştım “Muhtıra” için, onun çıkacağı yok en azından içindeki güzel kodları paylaÅŸayım.
isim.downcase!
{'İ' => 'i', 'Ğ' => 'g', 'Ü' => 'u', 'Ş' => 's', 'Ç' => 'c', 'Ö' => 'o',
'ğ' => 'g', 'ü' => 'u', 'ş' => 's', 'ö' => 'o', 'ç' => 'c', 'ı' => 'i'}.each_pair { |a,b| isim.gsub!(a,b) }
isim.gsub(/([^ a-zA-Z0-9_-]+)/, '').tr(' ', '-').gsub(/--/, '-').gsub(/-$/, '')
end
irb(main):046:0> kisa_ceviri(”Permalink İçin Çeviri, String Temizleyici Falan.”)
=> “permalink-icin-ceviri-string-temizleyici-falan“
Bu kodu alıp Ruby’nin nimetlerinden faydalanalım ve şöyle yapalım.
NOT: Bu kod 18/08/2008 de güncellenmiştr. downcase! ya da diğer selfi değiştiren fonksiyonlarda değişen bir yer yoksa sonuç olarak nil döndürmektedir. bu nedenle downcase! den dönen bilgi direk str değişkenine aktarılmamıştır.
def kisa_ceviri
self.downcase!
str = self
{'İ' => 'i', 'Ğ' => 'g', 'Ü' => 'u', 'Ş' => 's', 'Ç' => 'c', 'Ö' => 'o',
'ğ' => 'g', 'ü' => 'u', 'ş' => 's', 'ö' => 'o', 'ç' => 'c', 'ı' => 'i'}.each_pair { |a,b| str.gsub!(a,b) }
str.gsub(/([^ a-zA-Z0-9_-]+)/, '').tr(' ', '-').gsub(/--/, '-').gsub(/-$/, '')
end
end
irb(main):046:0> “Permalink İçin Çeviri, String Temizleyici Falan.”.kisa_ceviri
=> “permalink-icin-ceviri-string-temizleyici-falan“
# _kayit.rhtml
< %= kayit.isim %>
< %= kayit.blabla %>
aslen ÅŸudur;
<%= kayit.isim %>
< %= kayit.blabla %>
< % end %>
Pagination Links In One Line Of Code 14/06/07
- < %= (1..@sayfa_pages.page_count).collect { |i| link_to(i, {:page => i}) }.join(' - ') unless @sayfa_pages.page_count == 1 -%>
ipucu: request.post? 09/06/07
Bir konu hakkında belge ortaya çıkartmak eğer vaktiniz kısıtlıysa oldukça uzun sürüyor. Bazı konular hakkında belge hazırlamaya çalışıyorum Rails ile ilgili ve vaktim kısıtlı. Onlar ortaya çıkana kadar ipuçları paylaşımı yapalım.
request.post?
if request.post?
# form gönderilmiş
# ona göre işlem yap
else
# form henüz ortada yok.
end
end
Bir alanı otomatik tamamlama sistemine geçirmek için Rails tarafında 2 satırlık kod yeterli olabiliyor çoÄŸu kez. ActionController alt sınıfına auto_complete_for :model, :alan ve görünümde(view) bu özelliÄŸe sahip olunması istenilen “giriÅŸe”(edit) text_field_with_auto_complete :model, :alan. Ben listeyi kendim göstermek istiyorum derseniz de Controllerde auto_complete_for_model_alan fonksiyonunda biraz deÄŸiÅŸiklik yapabilirsiniz.
Daha hızlı bir çözüm ise “yerel” kullanımla beraber kayıtları JavaScript dizisi biçiminde alıp Autocompleter.Local kullanmak olabilir.
def etiket_tamamlama_liste
etiketler = Etiket.find(:all)
@headers['content-type'] = 'text/javascript'
liste = "var etiket_liste = new Array(#{etiketler.size});\n"
etiketler.each_with_index { |etiket, index| liste << "etiket_liste[#{index}] = '#{etiket.etiket}';\n" }
render :text => liste
end
end
< %= text_field 'giris', 'etiketler' %>
<div class="auto_complete" id="giris_etiketler_auto_complete" ></div>
< %= javascript_tag("new Autocompleter.Local('giris_etiketler' , 'giris_etiketler_auto_complete' ,
etiket_liste, {fullSearch: true, frequency: 0, minChars: 1, tokens: ','});") %>
javascript_tag ile Autocompleter.local için istemci oluÅŸturuyoruz ve listeyi “,” ile ayırarak etiket sisteminde seçimi güzelce yaptırıyoruz.
Autocompleter.Local‘ın scriptaculous içinde olduÄŸunu belirterek javascript_include_tag :defaults ile genel javascriptsel dosyaları dahil etmeyi unutmayınız.
textile için editör 02/06/07
http://slateinfo.blogs.wvu.edu/plugins/textile_editor_helper
kurulum
- script/plugin install http://svn.webtest.wvu.edu/repos/rails/plugins/textile_editor_helper/
- rake textile_editor_helper:install
- < %= textile_editor 'giris', 'icerik' -%>
- < %= textile_editor_initialize -%>
RedCloth hard_break yaması 13/05/07
# Patch for RedCloth. Fixed in RedCloth r128 but _why hasn't released it yet.
# <a href="http://code.whytheluckystiff.net/redcloth/changeset/128">http://code.whytheluckystiff.net/redcloth/changeset/128</a>
def hard_break( text )
text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
end
end
Daha önce “Türkçe Alan Adları İçin Tarihsel Kayıtlar ( created_at & updated_at => kayit_tarihi , guncelleme_tarihi )” konusunda bahsettiÄŸim Rails’in otomatik olarak tarih atadığı “created_at|updated_at” ve “updated_at|updated_on” alanlarını Türkçe isim kullanarak deÄŸiÅŸtirmek için daha baÅŸka bi’ yol ise ÅŸu ÅŸekilde;
Not
Bu yolda Tablodaki alanların isimlerinin created_at|created_on, updated_at|updated_on şeklinde olması gerektiğini unutmayınız. Yapılan iş sadece başka isimden bu alanlara erişmek olacaktır.
Amaç
Yazının asıl amacı tablo alanlarını belirli bir standardın dışına nasıl çıkarabilirize cevap vermektir. Railsin otomatik oluÅŸturduÄŸu “attribute” olaylarını el ile yapmayı görmektir.
self[:created_at]
end
def kayit_tarihi(tarih)
self[:created_at] = tarih
end
# read_attribute ile self[:...] aynı işlevi yapar
def guncellenme_tarihi
read_attribute(:updated_at)
end
# self[..] = blabla yazmak için write_attribute kullanılır
def guncellenme_tarihi(tarih)
write_attribute(:updated_at, tarih)
end
Tüm bu alanlara sahip tablolarda bu kodu kullanmanız gerektiğini unutmayınız.
Rails ActiveRecord modülünde kaydın eklenme tarihini ve güncellenme tarihini eğer created_at|created_on ve/veya updated_at|updated_on alanlarınız var ise otomatik olarak bunlara kaydeder.
Ufak Bi’ Not:
Alanlara kaydın otomatik yapılmaması için iki yolumuz mevcut;
- ActiveRecord::Base.record_timestamps = false ile (environment.rb dosyasına ekleyerek) tüm modellerde geçerli olur.
- self.record_timestamps = false ile yazılan model için geçerli olur.
Türkçe Alan Adları
Gelelim asıl konumuza.
Artık alanlarımızı “kayit_tarihi” “guncelleme_tarihi” ÅŸeklinde oluÅŸturarak da Rails’in bu alanlara otomatik olarak kayıt yapmasını saÄŸlayabiliriz.
Bunun için environment.rb dosyasına aşağıdaki satırları eklemeniz gerekmektedir.
# muarifer, http://www.ikinoktayazilim.com/wordpress
module Muarifer
module EtkinKayit
module Zaman
# önceki fonk.ları değiştirelim
def self.included(base)
base.alias_method_chain :create, :tr
base.alias_method_chain :update, :tr
end
# oluÅŸturma tarihini otomatik kaydet
def create_with_tr
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('kayit_tarihi', t) if respond_to?(*:kayit_tarihi) && kayit_tarihi.nil?
write_attribute('guncelleme_tarihi', t) if respond_to?(:guncelleme_tarihi)
end
create_with_timestamps
end
# güncelleme tarihini otomatik kaydet
def update_with_tr
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('guncelleme_tarihi', t) if respond_to?(:guncelleme_tarihi)
end
update_with_timestamps
end
end
end
end
ActiveRecord::Base.class_eval {
include Muarifer::EtkinKayit::Zaman
}
Bir Not Daha
Kodlarımızı projeye dahil ettikten sonra created_at|created_on ve updated_at|updated_on alanları da güncellenmeye devam edecektir. Bu konuda sıkıntınız olmasın.
Grub açılışına koyduÄŸunuz resim “karıncalı” çıkıyor ise sebebi renk modunun yüksek oluÅŸundadır. Hızlıca “grub”un desteklediÄŸi renk formatına çevirebilirsiniz resminizi:
LaTeX, TeXMAKER & Türkçe 29/03/07
Makale, kitap hatta mektup yazmak için bile kullanılabilen LaTeX dili için Türkçe bi’ Å?eyler karalamak isterken “Türkçe karakter hatası” sorunlarından kurtulabilmek için gerekli komutlar Å?unlar:
- \documentclass[12pt,a4paper]{book}
- \usepackage[turkish]{babel}
- \usepackage[latin5]{inputenc}
- \usepackage[T1]{fontenc}
- \usepackage{bookman}
Ayrıca Texmaker “platform baÄ?ımsız” güzel bir LaTeX editörü.
Kaynak koddan LaTeXsel renklendirme yapan “Highlight Converter” çok yararlı.
Windows için MiKTeX ile TeX paketlerini de kolayca yükleyebiliriz.
Malumunuz Rails “Prototype” alt yapısını kullanarak Ajaxsal olayları içerisinde bulunan “helper” dosyaları sayesinde oldukça kolay kullanıma indirgedi.
Yazıda “bildirgeç”te bulunan “tutma” sisteminin Rails ile nasıl yapılabileceÄ?ine veya bir oy sisteminin Rails ile nasıl yapılabileceÄ?ine deÄ?ineceÄ?iz. Yazının amacı “basit” ajax olaylarını nasıl yapabileceÄ?imizin dıÅ?ında “RJS” Å?ablon sistemini kullanabilmeyi göstermektir.
UYGULAMA Ã?RNEÄ?İNE BAKABİLİRSİNİZ.
Yazının sonunda “bildirgeç” üzerinde bulunan “tuttum” yapısının daha geliÅ?miÅ? bir sürümünü elde etmiÅ? olacaÄ?ız. “Daha geliÅ?miÅ?” çünkü tutulduÄ?u anda “tutan kiÅ?ilerin” listesini de güncelleyecek.
Not: Yazıda kullanıcılar ve kullanıcı giriÅ?leri Å?eklinde bir sistemimiz olmadıÄ?ı için oluÅ?turacaÄ?ımız fonksiyonları anlık yapacaÄ?ız. BaÅ?ta belirtildiÄ?i üzere asıl amaç “RJS” ile birden fazla alan güncellemesidir.
Ortamın Hazırlanması
rdt svn version & radrails 19/03/07
Ruby Development Environment’in (RDT) geliÅ?tirme aÅ?aması sürümlerini yükleyerek yeni sürümünde nasıl bir hâl alacaÄ?ını Å?imdiden görün derim. Eclipse üzerine kurup, üstüne RadRails paketlerini de kurarak Ruby On Rails için editör özellikleri arttırımından da faydalanabilirsiniz.
Kurulum için öncelikle Eclipse‘ye sahip olduktan sonra
Help > Software Updates > Find and Install
menüsünü izliyoruz. RDT için yeni güncelleme adresi olarak http://updatesite.rubypeople.org/nightly sayfasını ekliyoruz. RDT kurulumundan sonra http://radrails.sourceforge.net/update/ adresinden RadRails için de aynı yüklemeyi yapıyoruz.
SVN sürümünde patlama-çatlama olabilir, bu nedenle sürekli güncel tutmak yararlıdır.
in_place_editor_field & Türkçe 05/03/07
Scriptaculous altyapısında bulunan “in place editor” alan düzenleme yapısı normal Å?artlar altında İngilizce mesajlar ile geliyor.
Ruby On Rails altyapısında bu özelliÄ?i kullanan yardımcı (helper) fonksiyonu (”in_place_editor_field”) otomatik TürkçeleÅ?tiren fonksiyon aÅ?aÄ?ıda yer alıyor. (EÄ?er bu fonksiyonu kullanmadan TürkçeleÅ?tirme yapmak isterseniz controls.js dosyası 476. satırdan itibaren kodlara göz atabilirsiniz)
Ã?ncelikle “in_place_editor nedir?” konusuna deÄ?inirsek

ApplicationHelper.rb dosyasına kaydedersiniz tüm görünüm dosyalarında sorunsuzca kullanabilirsiniz.
Sayfalama yaparken “önceki sayfa” “sonraki sayfa” baÄ?lantılarında yalnızca deÄ?iÅ?en kısım kayıtların listesinin bulunduÄ?u kısımdır. Madem Ajax diye bir olay var, bence kullanımının olacaÄ?ı en güzel yerlerden birisi de sayfalama olaylarıdır.
Yazıda hem Ajax’ın Rails içerisinde nasıl bir kullanımı olabileceÄ?ine deÄ?inecek, hem de sayfalama sistemini inceleyeceÄ?iz. Ayrıca yazıda “render” fonksiyonunu ve “layout” içeriÄ?ini yansıtmadan yalnızca dosya içeriÄ?ini yansıtmayı saÄ?layan “render :partial” olayını göreceÄ?iz.
Ajaxsal Sayfalama Mekanizması
Ruby On Rails, müthiÅ? iki JavaScript kütüphanesi olan Scriptaculous Ve Prototype ile beraber gelmektedir. Ajaxsal yordamları & efektleri bu iki kütüphane sayesinde Rails’in bize sunmuÅ? olduÄ?u fonksiyonlar ile oldukça hızlı Å?ekilde gerçekleÅ?tirebiliriz. “Pagination” sınıfının ne olduÄ?una ve örnek kullanımına bi’ kaç bildiri öncesinde yer vermiÅ?tim.
BaÅ?ka neler göreceÄ?iz?
Ayrıca yazıda “render” fonksiyonunu ve “layout” içeriÄ?ini yansıtmadan yalnızca dosya içeriÄ?ini yansıtmayı saÄ?layan “render :partial” olayını göreceÄ?iz.
Yazının devamında makalenin tamamını bulabilirsiniz.






