Sayfa: « 1 2 3 »

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.

def kisa_ceviri(isim)
   
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.

class String
 
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

< %= render :partial => 'kayit', :collection => @liste %>
 
# _kayit.rhtml
< %=
kayit.isim %>
< %=
kayit.blabla %>

aslen ÅŸudur;

< % @liste.each do |kayit|
  <%=
kayit.isim %>
  < %=
kayit.blabla %>
< %
end %>
  1. < %= (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?

def kayit
 
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.

class BlaBla < ActionController::Base
 
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
<script src="/gunluk/etiket_tamamlama_liste" type="text/javascript" ></script>
< %= 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(INPUT_ADI, GÖSTERİLECEK_LİSTE_IDSI, JAVASCRİPT_DEĞİŞKEN_ADIMIZ, DİĞER AYARLAR)

Autocompleter.Local‘ın scriptaculous içinde olduÄŸunu belirterek javascript_include_tag :defaults ile genel javascriptsel dosyaları dahil etmeyi unutmayınız.

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 -%>
class RedCloth
 
# 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

kaynak kaynak-2

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.

def kayit_tarihi
 
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.

# Türkçe Tarihsel Alan Adlarını Otomatik Kaydettirici
# 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:

convert -resize 640x480 -colors 14 image.png image.xpm && gzip image.xpm

Kaynak

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:

  1. \documentclass[12pt,a4paper]{book}
  2. \usepackage[turkish]{babel}
  3. \usepackage[latin5]{inputenc}
  4. \usepackage[T1]{fontenc}
  5. \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ı

Devamını Okumak İstiyorum

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.

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
In Place Editor

ApplicationHelper.rb dosyasına kaydedersiniz tüm görünüm dosyalarında sorunsuzca kullanabilirsiniz.

Devamını Okumak İstiyorum

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.

Devamını Okumak İstiyorum

« Önceki Sayfa | Sonraki Sayfa »

Sayfada yayımlanan yazılar aksi belirtmedildiği sürece Murat Arif Çeliker'e aittir. Yorumlar, yorumu yapan kullanıcıların kendi görüşleridir.
açılış - deneyhane - tasarılar - hakkımda - iletişim -

Sitede altyapı olarak Wordpress kullanılmıştır.