<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CETURK &#187; Kurtman Çelik</title>
	<atom:link href="http://www.ceturk.com/author/kurtman/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ceturk.com</link>
	<description>Türkiye&#039;nin Bilişim Platformu</description>
	<lastBuildDate>Wed, 08 Sep 2010 08:53:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bilal Sağır Kimdir?</title>
		<link>http://www.ceturk.com/biyografi/bilal-sagir-kimdir.html</link>
		<comments>http://www.ceturk.com/biyografi/bilal-sagir-kimdir.html#comments</comments>
		<pubDate>Wed, 11 Nov 2009 09:44:23 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[Biyografi]]></category>
		<category><![CDATA[Ceturk Ekibi]]></category>
		<category><![CDATA[Bilal Sağır]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=4327</guid>
		<description><![CDATA[
1986, İstanbul doğumluyum. İlköğretim’i Öğretmen Salih Nafiz  Tüzün Okulunda okuduktan sonra kazandığım Özel Kasımoğlu Fen Lisesini 2004  yılında bitirdim. Aynı yıl girdiğim Karadeniz Teknik Üniversitesi Bilgisayar  Mühendisliği Bölümünden 2009 yılında mezun oldum. 
İlköğretim yıllarından beri bilgisayara olan ilgim beni bilgisayar  mühendisliği seçmeye yönlendirdi. Lisans öğrenimimin ilk yıllarından itibaren  yazılım geliştirme [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-4328" title="Bilal Sağır" src="http://www.ceturk.com/images/Bilal-Sağır.jpg" alt="Bilal Sağır" width="133" height="177" /></p>
<p><span style="font-family: Verdana;">1986, <strong>İstanbul </strong>doğumluyum. <strong>İlköğretim’i Öğretmen Salih Nafiz  Tüzün Okulu</strong>nda okuduktan sonra kazandığım <strong>Özel Kasımoğlu Fen Lisesi</strong>ni 2004  yılında bitirdim. Aynı yıl girdiğim <strong>Karadeniz Teknik Üniversitesi Bilgisayar  Mühendisliği Bölümü</strong>nden 2009 yılında mezun oldum. </span><br />
<span style="font-family: Verdana;">İlköğretim yıllarından beri bilgisayara olan ilgim beni bilgisayar  mühendisliği seçmeye yönlendirdi. Lisans öğrenimimin ilk yıllarından itibaren  yazılım geliştirme alanında sürekli kendimi geliştirdim. Dil bilmenin  vazgeçilmez haline geldiği iş hayatına daha iyi başlamak için Work&amp;Travel  programı aracılığıyla New York’ta bulundum. Burada kaldığım süre de İngilizcemi  geliştirme ve birbirinden farklı kültürleri de tanıma fırsatı buldum. Lisans  boyunca Veri Yapıları, Programlama Dilleri, Sayısal İşaret İşleme, Bilgisayar  Grafikleri, Yapay Zeka, Veritabanı Programlama ve Web Programlama gibi konularda  projeler geliştirdim.</span><br />
<span style="font-family: Verdana;">Hobi olarak gezmekten, tenis  oynamaktan, satranç oynamaktan, sinemaya gitmekten, yüzmekten hoşlanırım.  Galatasaray maçlarını Ali Sami Yen’de izlemek en büyük özel zevklerim  arasındadır.</span></p>
<p><span style="font-family: Verdana;"><br />
</span></p>
<p>CETURK Ekibi’nde <a href="http://www.ceturk.com/forum/php/" target="_blank"><strong>PHP</strong></a> Forum Sorumlusu olarak görev yapmaktadır.<br />
CETURK’teki  yazılarına erişmek için : <a href="http://www.ceturk.com/etiket/bilal-sagir" target="_blank">http://www.ceturk.com/etiket/bilal-sagir</a><br />
CETUK Forumu’undaki prifline erişmek için : <a href="http://www.ceturk.com/forum/uyeler/bilal-sagir/" target="_blank">http://www.ceturk.com/forum/uyeler/bilal-sagir/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/biyografi/bilal-sagir-kimdir.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Kullanımınızı Geliştirmek için Öneriler &#8211; 2</title>
		<link>http://www.ceturk.com/web-teknolojileri/jquery-kullaniminizi-gelistirmek-icin-oneriler-2.html</link>
		<comments>http://www.ceturk.com/web-teknolojileri/jquery-kullaniminizi-gelistirmek-icin-oneriler-2.html#comments</comments>
		<pubDate>Sun, 08 Nov 2009 17:59:00 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[Kurtman Çelik]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=4200</guid>
		<description><![CDATA[
Daha önceki yazının devamı niteliğindeki başka bir derlemeye hoşgeldiniz. jQuery&#8217;nin popüler olmasının nedeni, şahsi blogculardan tutunda, büyük şirketlere kadar her alanda birçok kullananının olması. Çünkü bizim ve çoğu insanın, henüz haberdar olmadığı birçok işlevselliği ve bunun yanında bir de kullanım kolaylığı sağlaması büyük etkenler olarak gösterilebilir. Umuyorum jQuery kullanıcılarının büyük bir çoğunluğu, problemlerini çözmek için [...]]]></description>
			<content:encoded><![CDATA[<p><img title="jquery-banner-2" src="http://www.ceturk.com/images/jquery-banner-2.jpg" alt="jquery-banner-2" width="625" height="250" /></p>
<p>Daha önceki yazının devamı niteliğindeki başka bir derlemeye hoşgeldiniz. jQuery&#8217;nin popüler olmasının nedeni, şahsi blogculardan tutunda, büyük şirketlere kadar her alanda birçok kullananının olması. Çünkü bizim ve çoğu insanın, henüz haberdar olmadığı birçok işlevselliği ve bunun yanında bir de kullanım kolaylığı sağlaması büyük etkenler olarak gösterilebilir. <span id="more-4200"></span>Umuyorum jQuery kullanıcılarının büyük bir çoğunluğu, problemlerini çözmek için doğru stratejiyi kullanarak gerekli eklentileri kullanıyorlardır. Ama hazır çözümlerin yetersiz kaldığı yerde, lazım olanı kendinizin de yapabilir olduğunuzu bilmenizde fayda var. İşte bu sebepden ötürü şimdi birkaç öneri ve örnek uygulamaya başlıyoruz:</p>
<h2>#1 &#8211; jQuery Seçicilerinizi Test Edin ve Geliştirin</h2>
<p><a href="http://codylindley.com/jqueryselectors/" target="_blank">jQuery selector Lab</a> adlı araç gerçekten harika ve bedava bir uygulama, isterseniz download ederek çevrimdışı mod&#8217;da da çalışabilmeniz mümkün. Birçok HTML elementinin kombinasyonundan oluşan bir sayfa var ve ekranın sol tarafındaki uzunca listede yer alan hazır seçicilerle hangi seçicinin hangi elementi işaret ettiğini görebiliyorsunuz. Sol tarafdan seçtiğiniz bir seçici aktif olduğunda, HTML elementleri renk değiştirerek size sonucu gösteriyorlar. İsterseniz en üst kısıma kendi seçicinizide yazabilirsiniz.</p>
<p><img class="alignnone size-full wp-image-4207" title="selector" src="http://www.ceturk.com/images/selector.jpg" alt="selector" width="625" height="350" /></p>
<h2>#2 &#8211; Eğer jQuery Koleksiyonu En Az Bir Element İçeriyorsa: Test Edin</h2>
<p>Eğer seçicilerin çalıştırılması sonucu oluşan jQuery koleksiyonunuzda bir element olup olmadığını yani sonucun boş olup olmadğını kontol etmek isterseniz, koleksiyonun ilk elemanına erişmeyi deneyebilirsiniz.</p>
<pre class="brush:javascript">if($(selector)[0]){...}

//veya

if($(selector).length){...}</pre>
<p>Bir örnek verecek olursak:</p>
<pre class="brush:javascript">&lt;ul id="Urunler"&gt;

&lt;li&gt;&lt;input class="Stokta" name="item" type="radio" value="Urun 1" /&gt;Urun 1&lt;/li&gt;

&lt;li&gt;&lt;input class="Bilinmiyor" name="item" type="radio" value="Urun 2" /&gt;Urun 2&lt;/li&gt;

&lt;li&gt;&lt;input class="Stokta" name="item" type="radio" value="Urun 3" /&gt;Urun 3&lt;/li&gt;

&lt;/ul&gt;

&lt;pre escaped="true" lang="javascript"&gt;...

// Aşağıdaki if bloğu true değeri döndürür çünkü,
// jQuery ile seçim işlemi sonucu elimizde 2 nesne olmuş oluyor
// Böylelikle &lt;kodlar&gt; yazan kısımdaki kodlar çalıştırılacaktır.

if($('#Urunler input.Stokta')[0]){&lt;Kodlar&gt;}</pre>
<h2>#3 &#8211; jQuery.org&#8217;dan En Güncel Sürümün Çekilmesi</h2>
<p>Aşağıdaki kod satırı ile jQuery&#8217;nin en güncel sürümünü sayfanıza ekleyebilirsiniz:</p>
<pre class="brush:html">&lt;script src="http://code.jquery.com/jquery-latest.js"&gt;&lt;/script&gt;</pre>
<p>Eğer aklınıza gelen bir fikri çabukcak en son sürüm üzerinde denemek isterseniz kullanışlı bir yöntem.</p>
<h2>#4 &#8211; Efektlerinizi Senkronize Bir Hale Getirmek için CallBack Fonksiyonlarını Kullanın</h2>
<p>Eğer bir iş bittikden sonra, başka bir fonksiyonun çalıştırılmasını istiyorsanız Callback fonksiyonları denemelisiniz. JavaScript, fonksiyonların sonuna Callback  fonksiyonları eklemeyi mümkün kılar. Örnek bir çalışmayla anlatacak olursak:</p>
<pre class="brush:javascript">&lt;style&gt;

div.button    { background:#cfd; margin:3px; width:50px;

text-align:center; float:left; cursor:pointer;

border:2px outset black; font-weight:bolder; }

#sliding      { display:none; }

&lt;/style&gt;

&lt;script&gt;

$(document).ready(function(){

//Button CSS sınıfına bağlı bir div'e tıklandığı zaman,
// "sliding" ID'sine ait div aşağıya doğru kayar.

$("div.button").click(function () {

//bu noktaya kadar; div basılı düğme şeklini almış olmalı.

$(this).css({ borderStyle:"inset", cursor:"wait" });

//buradan itibaren callback fonksiyonu çalışacak ve aynı şekilde div'i eski haline geri getirecektir.

$('#sliding').slideDown('slow', function(){

$('#sliding').slideUp('slow', function(){

//div eski haline geldiğinde buton işlevini gören div'i eski haline getiren fonksiyon çalışacak.

$('div.button').css({ borderStyle:"outset", cursor:"auto" });

});

});

});

});

&lt;/script&gt;</pre>
<p>Kodun canlı örneğine <a href="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/jquery-tips2/demo.html" target="_blank">buradan</a> erişebilirsiniz.</p>
<h2>#5 &#8211; Özel Nesneleri ve DOM Nesnelerini Kontrol Etmek için Olayları Kullanın</h2>
<p>jQuery&#8217;nin en çok kullanılan özelliklerinden bir tanesi de, Web sayfanızdaki elementlere olaylar atayabilmeniz. jQuery çok geniş kapsamlı bir<a href="http://docs.jquery.com/Events" target="_blank"> olay mekanizması</a>nı destekler ve bunların haricinde kendi olayınızı yazmanıza da olanak verir. Elementlere olay atamak pek kolay gibi görünmüyor olabilir. Hemen bir örnek yapalım:</p>
<pre class="brush:javascript">// Sayfadaki bütün paragraf nesnelerinin click olayına: imlecin koordinatlarını ekran yazan fonksiyonu ata.

$("p").bind("click", function(e){

var str = "( " + e.pageX + ", " + e.pageY + " )";

$("span").text("Şu koordinatlara tıklandı: " + str);

});

//Birden fazla olaya aynı anda fonksiyon atanması.

$("p").bind("mouseenter mouseleave", function(e){

//toggleClass; bir css sınıfı, seçili elemente bağlanmışsa o sınıfı elementten ayırır

//eğer belirtilen sınıf, elemente bağlı değilse; sınıfı elemente bağlar.

$(this).toggleClass("mouse-over");

});</pre>
<p>jQuery ile yukarıdaki gibi sadece DOM nesnelerinin standart olaylarını değilde, kendi yazdığınız bir fonksiyonu da bir olay olarak tanıtabilirsiniz.</p>
<pre class="brush:javascript">}

function SepeteEkle() {

// Buraya kendi kodunuzu yazın...

};

var Sepetim = new SepeteEkle('Bilgisayar');

jQuery(Sepetim).bind('UrunEkle', function() {

// Özelleştirilmiş olay.

});

// Yukarıda tanımlanan olayı aşağıda tetikle.

jQuery(Sepetim).trigger('UrunEkle');

);</pre>
<h2>#6 &#8211; Özel Seçicileri Kullanmayı Öğrenin</h2>
<p>jQuery en çok kullanılan seçme işlemlerine alternatif olarak kendi seçici fonksiyonunuzu yazmaya olanak tanır.</p>
<pre class="brush:javascript">$.expr[':'].OzelSecici= function(element, index, meta, stack){

// element- DOM elementi

// index - Seçim işlemi sonrasında dönen yığının içindeki sıra numarası

// meta - seçiciniz hakkında extra bilgi.

// stack - Bütün nesneleri barındıran sığın

// Eğer aranan nesneyi içeriyorsa true döndür.

// aranan bulunamadıysa en son aktif olanı gönder.

};

// Özel seçicinin kullanımı.

$('.CSS_Sinifi:test').BirseylerYap();</pre>
<p>Şimdi bir de aşağıdaki örneğe bakalım. Bu örnek nitelikleri arasında &#8220;rel&#8221; olan bütün nesneleri döndürür:</p>
<pre class="brush:javascript">$.expr[':'].withRel = function(element){

var $this = $(element);

//Basitçe: attr fonksiyonu ile gelen elementin nitelikleri arasında dolaşılır ve "rel" bulunduğu anda nesne geri gönderilir.

return ($this.attr('rel') != '');

};

$(document).ready(function(){

//Görüldüğü üzere seçicinin kullanımı gayet basittir ve ekleyelim, daha öncede bahsettiğimiz zincirleme kod yazımını kendi seçicinizle de kullanabilirsiniz.

// "rel" niteliğini taşıyan nesneler bulunduğunda, arkaplan renklerini yeşil olarak ayarla.

$('a:withRel').css('background-color', 'green');

});

...

&lt;ul&gt;

&lt;li&gt;

&lt;a href="#"&gt;rel yok&lt;/a&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;a rel="İşte Burada" href="#"&gt;rel var&lt;/a&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;a rel="" href="#"&gt;rel yok&lt;/a&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;a rel="Bir tane daha" href="#"&gt;rel var&lt;/a&gt;

&lt;/li&gt;

&lt;/ul&gt;</pre>
<h2>#7 &#8211; Nesnelerin Tümünü Tıklanabilir Hale Getirin</h2>
<p>Çoğu menü <em>ul &#8211; li</em> HTML taglarının CSS ile kullanımıyla oluşturulur. Sadece<em> li</em> etiketinin içindeki <em>a</em> etiketi yerine bütün<em> li</em> etiketinin tıklanabilir olup, yine de içindeki linke yönlendirme yapılabilmesi hoş bir özellik olurdu. jQuery bunu kolaylıkla yapar; ilk önce içinde <em>a</em> etiketi olan<em> li</em> elementleri bulunur ve<em> li</em> elementinin <em>click</em> olayına, <em>a</em>&#8216;nın <em>href</em> niteliğinde yer alan adrese yönlendirme işlemini yapan fonksiyon yazılır. Karmaşık gibi göründü sanırım. Bir örnek yapalım:</p>
<pre class="brush:javascript">&lt;ul&gt;

&lt;li&gt;&lt;a href="home"&gt;home&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="home"&gt;about&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="home"&gt;contact&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

...

//ul elementi içindeki tüm li elementlerini tıklanabilir hale getiriyor.

$("ul li").click(function(){

//li elementinin içindeki a elementi bulunuyor ve href niteliğindeki değer okunarak,
//sayfanın o adrese yönlendirilmesi sağlanıyor.

window.location=$(this).find("a").attr("href"); return false;

});</pre>
<h2>#8 &#8211; Resimlerin Önyüklenmesi</h2>
<p>JavaScriptle birlikte kullanılacak resimlerin önceden sayfaya yüklenmesi yerine güzel bir fikir olabilir.</p>
<pre class="brush:javascript">//Listesi gönderilen resimleri sayfaya yükleyen fonksyion
//arguments &gt; gönderilen dosya listesini temsil eder.
jQuery.preloadImages = function(){

//Sayfadaki resim elementleri arasında dolaş.

for(var i = 0; i&lt;arguments.length; i++){

jQuery("&lt;img&gt;").attr("src", arguments[i]);

}

}

// fonksiyonu aşağıdaki şekilde kullanabilirsiniz.

$.preloadImages("images/logo-1.png", "images/logo-2.png", "images/logo-3.png");</pre>
<h2>#9 &#8211; Sağ Tuş Menüsünü Pasif Yapın</h2>
<p>JavaScript ile yıllardır yaptığmız bu işlemi jquery daha kolay bir hale getiriyor. Üstelik bu sefer, sağ tuş menüsünü pasifleştirmek yerine başka türlü işlemler yapmak içinde kullanabilirsiniz.</p>
<pre class="brush:javascript">$(document).ready(function(){

$(document).bind("contextmenu",function(e){

return false;

});

})</pre>
<h2>#10 &#8211; Seçicileri Gruplandırarak Kodunuzu Basitleştirin</h2>
<p>Kodunuzu basitleştiren ve okunmasını kolaylaştıran bir diğer yöntemde, aynı işlevi yapan birden fazla elementin gruplandırılarak tek bir fonksiyon içerisinde kullanılmalarıdır.</p>
<pre class="brush:javascript">// Aşağıdaki gibi bir kod yazımı boş yere zamanınızdan çalacak ve daha fazla yer işgal edecektir.

$('div.close').click(Birseyler_yap);

$('button.close').click(Birseyler_yap);

$('input.close').click(Birseyler_yap);

// Aşağıdaki yazım, en uygun olanıdır: Aynı işlemi yapan bütün elementler tek bir alanda toplanmıştır ve aynı anda hepsine birden aynı iş yüklenmiştir.

$('div.close, button.close, input.close')

.click(Birseyler_yap);</pre>
<h2>#11 &#8211; Kodunuzu Test Edin</h2>
<p>jQuery, kendine has bir Test Kütüphanesi olan <a href="http://docs.jquery.com/QUnit" target="_blank">QUnit</a> kütüphanesini kullanır. Test blokları yazmak kolaydır ve size kodunuzu hala çalışır biçimde tutup, üzerinde güvenle değişiklik yapabilmenizi sağlar. Bir örnek:</p>
<pre class="brush:javascript">//Testleri modüller halinde gruplara ayır.

module("Module B");

test("Test Başlığı", function() {

//Ne kadar testin çalışacağını belirle (Asserts)

expect(2);

//Örnek bir karşılaştırma testi; JUnit'deki assertEquals'a karşılık gelir.

equals( true, false, "Test Başarısız" );

equals( true, true, "Test Başarılı" );

});</pre>
<p>Kurtman Çelik<br />
<a href="http://kurtmancelik.wordpress.com/" target="_blank">kurtmancelik.wordpress.com</a><br />
<strong>Kaynak: <a href="http://www.tripwiremagazine.com/ajax/developer-toolbox/more-jquery-and-general-javascript-tips-to-improve-your-code.html" target="_blank">http://www.tripwiremagazine.com/ajax/developer-toolbox/more-jquery-and-general-javascript-tips-to-improve-your-code.html</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/web-teknolojileri/jquery-kullaniminizi-gelistirmek-icin-oneriler-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Kullanımınızı Geliştirmek için Öneriler</title>
		<link>http://www.ceturk.com/genel/jquery-kullaniminizi-gelistirmek-icin-oneriler.html</link>
		<comments>http://www.ceturk.com/genel/jquery-kullaniminizi-gelistirmek-icin-oneriler.html#comments</comments>
		<pubDate>Sun, 08 Nov 2009 12:10:01 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[Kurtman Çelik]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=4172</guid>
		<description><![CDATA[
Eğer jQuery&#8217;i sıklıkla kullanıyor veya başlamayı planlıyorsanız, inanıyorum ki yapılacak birkaç dakikalık ufak örnekler ile yazdığınız kodu daha kaliteli hale getirmek mümkün. Daha hızlı kod yazmanızı sağlayacak ve kodunuzun kalitesini arttırmanıza yardımcı olacak birkaç yöntemden bahsedelim.

#1 &#8211; jQuery Kütüphanesini Google&#8217;dan Çekin.
Google, sadece jQuery değil daha birçok JavaScript Kütühanesini kendi sunucularında Google Code kütüphanesi adı altında [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-4173" title="jquery-banner" src="http://www.ceturk.com/images/jquery-banner.jpg" alt="jquery-banner" width="625" height="250" /></p>
<p>Eğer jQuery&#8217;i sıklıkla kullanıyor veya başlamayı planlıyorsanız, inanıyorum ki yapılacak birkaç dakikalık ufak örnekler ile yazdığınız kodu daha kaliteli hale getirmek mümkün. Daha hızlı kod yazmanızı sağlayacak ve kodunuzun kalitesini arttırmanıza yardımcı olacak birkaç yöntemden bahsedelim.</p>
<p><span id="more-4172"></span></p>
<h2>#1 &#8211; jQuery Kütüphanesini Google&#8217;dan Çekin.</h2>
<p>Google, sadece jQuery değil daha birçok JavaScript Kütühanesini kendi sunucularında Google Code kütüphanesi adı altında barındırmakta. jQuery&#8217;i kendi sunucunuza yüklemektense doğrudan Google&#8217;ın sunucularından çekmeyi deneyebilirsiniz.</p>
<pre class="brush:html">&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<h2>#2 &#8211; Veri Saklama Yöntemi.</h2>
<p>DOM içerisinde veri saklamaktansa, jQuery&#8217;nin <em>Data ()</em> metodunu kullanın. HTML elemanlarını veri tutucu olarak kullanmak çoğu web programcısının huyudur. Örnek vermek gerekirse:</p>
<pre class="brush:javascript">$('selector').attr('alt', 'saklanacak veri');

// yukarıdaki komutla 'alt' niteliğine yollanan değer, aşağıdaki metodla çekilebilir.

$('selector').attr('alt');</pre>
<p>HTML nitelikleri (attributes), veri saklamak amacıyla kullanılmamalıdır. Yukarıdaki örnekde görüldüğü gibi &#8220;alt&#8221; niteliği veri saklamanın dışında başka bir amaca hizmet etmektedir.</p>
<p>En doğru alternatif, jQuery&#8217;nin <em>Data()</em> metodunu kullanmaktır. Bu metod; size, sayfanızdaki herangi bir elemente bir veri ilişkilendirebilmenizi sağlar.</p>
<pre class="brush:javascript">$('selector').data('parametre_adi', 'saklanacak veri');

$('selector').data('parametre_adi'); // saklanan veriyi çekelim</pre>
<p>Bu tür bir kullanım, kullanılan isimler ve esneklik açısından daha anlamlıdır, sayfa üzerindeki istediğiniz elemente istediğiniz veriyi anlamlı bir başlık vererek ilişkilendirebilirsiniz. Data() ve RemoveData() metodları hakkında daha çok bilgi almak için <a href="http://docs.jquery.com/Internals" target="_blank">jQuery dökümantasyonuna</a> (İngilizce) bakabilirsiniz.</p>
<p>Klasik bir kullanım olarak aşağıdaki kod bloğunu gösterelim. Sayfa yüklendiği sırada istediğimiz veriyi doğrudan bir elemente atıyoruz ve o element aktif hale geldiğinde (focus) veriyi elementden kaldırıyoruz:</p>
<pre class="brush:javascript">&lt;form id="testform"&gt;

&lt;input type="text" class="clear" value="Sürekli temiz" /&gt;

&lt;input type="text" class="clear once" value="Sadece bir defa temiz" /&gt;

&lt;input type="text" value="Normal yazı" /&gt;

&lt;/form&gt;

$(function() {

//"each" fonksiyonunu kullanarak "clear" css sınıfına bağlı olan her input elementine uğra

//"clear once" etiketleri o nesnenin iki css sınıfına bağlı olduğnu gösterir.

$('#testform input.clear').each(function(){

//data(9 metodunu kullan ve verileri elementlere ata.

$(this).data( "txt", $.trim($(this).val()) );

}).focus(function(){

// Element aktif hale geldiğinde, varsayılan veri ile yenisi aynı değilse elementin içini temizle

if ( $.trim($(this).val()) === $(this).data("txt") ) {

$(this).val("");

}

}).blur(function(){

// elementin tekrar pasif olduğunda varsayılan değerleri geri yükle.

// ama "once" ("bir defa" demek) css sınıfı aktif ise elemente dokunma.

if ( $.trim($(this).val()) === "" &amp;&amp; !$(this).hasClass("once") ) {

//Veriyi elementte sakla.

$(this).val( $(this).data("txt") );

}

});

});</pre>
<p><a href="http://www.tripwiremagazine.com/wp-content/uploads/images/stories/Articles/jquery-tips/demo.html" target="_blank">Örnek</a></p>
<h2>#3 &#8211; Özet Dökümanlarını Kullanın (Cheats Sheets).</h2>
<p>Çoğu insan, -hele ki programcılar-, unuttukları bilgiye çabuk erişmek adına çok çaba gösteriyolar. Yazıcıdan çıktısı alınıp monitorun yanında bir yere yerleştirilmiş birkaç özet döküman, size hem zamandan kazanç sağlayacak hem de kodunuzu kalitesini arttıracaktır.</p>
<p><a href="http://oscarotero.com/jquery/" target="_blank">Oscarotero jquery 1.3</a> ve<a href="http://www.gmtaz.com/index.php/jquery-13-cheatsheet-wallpaper/" target="_blank"> duvar kağıdı boyutu</a>ndaki hali</p>
<p><img title="oscarotero" src="http://www.ceturk.com/images/oscarotero.jpg" alt="oscarotero" width="471" height="348" /></p>
<p><a href="http://acodingfool.typepad.com/blog/2009/01/jquery-13-cheat-sheet.html" target="_blank">jQuery 1.3 Özet Dökümanı</a></p>
<p>jQuery 1.3 sürümünün tüm fonksiyon ve özelliklerinin gösterildiği özet dökümanıdır. Yalnız jQuery UI&#8217;i kapsamamaktadır.</p>
<p><img title="acodingfooljquery" src="http://www.ceturk.com/images/acodingfooljquery.jpg" alt="acodingfooljquery" width="621" height="379" /></p>
<h2>#4 &#8211; İndirme Süresini Minimuma İndirin.</h2>
<p>Bazı Web tarayıcıları sayfayla birlikte aynı anda tek bir script dosyasını indirirler. Eğer birden fazla script dosyanız varsa bu, sayfanızın indirilme ve derleme sürelerini etkileyecektir.</p>
<p>Buna alternaitf olarak: Dean Edward&#8217;ın &#8220;Packer&#8221; adlı ücretsiz servisini kullanabilirsiniz. Kodlarınızdaki gereksiz boşlukları ve yorum satırlarını silerek size daha az boyutta ve daha hızlı indirilebilecek bir sürüm oluşturur. Tabi yorum satırlarınız kaybolacağı için scriptinizin bir programcı sürümünü yine elinizin altında bulundurmak gerekir, zira bu işlemi gerçekleştirdikden sonra kodunuz kolay kolay okunamaz bir duruma geliyor. Uygulamaya <a href="http://dean.edwards.name/packer/" target="_blank">buradan</a> erişebilirsiniz.</p>
<p><img class="alignnone size-full wp-image-4180" title="packer" src="http://www.ceturk.com/images/packer.jpg" alt="packer" width="625" height="250" /></p>
<h2>#5 &#8211; jQuery ile Firebug Konsoluna Mesaj Göndermek (Logging)</h2>
<p>Firebug, içerisinde; sayfanızın CSS, HTML, JavaScript kodları üzerinde hata ayıklama ve düzeltme işlemlerini yapabileceğiniz bür sürü araç barındıran bir Firefox eklentisi. Mükemmel bir denetim işlevi sayesinde sayfaların HTML ve CSS kodları içinde rahatça dolaşıp, hangi elementin hangi kod tarafından kontrol edildiğini görsel olarak izleyebilirsiniz.</p>
<p>Firefox, bir jQuery/JavaScript programcısına, kod içerisinden Firebug&#8217;a mesaj göndermeyi uygun hale getiriyor. En basit haliyle gösterecek olursak:</p>
<pre class="brush:javascript">console.log("hello world")</pre>
<p><img title="fire" src="http://www.ceturk.com/images/fire.jpg" alt="fire" width="625" height="250" /></p>
<p>Daha ayrıntılı bilgiyi <a href="http://www.getfirebug.com/logging.html" target="_blank">burada</a> bulabilirsiniz. (İngilizce)</p>
<p>Birden fazla değeri aynı anda göndermek de mümkün, böyle her mesaj arka arkaya gelen satırlarda gösterilir.</p>
<pre class="brush:javascript">console.log(2,4,6,8,"foo",bar)("hello world")</pre>
<p>Dominic Mitchell adlı programcının yazdığı ufak bir eklenti ile istediğiniz hernagi bir jQuery nesnesini Firebug konsoluna mesaj olarak yazdırabiliyorsunuz.</p>
<pre class="brush:javascript">jQuery.fn.log = function (msg) {

console.log("%s: %o", msg, this);

return this;

};</pre>
<p>Kullanımı ise şu şekilde:</p>
<pre class="brush:javascript">$('#some_div').find('li.source &gt; input:checkbox')

.log("İşareti kaldırılacak nesneler")

.removeAttr("checked");</pre>
<h2>#6 &#8211; Mümkünse Öncelikle Nesne ID&#8217;lerini Seçici Olarak Kullanın.</h2>
<p>jQuery ile çalışırken DOM neslerini ID&#8217;leri ile seçmek her zaman en kullanışlı yöntemdir. Nedeni ise bir nesneyi ID&#8217;si ile seçmek, diğer özellikleri ile aramakdan daha hızlı sonuçlanır (Internet Explorer&#8217;da CSS Sınıf seçicisinin bütün DOm nesneleri üzerinde dolaşarak aram yaptığı bilinir). Seçim işlemlerinde ID kullanmak hızlıdır çünkü bütün tarayıcılar kendi içlerinde <em>getElementByID() </em>(ID&#8217;ye göre seç) fonksiyonunu barındırırlar, jQuery&#8217;de bu fonksiyondan yararlanır. CSS sınıflarına göre seçim yapmak ise arkaplanda çaprazlama halinde yapılır ve eğer DOM yapınız geniş ise performansa etki eder.</p>
<p>Ufak bir örnek:</p>
<pre class="brush:javascript">&lt;div id="main"&gt;

&lt;form method="post" action="/"&gt;

&lt;h2&gt;Selectors in jQuery&lt;/h2&gt;

...

...

&lt;input class="button" id="main_button" type="submit" value="Submit" /&gt;

&lt;/form&gt;

&lt;/div&gt;

...

//Gönder düğmesini css sınıfı ile seçiyoruz. 

var main_button = $('#main .button');

//Gönder düğmesini doğrudan, ID bilgini vererek seçiyoruz.

var main_button = $('#main_button');</pre>
<p>#7 &#8211; CSS Sınıflarından Önce HTML Etiketlerini Belirtin.</p>
<p>Eğer HTML etiketlerine göre arama yaparsanız, jQuery tarayıcınızın kendi içindeki getElementbyTagName() fonksiyonunu kullanır. I&#8217;Dye göre arama yapmak nu yöntemde hala hızlıdır fakat, CSS sınıfına göre seçim yaparken sınıfın önünne HTML tagını getirerek aram yapmak, sadece CSS sınıfını belirtmekden hızlıdır.</p>
<pre class="brush:html">&lt;ul id="Urunler"&gt;

&lt;li&gt;&lt;input class="Stok" name="item" type="radio" value="Urun 1" /&gt; Urun 1 &lt;/li&gt;

&lt;li&gt;&lt;input class="Yok" name="item" type="radio" value="Urun 2" /&gt; Urun 2 &lt;/li&gt;

&lt;li&gt;&lt;input class="Bilinmiyor" name="item" type="radio" value="Urun 3" /&gt; Urun 3 &lt;/li&gt;

&lt;/ul&gt;</pre>
<p>Burada önemli olan CSS sınıfının ait olduğu elementin, HTML etiketini seçim sorgusuna eklemek, bu seçim işleminin tüm nesneler arasında dolaşma süresini azaltacaktır.</p>
<pre class="brush:javascript">var in_stock = $('#Urunler input.stok');</pre>
<p>Görüldüğü üzere; Seçim işlemine <em>Urunler ID</em>&#8217;sine sahip listeden başladık, sonra<em> input.stok</em> ile <em>stok</em> css sınıfında tanımlanmış bütün <em>input </em>nesnelerini seçmesini istedik. Eğer <em>#Urunler</em> yazmış olmasaydık, arama işlemi bütün sayfayı kapsıyacak ve sonucun bulunma süresini etkileyecekti. Aynı şekilde sadece CSS sınıfını yazmış olsaydık, sayfadaki bütün nesneler incelenecek ve <em>stok </em>css sınıfına ait olan nesne döndürülecekti.</p>
<h2>#8 &#8211; jQuery Nesnelerini Arabelleğe Alın (Caching).</h2>
<p>Bir nesnenin üzerinde işlem yapmadan önce onu tanımlamak ve gerekli değişiklikleri yaptıkdan sonra sahneye almak, performans açısından etkili bir yöntemdir. Örneğin: aşağıdaki gibi bir kod yazmak yerine:</p>
<pre class="brush:javascript">&lt;li&gt;Description: &lt;input type="text" name="description" value="" /&gt;&lt;/li&gt;

...

$('#shopping_cart_items input.text').css('border', '3px dashed yellow');

$('#shopping_cart_items input.text').css('background-color', 'red');

$('#shopping_cart_items input.text').val("text updated");</pre>
<p>Nesne doğrudan bir değişken olarak tanımlanıp, özellikleri belirlenebilir.</p>
<pre class="brush:javascript">var input_text = $('#shopping_cart_items input.text');

input_text.css('border', '3px dashed yellow');

input_text.css('background-color', 'red');

input_text.val("text updated");

//yukarıdakinin aynısı, sadece komutlar zincirleme yazılmış.

var input_text = $('#shopping_cart_items input.text');

input_text

.css('border', '3px dashed yellow')

.css('background-color', 'red')

.val("text updated");</pre>
<h2>#9 &#8211; Bazı jQuery Fonksiyonlarınızı $(window).load Olayı İçerisine Yazın.</h2>
<p>Birçok jQuery örneği ve açıklaması bizi kodumuzu <em>$(document).ready</em> olayı içerisine yazmaya yöneltir. Çoğu zaman bu hareket doğrudur fakat bu olay sadece nesneler oluşturulduğunda ve muhtemelen sayfa içeriğinin hala sunucudan indirildiği sırada meydana gelir. Bu nedenle animasyon, sürükle-bırak, gizli resimlerin çekilmesi gibi bazı, görsele dayalı fonksiyonlar doğru çalışmayabilir. $(window).load olayı, bazı şartlara bağlı olan bu nesnelere erişmeye garanti verdiği için kullanılması faydalı olabilir.</p>
<pre class="brush:javascript">$(window).load(function(){

// Sayfa yüklendikden sonra çalışacak kod bloğunu buray yazın.

});</pre>
<h2>#10 &#8211; Kodunuzu Daha Okunabilir Kılmak, Şık Göstermek ve Seçicileri Sınırlandırmak için Zincirleme Kod Yazımını Deneyin.</h2>
<p>Çünkü JavaScript zincir gibi, peşpeşe gelen ve hatta ayrı satırlara yazılmış, birbirinin devamı niteliğinde olan kodları anlayabilir ve çalıştırabilir.</p>
<p>Örnek olarak; aşağıdaki kod bir element&#8217;den bir CSS sınıfını kaldırıp, hemen arkasından aynı elemente başka bir CSS sınıfı bağlar.</p>
<pre class="brush:javascript">$('#Urunler input.stok')

.removeClass('stok')

.addClass('Yok');</pre>
<p>Eğer gerekli olursa, jQuery bu zincirleme fonksiyonları tek bir fonksiyon haline getirmenizi de destekler.</p>
<pre class="brush:javascript">$.fn.YokYap = function() {

return $(this).removeClass('stok').addClass('yok');

}

$('#Urunler input.stok').YokYap().log();</pre>
<p>Kurtman Çelik<br />
kurtmancelik.wordpress.com<br />
<strong>Kaynak: <a href="http://www.tripwiremagazine.com/tutorials/tutorials/jquery-and-general-javascript-tips-to-improve-your-code.html" target="_blank">http://www.tripwiremagazine.com/tutorials/tutorials/jquery-and-general-javascript-tips-to-improve-your-code.html</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/genel/jquery-kullaniminizi-gelistirmek-icin-oneriler.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nesne Yönelimli PHP – Bölüm 3</title>
		<link>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-%e2%80%93-bolum-3.html</link>
		<comments>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-%e2%80%93-bolum-3.html#comments</comments>
		<pubDate>Fri, 06 Nov 2009 12:22:56 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[Kurtman Çelik]]></category>
		<category><![CDATA[Nesne Tabanlı]]></category>
		<category><![CDATA[Nesne Yönelimli]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=3901</guid>
		<description><![CDATA[
Öncelikle
Tekrar merhaba, Nesne Yönelimli PHP dizisinin, son bölümüne hoşgeldiniz. Daha öncede bahsettiğim gibi eğer kendinizi bu konuda hazır hissetmiyorsanız, bölüm 1 ve bölüm 2 yazılarını tekrar etmenizi ısrarla tavsiye ediyorum. Temeller, bu konudaki en önemli parça.
Bu Yazıda
Bu yazıda, sürekli bahsettiğimiz MySQLi Veritabanı Sınıfını inşa edeceğiz ve bunu yaparken daha önceki konulardan öğrendiğimiz herşeyi kullanmaya çalışacağız.

Değişkenler [...]]]></description>
			<content:encoded><![CDATA[<p><img title="oop-php-part3-banner.jpg" src="http://www.ceturk.com/images/oop-php-part3-banner.jpg.png" alt="oop-php-part3-banner.jpg" width="600" height="160" /></p>
<h2>Öncelikle</h2>
<p>Tekrar merhaba, Nesne Yönelimli PHP dizisinin, son bölümüne hoşgeldiniz. Daha öncede bahsettiğim gibi eğer kendinizi bu konuda hazır hissetmiyorsanız, <a href="http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-1.html" target="_blank">bölüm 1</a> ve<a href="http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-2.html" target="_blank"> bölüm 2</a> yazılarını tekrar etmenizi ısrarla tavsiye ediyorum. Temeller, bu konudaki en önemli parça.<span id="more-3901"></span></p>
<h2>Bu Yazıda</h2>
<p>Bu yazıda, sürekli bahsettiğimiz MySQLi Veritabanı Sınıfını inşa edeceğiz ve bunu yaparken daha önceki konulardan öğrendiğimiz herşeyi kullanmaya çalışacağız.</p>
<ol>
<li>Değişkenler ve Yapıcı Metod,</li>
<li>Temel Fonksiyonlar.</li>
</ol>
<p>Başlıklarıyla ilglileneceğiz.</p>
<h2>1. Değişkenler ve Yapıcı Metod</h2>
<p><em>class.db.php</em> adında yeni bir dosya oluşturun ve içine aşağıdaki kod bloğunu girin:<br />
Açıklama satırlarını okumadan önce kodlara bakarak ne yapıldığını çözmeye çalışabilirsiniz.</p>
<pre class="brush:php">&lt;?php

/*
* class db
* @param Host
* @param User
* @param Password
* @param Name
*/
class db
{

var $host;       //MySQL Host
var $user;       //MySQL User
var $pass;       //MySQL Password
var $name;       //MySQL Name

var $mysqli;     //MySQLi Object

var $last_query; //Last Query Run

/*
* Class Constructor
* Creates a new MySQLi Object
*/
function __construct($host, $user, $pass, $name)
{

$host = $this-&gt;host;
$user = $this-&gt;user;
$pass = $this-&gt;pass;
$name = $this-&gt;name;

$this-&gt;mysqli = new mysqli($this-&gt;host, $this-&gt;user, $this-&gt;pass, $this-&gt;name);

}

}

$db = new db('localhost', 'root', '', 'blog');

?&gt;</pre>
<p>Öncelikle, Nesne Yönelimli PHP&#8217;nin en önemli meselelerinden birini tamamlamış bulunıyoruz: Organiazyon!. İlk önce, bir veritabanına bağlanmak için gereken tüm bilgileri birer değişken olarak tanımladık ve ardından yapıcı (constructor) metod yardımı ile kullanıcıdan bu bilgileri girmesini istedik. Veritabanı bilgilerini yapıcı metod ile almamızın sebebi; biz daha sonradan bu sınıfı kullanmaya başladığımız sırada veritabanı bilgilerinin girilmesine gerek kalmamasının sağlanmasıdır. Böylelikle kullanıcı, bizim sınıfımızı ilk çağırdığında bir kereye mahsus, veritabanı bilgilerini girecek ve daha sonraki kullanımlarda bu bilgilere ihtiyaç duymayacaktır.</p>
<p>En son satırda ise bu sınıfımızın bir nesnesini tanımlayarak, örnek veritabanı bilgileri giriyoruz.</p>
<h2>2. Temel Fonksiyonlar</h2>
<h3>Select</h3>
<p>Şimdi, yukarıdaki kod bloğu sayesinde veritabanı bağlantısını kurmuş olduk, sıra geldi; gönderdiğimiz &#8220;SELECT&#8221; sorgu cümlesini veritabanı üzerinde çalıştıran fonksiyonun yazımına.</p>
<p>Aşağıdaki kod bloğunu sınıfımızın sonuna ekleyin:</p>
<pre class="brush:php">/*
* Function Select
* @param fields
* @param from
* @param where
* @returns Query Result Set
*/
function select($fields, $from, $where)
{

$query = "SELECT " . $fields . " FROM `" . $from . "` WHERE " . $where;
$result = $this-&gt;mysqli-&gt;query($query);

$this-&gt;last_query = $query;

return $result;

}</pre>
<p>Böylelikle, bir MySQL tablosu üzerinde gönderdiğimiz sorguyu çalıştırıp, sonuçları bize geri getiren bir fonksiyon yazmış olduk.</p>
<p>Kullandığımız değişkenler; <em>$fields</em> &gt;alanlar, yani tablodan hangi alanların okunup geri döndürüleceği, <em>$from </em>&gt; tablo adı, yani sorgu cümlesinin hangi tablo üzerinde çalıştırılacağı, <em>$where</em> &gt; nereden, yani tablodan okunacak bilgilerin hangi kritere göre<em> filtreleneceği</em>.</p>
<p>Son olarak, sorgu çalıştırılır ve geri dönen değerler <em>$result</em> adındaki değişkende tutulur ve<em> return</em> komutu ile uygulamamıza geri gönderilir.</p>
<h3>Insert</h3>
<p>Veritabanına yeni veri kaydı göndermek istediğimizde kullanacağımız fonksiyonumuzu yazalım:</p>
<pre class="brush:php">/*
* Function Insert
* @param into
* @param values
* @returns boolean
*/
function insert($into, $values)
{

$query = "INSERT INTO " . $into . " VALUES(" . $values . ")";

$this-&gt;last_query = $query;

if($this-&gt;mysqli-&gt;query($query))
{
return true;
} else {
return false;
}

}</pre>
<p>En basit fonksiyonlardan bir tanesi. Kullanıcıdan sadece 2 değişken almamız yeterli; Tablo adı ve eklenecek değerler. Bu fonskyionda diğerine göre; geriye tablo kayıtları döndürmek yerine şöyle bir yol izledik: Sorguyu çalıştır, eğer kayıt ekleme başarılı olursa geriye <em>true</em> değeri döndür, eğer kayıt eklemede sorun çıkarsa geriye <em>false</em> değeri döndür.</p>
<h3>Delete</h3>
<p>En basit haliyle veritabanından kayıt giren fonksiyonumuz:</p>
<pre class="brush:php">&lt;?php

/*
* Function Delete
* @param from //Silinecek kayıdın hangi tablodan silineceği.
* @param where //Silme filtresi, hangi koşul uyuyorsa ona göre silme yap.
* @returns boolean //Eğer silme işlemi düzgün tamamlanmışsa geriye true döndür, hata oluşmuşsa geriye false döndür.
*/
function delete($from, $where)
{

$query = "DELETE FROM " . $from . " WHERE " . $where;

$this-&gt;last_query = $query;

if($this-&gt;mysqli-&gt;query($query))
{
return true;
} else {
return false;
}

}

?&gt;</pre>
<h2>Birkaç öneri</h2>
<p>Muhtemelen yazdığımız her fonksiyondaki $last_query (son sorgu) değişkenini, dikkatinizde kaçmamışdır. Sınıfımızın en başında tnımladığmız bu değişken, sınıfımız aracılığı ile çalıştırılmış en son sorguyu hafızada tutmak için kullanılıyor. Nedeni ise: son derece hayati önem kazanan sorguların, hata ayıklama işlemlerinin yapılmasına yardımcı olmasıdır. Bir hata meydana geldiğinde aynı sorguyu tekrar çalıştırmakdansa bu değişkene bakarak hatayı bulmaya çalışabilirsiniz. Diğer bir değişken ise $last_error (son hata), yazmış olduğumuz fonksiyonlardaki hata olma olasılıklarına karşı, kullanıcıyı bilgilendirmek amacıyla kullanılabilir. Bir hata meydana geldiğinde, hata mesajını bu değişkene aktarıp return komutu ile kullanıcıyı haberdar edebilirsiniz.</p>
<p>Update sorgusunu ise size bırakıyorum, ne kadar öğrendiğinizi ispatlamak adına update fonksiyonunu siz kendiniz yazmaya çalışabilirsiniz.</p>
<h2>Sonuç</h2>
<p>Bu yazıyla birlikte, Nesne Yönelimli PHP&#8221;de giriş seviyesinde bilgi birikimine sahip olmuş olduk. Umarım öğrendiğimiz bu temel bilgiler üzerine kendinizi daha çok geliştirir ve ileri konular hakkındada bilgi sahibi olursunuz. Takip ettiğiniz için teşekkürler, iyi çalışmalar.</p>
<p>Kurtman Çelik<br />
<a href="http://kurtmancelik.wordpress.com/" target="_blank">kurtmancelik.wordpress.com</a><br />
<strong>Kaynak: <a href="http://buildinternet.com/2009/07/an-introduction-to-object-oriented-php-part-3/" target="_blank">http://buildinternet.com/2009/07/an-introduction-to-object-oriented-php-part-3/</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-%e2%80%93-bolum-3.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nesne Yönelimli PHP &#8211; Bölüm 2</title>
		<link>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-2.html</link>
		<comments>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-2.html#comments</comments>
		<pubDate>Thu, 05 Nov 2009 12:40:44 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[Kurtman Çelik]]></category>
		<category><![CDATA[Nesne Tabanlı]]></category>
		<category><![CDATA[Nesne Yönelimli]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=3825</guid>
		<description><![CDATA[
Giriş
Bundan önceki yazımızda nesne yönelimli PHP&#8217;ye giriş yapmıştık. Bu yazımızda ise önceki yazıdaki örnekler üzerinden; ilerlemeye devam ediyoruz. Eğer başlangıç seviyesinde bilgiye sahip değilseniz, öncelikle 1. yazıyı okumanızı tavsiye ediyorum.

Bu Yazıda

Yapıcı (Constructors) ve Yıkıcı (Destrucktors) Metodlar,
Fonksiyonlardan değer döndürme,
Düzeni sağlama.

Konularını işliyoruz.
1. Yapıcı ve Yıkıcı Metodlar
Yapıcılılara, bir binanın yapımına başlanılması eylemi olarak bakabiliriz; yani bir sınıfın kullanıma [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-3826" title="oop-php-part2-banner" src="http://www.ceturk.com/images/oop-php-part2-banner.jpg" alt="oop-php-part2-banner" width="600" height="160" /></p>
<h2>Giriş</h2>
<p><a href="http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-1.html" target="_blank">Bundan önceki yazımızda</a> nesne yönelimli PHP&#8217;ye giriş yapmıştık. Bu yazımızda ise önceki yazıdaki örnekler üzerinden; ilerlemeye devam ediyoruz. Eğer başlangıç seviyesinde bilgiye sahip değilseniz, öncelikle 1. yazıyı okumanızı tavsiye ediyorum.</p>
<p><span id="more-3825"></span></p>
<h2>Bu Yazıda</h2>
<ol>
<li>Yapıcı (Constructors) ve Yıkıcı (Destrucktors) Metodlar,</li>
<li>Fonksiyonlardan değer döndürme,</li>
<li>Düzeni sağlama.</li>
</ol>
<p>Konularını işliyoruz.</p>
<h2>1. Yapıcı ve Yıkıcı Metodlar</h2>
<p>Yapıcılılara, bir binanın yapımına başlanılması eylemi olarak bakabiliriz; yani bir sınıfın kullanıma hazır olması için gereken işlemler olarak tanımlanabilir. Yıkıcılar ise binanın yani sınıfın yok edilmesi olarak tanımlanabilir.</p>
<p>Daha iyi anlaşılması için yapıcılara bir örnek verelim:</p>
<pre class="brush:php">&lt;?php
class MyClass
{
function __construct()
{
echo "MyClass Loaded!";
}
}
$MyClass = new MyClass();
?&gt;</pre>
<p>Bu örnekde; basitçe bir sınıf tanımladık ve içinde yapıcı bir metod yerleştirdik. Kodumuzda bu sınıfımızı çağırdığımız zaman hiç bir işlem yapmasak bile yapıcı metod çalışacak ve ekrana &#8220;Sınıf kullanıma hazır&#8221; mesajını yazıcaktır.<br />
Yıkıcı metodlara gelecek olursak; PHP&#8217;de sınıflarımızın her zaman bir yıkıcı metoda ihtiyacı yoktur. Zira siz bir nesne ile birkaç işlem yapıp o nesneyi yok ettiğinizde içindeki fonksiyon ve değişkenlerde yok olacaktır.</p>
<h2>2. Fonksiyonlardan değer döndürme</h2>
<p>Basit örneklerin dışında, gerçek projelerden bahsedecek olursak fonksiyonlarınızın her zaman ekrana birşey yazdırması gerekmez. Çoğu zaman geriye bir değer döndürülür ve bu değer ana programda istenilen yerde kullanılır.</p>
<p>Fonksiyonlardan geriye bir değer döndürmek için &#8220;<em>return</em>&#8221; anahtar kelimesi kullanılır ve formatı &#8220;<em>return</em> <strong><em>Geri Döndürülecek Değer</em></strong>&#8221; şeklindedir.</p>
<pre class="brush:php">&lt;?php

class Sinifim
{

var $mysqli;

function __construct()
{

$this-&gt;mysqli = new mysqli('localhost', 'root', '', 'blog');

}

function get_latest_posts()
{

//Do some database selection
$query = "SELECT * FROM `yazilar` ORDER BY `id` DESC";
$result = $this-&gt;mysqli-&gt;query($query);

return $result;

}

}

php?&gt;</pre>
<p>Yukarıdaki örnekde; en basitinden bir veritabanı bağlantısı kurduk ve ardından veritabanındaki &#8220;yazilar&#8221; tablosundaki verileri azalan sıra ile çekip, PHP uygulamamıza gönderdik. Bu noktadan itibaren veritabanından gelen bilgileri istediğimiz yerde kullanabiliriz.</p>
<h2>3. Düzeni Sağlama</h2>
<p><img class="alignnone size-full wp-image-3828" title="intro-oop-knex-boxes" src="http://www.ceturk.com/images/intro-oop-knex-boxes.jpg" alt="intro-oop-knex-boxes" width="600" height="250" /></p>
<p>Yukarıdaki resim &#8220;sınıf&#8221; terimine iyi bir örnek. Birbiri ile bağımsız her kutuya bir sınıf olarak bakacak olursak, kutuların içindekilerde o sınıfa ait fonksiyonlar ve değişkenlerdir.</p>
<p>Sınıfların en büyük avantajı, içindekileri kolay okunabilir ve düzenlenebilir şekilde tutmasıdır.<a href="http://core.trac.wordpress.org/browser/trunk/wp-includes/wp-db.php" target="_blank"> Wordpress&#8217;in veritabanı işlemlerini gerçekleştirmek için kullandığı sınıfı</a>na bakacak olursanız demek istediğimi daha iyi anlayacaksınız.</p>
<p>Gördüğünüz gibi her sınıf tanımının, fonksiyonun, değişkenin, yapıcının üst kısmında; ne işe yaradığını anlatan açıklama satırları mevcut. Bu, o sınıfı kullanan diğer programcılar için çok büyük bir avantaj sağlamaktadır.</p>
<p>Şimdi bu yapıyı kendi sınıfımıza da uygulayalım:</p>
<pre class="brush:php">&lt;?php

/*
* @name Sinifim
* @params none
* Bu sınıf, veritabanına bağlantıyı ve yeni kayıt ekleme işlemlerini gerçekleştirir.
*/
class Sinifim
{

/*
* MySQLi Bağlantısı
*/
private $mysqli;

/*
* __Yapıcı
* Yeni bir MySQL bağlantısı kurar.
*/
function __construct()
{

$this-&gt;mysqli = new mysqli('localhost', 'root', '', 'buildinternet');

}

/*
* Veri ekle
* @params Kullanici_Adi, Sifre
* @returns bool
*/
function Veri_ekle($Kullanici_Adi, $Sifre)
{

//Gelen bilgileri veritabanına kaydet.
if(success)
{
return true;
} else {
return false;

}
}
}
php?&gt;</pre>
<p>Gördüğünüz üzere, sınıfımızın ne olduğunu, hangi iş için yazıldığını belirtmiş olduk. Hangi fonksiyonun hangi parametrelere ihtiyaç duyduğunu ve yaptığı işlemden sonra geriye nasıl bir değer döndürdüğünü yazdığımı açıklama satırlarında belirttik.</p>
<p>Bundan sonraki yazımız için gerekli bilgiyi topladığımıza inanıyorum, 3. yazımızda veritabanı işlemleri yapmak için kullanacağımız basit bir sınıf yazacağız.</p>
<p>Kurtman Çelik<br />
<a href="http://kurtmancelik.wordpress.com/" target="_blank">kurtmancelik.wordpress.com</a><br />
<strong>Kaynak: <a href="http://buildinternet.com/2009/07/an-introduction-to-object-oriented-php-part-2/" target="_blank">http://buildinternet.com/2009/07/an-introduction-to-object-oriented-php-part-2/</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-2.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nesne Yönelimli PHP &#8211; Bölüm 1</title>
		<link>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-1.html</link>
		<comments>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-1.html#comments</comments>
		<pubDate>Wed, 04 Nov 2009 16:03:32 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[Kurtman Çelik]]></category>
		<category><![CDATA[Nesne Tabanlı]]></category>
		<category><![CDATA[Nesne Yönelimli]]></category>
		<category><![CDATA[oop]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=3769</guid>
		<description><![CDATA[
Makaleler Hakkında
3 Bölümden oluşacak makale dizisinde, Object Oriented (Nesne Yönelimli) PHP&#8217;nin temellerini; kodunuzu yönetmeyi, bileşenleri birbirinden ayrı tutmayı ve gerektiğinde bunlara kolaylıkla erişebilmeyi konu alacağız.
3. makale ile birlikte; genel veritabanı işlemlerini gerçekleştirmek üzere basit bir MySQLi (MySQL Improved) sınıfı yazacağız.
Bu Yazıda

Nesneler(Objects) ve Sınıflar (Classes) nedir?
İlk sınıfımızı yazalım.
Sınıfların kullanımı.
Sınıfların kişiselleştirilmesi (Dinamizm eklenmesi)

1. Nesneler ve Sınıflar
Sınıflar, basitçte; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-179" title="oop-php-part1-banner" src="http://kurtmancelik.wordpress.com/files/2009/11/oop-php-part1-banner1.png" alt="oop-php-part1-banner" width="600" height="160" /></p>
<h2>Makaleler Hakkında</h2>
<p>3 Bölümden oluşacak makale dizisinde, Object Oriented (Nesne Yönelimli) PHP&#8217;nin temellerini; kodunuzu yönetmeyi, bileşenleri birbirinden ayrı tutmayı ve gerektiğinde bunlara kolaylıkla erişebilmeyi konu alacağız.<span id="more-3769"></span></p>
<p>3. makale ile birlikte; genel veritabanı işlemlerini gerçekleştirmek üzere basit bir MySQLi (MySQL Improved) sınıfı yazacağız.</p>
<h2>Bu Yazıda</h2>
<ol>
<li>Nesneler(Objects) ve Sınıflar (Classes) nedir?</li>
<li>İlk sınıfımızı yazalım.</li>
<li>Sınıfların kullanımı.</li>
<li>Sınıfların kişiselleştirilmesi (Dinamizm eklenmesi)</li>
</ol>
<h2>1. Nesneler ve Sınıflar</h2>
<p>Sınıflar, basitçte; fonksiyonlar deposu olarak tanımlanabilir. Başka türlü beznetmek gerekirse; Masaüstünüzdeki bir klasör sınıf ise o klasörün içindeki dosyalarda fonksiyonlardır.</p>
<p>Bir de klasik bir örnek üzerinden anlatalım:</p>
<p><img class="alignnone size-full wp-image-3771" title="oop-php-part1-dog-example" src="http://www.ceturk.com/images/oop-php-part1-dog-example.png" alt="oop-php-part1-dog-example" width="600" height="160" /></p>
<p>Resimde de gördüğünüz gibi köpek sınıfının, koşmak, yürümek, oyun oynamak, havlamak gibi fonksiyonları mevcut. Bu yapı bir sınıfın en genel tanımıdır.</p>
<p>Şimdi, sınıfın ne olduğunu az çok öğrendik. Peki bu sınıfı kodlarımızda nasıl kullanacağız. İşte bu noktada işin içine Nesneler giriyor. &#8220;Köpek&#8221; adındaki bir sınıfı kullanmak için bir bir değişken tanımlamamız gerekir.</p>
<p>Daha bağlantılı olması için sınıf yazımından itibaren kodumuza başlayalım:</p>
<h2>2. İlk sınıfımızı yazalım.</h2>
<p>İlk kodumuz olduğu için, olabildiğince basit ilerleyelim; Favori kod editörünüzü açın, myClass.php adına boş bir dosya oluşturun ve içine aşağıdaki kod bloğunu yazın:</p>
<pre class="brush:php">&lt;?php
class myClass
{
 function Merhaba()
 {
 echo "Merhaba!";
 }
}
?&gt;</pre>
<p>Eğer bu dosyayı sunucunuzda çalıştırmaya kalkarsanız, ekrana hiçbirşey yazmayacaktır. Çünkü yapmış oldumuz şey sadece bir sınıf tanımlamak, sınıfın içindekileri çalıştırmak adına şu an için birşey yapmadık.</p>
<p>Devamında yine boş bir dosya olışturup <em>myClass.php</em> ile aynı klasörün içine <em>index.php</em> adıyla  kaydedin.</p>
<h2>3. Sınıfların kullanımı.</h2>
<p><em>index.php</em> içinde, <em>myClass.php</em> içindeki sınıfımıza erişmek için, ilk önce sayfamıza <em>myClass.php</em>&#8216;nin referansını eklememiz gerek. Aşağıdaki kodda bunun nasıl yapıldığı gösterilmiştir:</p>
<pre class="brush:php">&lt;?php

 require_once('myClass.php');

 $myClass = new myClass();

 $myClass-&gt;Merhaba();

?&gt;</pre>
<p>Eğer bu sefer index.php&#8217;yi tarayıcınızda çalıştırırsanız ekranda &#8220;Merhaba dünya!&#8221; yazdığnı göreceksiniz. Şimdi yaptığımız çalışmanın üzerinden geçelim. Öncelikle  &#8220;<em>require_once(&#8216;myClass.php&#8217;)</em>&#8221; satırı ile <em>index.php</em> sayfamıza, içinde sınıfımızın bulunduğu <em>myClass.php</em> sayfamızı çağırdık. Bir sonraki satırda bu sınıfımızı bir değişken gibi kullanabilmemiz için gerekli olan <strong>nesne</strong> tanımlamasını yaptık, bu sayede <em>$myClass</em> nesnesi üzerinden sınıfımız içerisindeki &#8220;Merhaba()&#8221;  fonksiyonuna erişebiliyoruz. Son olarak tanımladığımız nesnenin <em>Merhaba()</em> fonksiyonunu çağırdık ve belirlediğimiz metin ekrana yazdırıldı.</p>
<h2>4. Sınıfların kişiselleştirilmesi</h2>
<p>Şimdi, elimizdeki hazır sınıfımızı kişiselleştirmek adına şöyle bir değişiklik yapalım: sitemize kullanıcı adı ve şifresiyle giriş yapmış birine adıyla hitap ederek merhaba diyelim. bunu yapmak için myClass.php&#8217;ye geri dönüp aşağıdaki değişiklikleri yapın:</p>
<pre class="brush:php">&lt;?php
class myClass
{
function Merhaba($kullanici)
{
echo "Hello " . $kullanici . "!";
}
}
?&gt;</pre>
<p>Bütün yaptığımız, ekrana  &#8220;Merhaba dünya&#8221; yazan fonksiyona bir parametre eklemekten ibaret. Bu sayede fonksiyonumuza <em>index.php</em>&#8216;den istediğimiz kullanıcı adını göndererek, o kişiye özel merhaba yazdırabiliriz.<em> index.php</em> sayfasına geri dönün ve aşağıdaki değişiklikleri uygulayın:</p>
<pre class="brush:php">&lt;?php

require_once('myClass.php');

$myClass = new myClass();

$myClass-&gt;Merhaba('Ali');

?&gt;</pre>
<p><em>index.php </em>sayfasını tarayıcınızda açtığınızda ekranda &#8220;Merhaba Ali!&#8221; yazdığını görürsünüz.</p>
<p>Bu çalışma ile de sınıflarımızı nasıl kişiselleştirip, dinamizm katabileceğimizi gördük.</p>
<p>Kurtman Çelik<br />
<a href="http://kurtmancelik.wordpress.com/" target="_blank">kurtmancelik.wordpress.com</a><br />
<strong>Kaynak: <a href="http://buildinternet.com/2009/07/an-introduction-to-object-oriented-php-part-1/" target="_blank">http://buildinternet.com/2009/07/an-introduction-to-object-oriented-php-part-1/</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/web-teknolojileri/nesne-yonelimli-php-bolum-1.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>İnci Bilgin Kimdir?</title>
		<link>http://www.ceturk.com/biyografi/inci-bilgin-kimdir.html</link>
		<comments>http://www.ceturk.com/biyografi/inci-bilgin-kimdir.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 21:54:26 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[Biyografi]]></category>
		<category><![CDATA[Ceturk Ekibi]]></category>
		<category><![CDATA[İnci Bilgin]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=3677</guid>
		<description><![CDATA[İnci Bilgin. 1988 İstanbul doğumluyum. İlköğretim ve lise eğitimimi İstanbul&#8217;da tamamladım. Üniversite eğitimimi Kocaeli Üniversitesi Bilgisayar Mühendisliği Bölümü&#8217;nde 3. sınıf öğrencisi olarak devam ettirmekteyim.
Bu zamana kadar okul ve staj projelerim olarak Ar-Ge araştırma konusu ile ilgilendim, Assembly, C, C#, .Net üzerine uygulamalar geliştirdim, geliştirmeye devam ediyorum. Şimdi ağırlıklı olarak C#, .Net ile ilgilenmekteyim.
Bunun dışında bilişim [...]]]></description>
			<content:encoded><![CDATA[<p>İnci Bilgin. 1988 İstanbul doğumluyum. İlköğretim ve lise eğitimimi İstanbul&#8217;da tamamladım. Üniversite eğitimimi Kocaeli Üniversitesi Bilgisayar Mühendisliği Bölümü&#8217;nde 3. sınıf öğrencisi olarak devam ettirmekteyim.<span id="more-3677"></span><br />
Bu zamana kadar okul ve staj projelerim olarak Ar-Ge araştırma konusu ile ilgilendim, Assembly, C, C#, .Net üzerine uygulamalar geliştirdim, geliştirmeye devam ediyorum. Şimdi ağırlıklı olarak C#, .Net ile ilgilenmekteyim.<br />
Bunun dışında bilişim alanındaki herşeyle ilgilenmeye çalışmaktayım. Gerek kulüp etkinlikleri olsun gerek seminer, konferans etkinlikleri olsun, bu tür aktiviteleri takip ederek bilişim alanında yer almaya çalışıyorum.</p>
<p>CETURK Ekibi’nde Haber Editörü olarak görev yapmaktadır.<br />
CETURK’teki yazılarına erişmek için : <a href="http://www.ceturk.com/etiket/inci-bilgin">http://www.ceturk.com/etiket/inci-bilgin</a><br />
CETUK Forumu’undaki prifline erişmek için : <a href="http://www.ceturk.com/forum/uyeler/bilinginci/">http://www.ceturk.com/forum/uyeler/bilinginci/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/biyografi/inci-bilgin-kimdir.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Raphael JavaScript Kütüphanesi</title>
		<link>http://www.ceturk.com/programlama/raphael-javascript-kutuphanesi.html</link>
		<comments>http://www.ceturk.com/programlama/raphael-javascript-kutuphanesi.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 20:30:04 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[Kurtman Çelik]]></category>
		<category><![CDATA[Raphael JS]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=3617</guid>
		<description><![CDATA[Kütüphane: Raphael JS
Versiyon: 1.0
Deneyim: Başlangıçdan Orta Seviyeye
Yaklaşık Uygulama Süresi: 30 Dakika
1. Hazırlık
İşe Raphael JavaScript Kütüphanesini indirerek başlayalım. Açılan pencerede, ekranın sağ üst köşesindeki sıkıştırılmış ve sıkıştırılmamış seçeneklerinden sıkıştırılmamış olanı indirin. Başlangıç olarak sıkıştırılmamış versiyonu indirmekle, dökümantasyondan daha net şekilde faydalanabilirsiniz.

İndirdiğimiz dosya ile birlikte basit bit HTML dosyası oluşturalım ve Raphael.js dosyasını kodlara dahil edelim. Ayriyetten [...]]]></description>
			<content:encoded><![CDATA[<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;">Kütüphane: <a href="http://raphaeljs.com/" target="_blank">Raphael JS</a><br />
Versiyon: 1.0<br />
Deneyim: Başlangıçdan Orta Seviyeye<br />
Yaklaşık Uygulama Süresi: 30 Dakika</div>
<h2><span id="more-3617"></span>1. Hazırlık</h2>
<p>İşe <a href="http://raphaeljs.com/" target="_blank">Raphael JavaScript Kütüphanesi</a>ni indirerek başlayalım. Açılan pencerede, ekranın sağ üst köşesindeki sıkıştırılmış ve sıkıştırılmamış seçeneklerinden sıkıştırılmamış olanı indirin. Başlangıç olarak sıkıştırılmamış versiyonu indirmekle, dökümantasyondan daha net şekilde faydalanabilirsiniz.</p>
<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;"><a href="http://raphaeljs.com/" target="_blank"><img src="http://nettuts.s3.amazonaws.com/462_raphael/downloadicon.jpg" alt="raphael js download" /></a></div>
<p>İndirdiğimiz dosya ile birlikte basit bit HTML dosyası oluşturalım ve Raphael.js dosyasını kodlara dahil edelim. Ayriyetten &#8220;our_script.js&#8221; (dosya isimlerini orjinal halde geçiriyorum) adında bir boş dosya daha oluştup onuda sayfamıza dahil edelim. Örnek kodlarımızı bu boş sayfa içine yazp çalıştıracağız. HTML dosyasının gövdesi olarak &#8220;<em>canvas_container</em>&#8221; ID&#8217;sine sahip bir DIV oluşturup, en minimal olacak şekilde bir CSS şablonu atayalım. Çalışmalarımız bu DIV&#8217;in içinde oluşturulacaktır.</p>
<pre class="brush:html">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Raphael Play&lt;/title&gt;
// &lt;![CDATA[
javascript</span>" src="path/to/raphael.js"&gt;
// ]]&gt;
// &lt;![CDATA[
javascript" src="path/to/our_script.js"&gt;
// ]]&gt;
&lt;style type="text/css"&gt;
#canvas_container {
width: 500px;
border: 1px solid #aaa;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="canvas_container"&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Önemli Not: <em>Raphael JS kütüphanesinin 1.0, en güncel sürümü 7 Ekim 2009  tarihinde yayınlanmıştır. Eğer elinizde daha önceki sürüm bulunuyorsa, en güncel sürümü indirmenizde fayda var. Zira çizim araçlarında önemli değişiklikler olmuş durumda.</em></p>
<h2>2. Kendi Çizim Alanımızı Oluşturalım</h2>
<p>Raphael JS ile çizim yaparken bir çizim alanına ihtiyacımız olacak. Bu alanı sayfamızda &#8220;<em>Raphael()</em>&#8221; nesnesiyle oluşturduğumuz &#8220;paper&#8221; referansıyla kullanacağız. Bu çizim alanının genişlik ve yüksekliğini belirlememiz gerek, ayriyetten isteğe bağlı olarak bu alanın bağımsız (absolute) bir pozisyona mı sahip olacağını veya bir elemente bakılarak mı konumlandırılacağını da belirleyebiliriz.</p>
<pre class="brush:javascript">var paper = new Raphael(x, y, width, height); //option (a)
var paper = new Raphael(element, width, height); //option (b)</pre>
<p>Biz 2. seçenek olan, bir elementi örnek alma yöntemini kullanacağız. Hali hazırda sayfamızda yer alan &#8220;<em>canvas_container</em>&#8221; DIV&#8217;ini kullanarak 500 x 500 boyutlarında bir çizim alanı oluşturalım. (Aşağıdaki kodu <em>&#8220;our_script.js</em>&#8221; içerisine yazıyoruz.)</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
}</pre>
<p>Bu şekilde; içinde çizim yapabileceğimiz bir alan ve bu alanı referans eden &#8220;<em>paper</em>&#8221; adında bir değişkenimiz oldu.</p>
<h2>3. Yerleşik Şekiller</h2>
<p>Şimdi, alanımıza birkaç şekil çizdirelim. Alanımızın orijin (origin) noktası, yani başlangıç noktası, sol üst köşedir. Yani çizim yaparken belirleyeceğimiz her X ve Y koordinatı, sol üst köşeye göre çizilir.</p>
<p>İlk olarak daire çizimi ile başlayalım:</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
var circle = paper.circle(100, 100, 80);
}</pre>
<p>Bu kod ekrana, yarıçapı 80 piksel olan ve merkezi X ve Y koordinatlarında 100. piksellere gelen bir daire çizer ve bu daireyi &#8220;circle&#8221; değişkenine referans eder. Yaptığmız çizimleri illa ki bir değişkene referans vermemiz de gerekmez. Doğrudan çizim fonksiyonunu çağırarak da ekrana çizim yaptırabilirsiniz.</p>
<pre class="brush:javascript">for(var i = 0; i &lt; 5; i+=1) {
var multiplier = i*5;
paper.circle(250 + (2*multiplier), 100 + multiplier, 50 - multiplier);
}</pre>
<p>Sırada kare çizimi var: ekrana kare çizdirmek için &#8220;rect()&#8221;  fonksiyou kullanılır. Sırasıyla, X ve Y koordinatlarını ve karenin genişlik-yükseklik değerlerini parametre alır.</p>
<pre class="brush:javascript">var rectangle = paper.rect(200, 200, 250, 100);</pre>
<p>Son olarak elips çizimi: dairenin parametrelerine benzer olarak; X ve Y koordinatlarının, yarı çapın veya dikey-yatay yarıçapların belirtilmesi gereklidir.</p>
<pre class="brush:javascript">var ellipse = paper.ellipse(200, 400, 100, 50);</pre>
<p>Bu kod ekrana; X=200, Y=400 koordinatlarına yatayda yarı çapı 100, dikeyde yarıçapı 50 olan bir elips çizer.</p>
<p>Bu 3 çizim tekniğin uyguladıkdan sonra, &#8220;our_script.js&#8221; dosyamız şu şekilde olmalı.</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
var circle = paper.circle(100, 100, 80);
for(var i = 0; i &lt; 5; i+=1) {
var multiplier = i*5;
paper.circle(250 + (2*multiplier), 100 + multiplier, 50 - multiplier)
}
var rectangle = paper.rect(200, 200, 250, 100);
var ellipse = paper.ellipse(200, 400, 100, 50);
}</pre>
<p>Eğer &#8220;index.html&#8221; dosyasını, tarayıcınızda açarsanız görüntü aşağıdakine benzer bir şekilde olacaktır.</p>
<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;"><img class="alignnone" src="http://nettuts.s3.amazonaws.com/462_raphael/builtinshapes.jpg" alt="" width="495" height="495" /></div>
<h2>4. Çizim Yolları</h2>
<p>Tümleşik şekilleri kullanmak çoğu zaman kullanışlı fakat esas serbest çizim rahatlığını sağlayan şey &#8220;<em>yollar</em>&#8221; (paths). Bir yol çizerken kalem veya fırçanızın ekrana iz bıraktğını hayal edersek; Çizim alanımızı ilk oluşturduğumuzda kalem/fırça varsayılan olarak ekranın sol üst köşesine konumlandırılır. Yapmamız gereken ilk şey kalemimizi çizim yapacağımız alana konumlandırmak.<br />
Örnek olarak kalemimizi, XY=0 noktasından X=250, Y=250 noktasına taşıyalım:</p>
<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;"><img src="http://nettuts.s3.amazonaws.com/462_raphael/move_to_centre.jpg" alt="" /></div>
<p>Bu hareket &#8220;<em>yol bildirimi</em>&#8221; (path string) olarak adlandırılmış.</p>
<p>Yol bildirimi, birden fazla metin formatında değerin, sıralı bir halde birbiri ardına yazılarak çalıştırılmasıyla yapılır. Örneğimizde kalemi X=250, Y=250&#8242;ye taşıma istiyoruz, öyleyse:</p>
<pre class="brush:javascript">"M 250 250"</pre>
<p>&#8220;M&#8221; harfi, &#8220;<em>Move</em>&#8221; yani taşımak anlamına gelir, bizim kodumuzda &#8220;Çizim yapma, sadece yerini değiştir&#8221; anlamında kullanılıyor. Sonraki &#8220;<em>250 250</em>&#8221; ise sırasıyla X ve Y koordinatlarıdır.</p>
<p>Şimdi, kalemimiz istediğmiz koordinatlarda olduğuna göre bir çizgi çalışması yapalım. Bunun için &#8220;l&#8221; (Küçük L) yani Line komutunu kullanıyoruz, ve her zaman ki gibi XY koordinatlarını veriyoruz.</p>
<pre class="brush:javascript">"M 250 250 l 0 -50"</pre>
<p>Bu kod sadece Y koordinatında yukarıya doğru 50 piksellik çizgi çizer. Biraz daha komplike olması açısından aşağıdaki satırı da yazabiliriz. Tetris oyunundan bir nesnenin çizimi.</p>
<pre class="brush:javascript">"M 250 250 l 0 -50 l -50 0 l 0 -50 l -50 0 l 0 50 l -50 0 l 0 50 z"</pre>
<p>Satırın sonundaki &#8220;<em>z</em>&#8221; çizim işleminin bittiğini gösterir. Son çizgi nerede olursa olsun &#8220;<em>z</em>&#8220;&#8216;den sonra, çizgi &#8220;<em>M</em>&#8221; ile belirttiğimiz noktaya tamamlanır.</p>
<p>Bu yol bildirimi satırlarını HTML sayfasında çalıştırmak için ise, Raphel JS&#8217;nin &#8220;<em>path()</em>&#8221; fonksiyonunu kullanırız. Örneği çalıştırmak için &#8220;our_script.js&#8221; dosyamızın aşağıdaki gibi olması lazım.</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
var tetronimo = paper.path("M 250 250 l 0 -50 l -50 0 l 0 -50 l -50 0 l 0 50 l -50 0 l 0 50 z");
}</pre>
<p>Kodları çalıştırdığınızda sayfanın görüntüsü aşağıdaki gibi olmalı.</p>
<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;"><img src="http://nettuts.s3.amazonaws.com/462_raphael/tetronimo.jpg" alt="" /></div>
<p>Path() fonksyionu ve yol bildirimi (path string) yönteminin kullanımı, Curve ve Arc (Kavis ve Yay) komutları kullanılarak daha da karmaşıklaştırılabilir. Bu tür komutların devamını ve açıklamalarını <a href="http://www.w3.org/TR/SVG/paths.html#PathData" target="_blank"><strong>SVG Path Specification (Yol Tanımları)</strong></a> sayfasında bulabilirsiniz.</p>
<h2>5. Nitelikler ile Stil Verme</h2>
<p>Yukarıda çizdiğimiz tetris parçası, ilk çizim için güzel görünebilir ama hiç estetik durmuyor mu?. Bunun çözümü ise nitelikler yardımı ile çizime stil vermekten geçiyor.<br />
<em>Attr()</em> fonksiyonu, nesnenin niteliklerini &#8220;başlık-değer&#8221; şeklinde ele alıp, bu değerleri değiştirebilmemizi sağlar. Yukarıdaki çizimimizi &#8220;<em>tetronimo</em>&#8221; adlı bir değişkende tutuyorduk, bu demektir ki, biz bu değişkene dolayısıyla çizime attr() ile yeni değerler verebiliriz. Attr() fonksiyonunu Path() ile birlikte kullanıp, yol bildirimi yaptığımız satırın sonuna ekliyoruz.</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
var tetronimo = paper.path("M 250 250 l 0 -50 l -50 0 l 0 -50 l -50 0 l 0 50 l -50 0 l 0 50 z");tetronimo.attr({fill: '#9cf', stroke: '#ddd', 'stroke-width': 5});
}</pre>
<p>Sonuç:</p>
<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;"><img src="http://nettuts.s3.amazonaws.com/462_raphael/tetronimo_filled_02.jpg" alt="" /></div>
<p>Daha anlaşılır bir kod bloğu:</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
var tetronimo = paper.path("M 250 250 l 0 -50 l -50 0 l 0 -50 l -50 0 l 0 50 l -50 0 l 0 50 z");tetronimo.attr(
{
gradient: '90-#526c7a-#64a0c1',
stroke: '#3b4449',
'stroke-width': 10,
'stroke-linejoin': 'round',
rotation: -90
}
);
}</pre>
<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;"><img src="http://nettuts.s3.amazonaws.com/462_raphael/tetronimo_gradient.jpg" alt="" /></div>
<p><a href="http://raphaeljs.com/reference.html#attr" target="_blank"><strong>Raphael JS&#8217;nin kendi dökümanları</strong></a> arasında Attr() fonksiyonu, oldukça geniş olarak anlatılmış. Nesnelerin diğer nitelikleriyle oynayarak daha farklı çalışmalar yapılabilir.</p>
<h2>6. Animasyonlar</h2>
<p>&#8220;<em>Animate()</em>&#8221; fonksiyonu, Raphael&#8217;in en güzel özelliklerinden bir tanesi. Bize jQoery&#8217;nin esque kütüphanesini (bir animasyon kütüphanesi) kullanarak nesnelerin nitelikleri ile animasyonlar oluşturmamızı sağlıyor ve istersek Easing denilen, animasyonun hızını, yönünü vb. değerleri değiştirmemizi sağlayan yardımcı yöntemleride kullanabiliriz. (Nesneler diyorum çünkü bahsi geçen nesneler doğdurdan çizimlerimize bağlı).<br />
Örnek olarak yine yukarıda çizdiğimiz &#8220;<em>tetronimo</em>&#8221; nesnesini kullanalım ve &#8220;<em>rotation</em>&#8221; yani rotasyon niteliğini değiştirerek 360 derece dönmesini sağlayalım. &#8220;<em>our_script.js</em>&#8221; dsoyasına yazacağımız kod:</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
var tetronimo = paper.path("M 250 250 l 0 -50 l -50 0 l 0 -50 l -50 0 l 0 50 l -50 0 l 0 50 z");
tetronimo.attr(
{
gradient: '90-#526c7a-#64a0c1',
stroke: '#3b4449',
'stroke-width': 10,
'stroke-linejoin': 'round',
rotation: -90
}
);tetronimo.animate({rotation: 360}, 2000, 'bounce');
}</pre>
<p>Koddaki 2000 değeri, animasyonun 2000 milisaniye(2 saniye)&#8217;de tamamlanacağını gösterir. Son olarak &#8220;bounce&#8221; ile de animasyonun nasıl bir ek-efektle tamamlanacağını belirtiyoruz.<br />
Yukarıdaki kodun canlı bir örneğini görmek için <a href="http://www.emunch.co.uk/tutorials/raphael_tut/examples/rotate_tetronimo.php" target="_blank">buraya tıklayın.</a></p>
<p>Ayriyetten animasyonumuz bittikden sonra çalıştırılmak üzere bir fonksiyon belirleyebiliriz, buna &#8220;<em>callback</em>&#8221; denir.<br />
Örnek olarak yukarıdaki animasyonumuz çalıştıkdan sonra &#8220;<em>tetronimo</em>&#8220;&#8216;yu eski haline geri getiren bir &#8220;<em>callback</em>&#8221; fonksiyonu tanımlayalım:</p>
<pre class="brush:javascript">tetronimo.animate({rotation: 360, 'stroke-width': 1}, 2000, 'bounce', function() {
/* callback after original animation finishes */
this.animate({
rotation: -90,
stroke: '#3b4449',
'stroke-width': 10
}, 1000);
});</pre>
<p>Buradaki &#8220;<em>this</em>&#8221; komutu, o an animasyonun içinde bulunan &#8220;tetronimo&#8221; nesnesini gösterir.<br />
Canlı örnek <a href="http://www.emunch.co.uk/tutorials/raphael_tut/examples/rotate_tetronimo_callback.php"><strong>burada.<br />
</strong></a></p>
<h3>Animasyonun Yönü ve Tipi</h3>
<p>Raphael, Flash&#8217;daki gibi; çizdiğiniz şekilleri eğip bükmek gibi olayların aynısı olmasada bezner türde olayları yapabilir (shape tweening). Bu yöntemi &#8220;animate()&#8221;&#8216;in içinde &#8220;path()&#8221; kullanarak gerçekleştiriyoruz. Bu sefer ki örneğimizde yine tetris&#8217;den bir örnek olarak &#8220;Z&#8221; şeklinde bir çizim yapıp onun üzerinde çalışacağız.<br />
İlk önce şeklimizi çizelim:</p>
<pre class="brush:javascript">"M 250 250 l 0 -50 l -50 0 l 0 -50 l -100 0 l 0 50 l 50 0 l 0 50 z"</pre>
<p>Aşağıdakine benzer bir görüntü olması lazım:</p>
<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;"><img src="http://nettuts.s3.amazonaws.com/462_raphael/z_tetronimo.jpg" alt="" /></div>
<p>Şimdi bu minimal düzeyde stillendirilmiş nesnemizi kullanarak &#8220;<em>animate()</em>&#8221; fonksiyonunu çağıracağız ve parametre olarak yeni bir &#8220;<em>path()</em>&#8221; nesnesi göndereceğiz.</p>
<pre class="brush:javascript">tetronimo.attr(
{
stroke: 'none',
fill: 'blue'
}
);tetronimo.animate({
path: "M 250 250 l 0 -50 l -50 0 l 0 -50 l -100 0 l 0 50 l 50 0 l 0 50 z"
}, 5000, 'elastic');</pre>
<p>Kodu çalıştırıp baktğınızda, orjinal şeklin eğilip bükülerek vermiş olduğumuz yeni path nesnesine dönüştüğünü görürsünüz.<br />
Canlı örnek <a href="http://www.emunch.co.uk/tutorials/raphael_tut/examples/tween_tetronimo.php"><strong>burada.</strong></a></p>
<h2>7. DOM&#8217;a Erişebilirlik</h2>
<p>Eğer HTML sayfamızdaki DOM elementlerine erişmek istiyorsak, bunu Raphael&#8217;in &#8220;<em>Node</em>&#8221; özelliği ile kolaylıkla yapabiliriz. bunu kullanarak çizimlerimize kullanıcı ile etkileşim geçecek olay fonksiyonları yazabiliriz.<br />
Örnek için ilk önce bir daire çizelim:</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);var circ = paper.circle(250, 250, 40);
circ.attr({fill: '#000', stroke: 'none'});
}</pre>
<p>Şimdi, dairenin ortasına &#8220;Raphael Js&#8221; yazdıracak fonksiyonu hazırlayalım:</p>
<pre class="brush:javascript">var text = paper.text(250, 250, 'Raphael JS')
text.attr({opacity: 0, 'font-size': 12}).toBack();</pre>
<p>&#8220;<em>Opacity=0</em>&#8221; yani varsayılan olarak sayfa ilk açıldığında, yazımız ekranda görünmeyecektir. Bu satırın hemen arkasından gelen &#8220;<em>.toBack()</em>&#8221; komutu ekrana yazdırığmız yazıyı, çizim alanındaki her nesnenin arkasına itecektir. Yani bu örnekde dairenin üzerine yazdırdığımız yazı aslında <em>.toBack</em> ile dairenin arkasına yerleştirilmiştir. Benzer şekilde &#8220;<em>.toFront()</em>&#8221; komutuda nesneyi diğer nesnelerin önüne getirmekte kullanılır.<br />
Çizmiş olduğumuz dairede &#8220;<em>MouseOver</em>&#8221; olayını yakalamak için &#8220;<em>node</em>&#8221; özelliğini kullanarak bir fonksiyon yazalım ve fare&#8217;nin daire üzerine geldiğinde el işareti olmasını sağlayalım:</p>
<pre class="brush:javascript">circ.node.onmouseover = function() {
this.style.cursor = 'pointer';
}</pre>
<p>Kodumuzun HTML tarafındaki karşılığı aşağıdaki gibidir:</p>
<pre class="brush:html">&lt;circle cx="250.5" cy="250.5" r="40" fill="#000000" stroke="none" style="fill: #000000; stroke: none; cursor: pointer"&gt;
&lt;/circle&gt;</pre>
<p>Son olarak daire nesnemize fare ile tıklandığında çalışacak bir kod bloğu yazalım:</p>
<pre class="brush:javascript">circ.node.onclick = function() {
text.animate({opacity: 1}, 2000);
circ.animate({opacity: 0}, 2000, function() {
this.remove();
});
}</pre>
<p>Kodda da görüldüğü üzere, daireye tıkladığımızda ilk önce görünmez olan yazımız 2 saniye içerisinde görünür olacak ve hemen ardından daire 2 saniye içinde görünmez olacaktır. Tanımladığımız <em>callback</em> fonksiyonu sayesine 2 saniye sonunda görünmez olan daire, &#8220;<em>this.remove()</em>&#8221; kodu ile sayfadan tamamen silinir.<br />
Canlı örnek <a href="http://www.emunch.co.uk/tutorials/raphael_tut/examples/onclick_make_circle_disappear.php"><strong>burada.</strong></a></p>
<h2>8. Örnek Uygulama: Beğeni Ölçme Bileşeni</h2>
<p>Buraya kadar ki öğrendiklerimizi, tek bir uygulamada hep birlikte uygulamak adına ufak bir beğendimbeğenmedim bileşeni yapalım:<br />
Yapacağımız çalışmanın sonucu <a href="http://www.emunch.co.uk/tutorials/raphael_tut/examples/mood_widget.php"><strong>buradaki</strong></a> gibi olacak.</p>
<div style="border: 1px solid #dedede; padding: 6px; display: block; width: 100%; height: auto; background-color: #efefef;"><img src="http://nettuts.s3.amazonaws.com/462_raphael/mood_meter.jpg" alt="" /></div>
<p>Başlangıç için kod bloğumuz aşağıdaki gibidir:</p>
<pre class="brush:javascript">window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
var circ = paper.circle(250, 250, 20).attr({fill: '#000'});
var mood_text = paper.text(250, 250, 'My\nMood').attr({fill: '#fff'});
}</pre>
<p>bu kod yarıçapı 20 piksel ve XY koordinatları 250 olan siyah bir daire çizer. Daha sonra içine &#8220;My \nMood&#8221; yazısı yazılır (My Mood&#8217;un kelime anlamı &#8220;Benim düşüncem&#8221;&#8216;e denk gelmektedir). Kodların arasındaki &#8220;\n&#8221; ise özel karakterdir ve bir alt satıra geçmek anlamına gelir. Yani &#8220;My&#8221;&#8216;dan sonra bir alt satıra geçilir ve &#8220;Mood&#8221; yazılır.<br />
Şimdi, sıra geldi değerlendirme bilgilerini hazırlamaya; Kullanıcının seçebileceği her seçeneğe karşılık bir metin ve renk hazırlayalım.</p>
<pre class="brush:javascript">moods = ['Çöplük', 'Güzel Değil', 'Orta', 'İyi Sayılır', 'Harika'];
colors = ['#cc0000', '#a97e22', '#9f9136', '#7c9a2d', '#3a9a2d']; </span><span style="color: #666699;">//varsayılan olarak 1. seçeneği aktif yap.
var my_mood = 1;</pre>
<p>Şimdi kullanıcının seçtiği değere göre yukarıdaki dizilerden, uygun olanları seçip ekranda gösterecek fonksiyonu yazalım:</p>
<pre class="brush:javascript">function show_mood() {
for(var i = 0; i &lt; my_mood; i+=1) {
(function(i) {
setTimeout(function() {
paper.circle(250, 250, 20).attr({
stroke: 'none',
fill: colors[my_mood - 1]
}).animate({translation: '0 ' + (-42 * (i+1))}, 2000, 'bounce').toBack();
}, 50*i);
})(i);
}
paper.text(250, 300, moods[my_mood - 1]).attr({fill: colors[my_mood - 1]}); </span><span style="color: #666699;">mood_text.node.onclick = function() {
return false;
}
circ.node.onclick = function() {
return false;
}
}</pre>
<p>&#8220;<em>show_mood()</em>&#8221; fonksiyonu içerisinde, kullanıcının seçtiği değeri her 50*i milisaniyede çizime dönüştüren anonim bir fonksiyon var. Her yeni daire oluşturulduğunda fonksiyon kendini çalıştırarak en son çizilen dairenin hemen üstüne yeni bir daire çiziyor ve bunu seçilen değer kadar tekrarlıyor. Her daire 2 saniye içerisinde bir öncekinin Y ekseninde üzerine ve görüntü olarak arkasına yerleştiriliyor.<br />
son olarak ekrana çizilen dairelerin ve yazıların click olayları kaldırılarak her tıklamada yukarıdaki kodun tekrar çalışmasının önüne geçiliyor.</p>
<p>Son olarak fonksiyonumuzu sayfaya entegre edelim, aşağıdaki kod ile yukarıda yazmış olduğumuz fonksiyonu ekrana ilk çizdirdiğimiz siyah daire ve içindeki yazıya bağlayalım:</p>
<pre class="brush:javascript">circ.node.onclick = show_mood;
mood_text.node.onclick = show_mood;</pre>
<p>Bu örneğimizi modifiye ederek ekolayzır benzeri bir bileşende yapabilirsiniz.</p>
<h2>Kapanış</h2>
<p>Umuyorum ki şimdiden Raphael JS&#8217;yi ve birbirinden ilginç çizim araçlarını kurcalamaya biraz daha meraklısınız.<br />
Hepinize iyi günler, iyi çalışmalar.</p>
<p>Kurtman Çelik<br />
kurtman.celik@hotmail.com<br />
<a href="http://kurtmancelik.wordpress.com/" target="_blank">http://kurtmancelik.wordpress.com/</a><br />
Kaynak: <a href="http://net.tutsplus.com/tutorials/javascript-ajax/an-introduction-to-the-raphael-js-library/" target="_blank">http://net.tutsplus.com/tutorials/javascript-ajax/an-introduction-to-the-raphael-js-library/</a><span style="font-size: 8pt;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/programlama/raphael-javascript-kutuphanesi.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>H. Tonguç Yılmaz Kimdir?</title>
		<link>http://www.ceturk.com/biyografi/h-tonguc-yilmaz-kimdir.html</link>
		<comments>http://www.ceturk.com/biyografi/h-tonguc-yilmaz-kimdir.html#comments</comments>
		<pubDate>Sun, 01 Nov 2009 16:00:02 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[Biyografi]]></category>
		<category><![CDATA[Ceturk Ekibi]]></category>
		<category><![CDATA[Hasan Tonguç YILMAZ]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=3459</guid>
		<description><![CDATA[
Liseyi Muğla / Fethiye Lisesi&#8216;nde, Lisans eğitimini İstanbul Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü (1994),  İstanbul Bilgi Üniversitesi İşletme Yönetimi (Yüksek Lisans &#8211; 1999) ve Işık Üniversitesi Sosyal Bilimler Fakültesinde (2003) almıştır. 1996&#8242;da TekstilBank Bilgi İşlem bölümünde Veritabanı ve Sistem Yöneticisi olarak görev almıştır. 2000 yılından bu yana Turkcell&#8217;de ORACLE geliştiricisi olarak birçok görev almıştır ve [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ceturk.com/etiket/hasan-tonguc-yilmaz" target="_blank"><img src="http://www.ceturk.com/images/tonguc.jpg" alt="tonguc" width="181" height="229" /></a></p>
<p><strong>Liseyi Muğla</strong> / <strong>Fethiye Lisesi</strong>&#8216;nde, <strong>Lisans</strong> eğitimini <strong>İstanbul Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü</strong> (1994),  İstanbul Bilgi Üniversitesi İşletme Yönetimi<em> (Yüksek Lisans &#8211; 1999) ve <strong>Işık Üniversitesi Sosyal Bilimler Fakültesi</strong>nde (2003) almıştır.<span id="more-3459"></span> 1996&#8242;da TekstilBank Bilgi İşlem bölümünde Veritabanı ve Sistem Yöneticisi olarak görev almıştır. 2000 yılından bu yana Turkcell&#8217;de ORACLE geliştiricisi olarak birçok görev almıştır ve 2009 Eylül ayında Turkcell &#8211; Gelir Odaklı İş Zekası takımında göreve başlamıştır. 2008&#8242;den beri Turkcell  Veri madenciliği departmanında </em>Oracle ETL geliştiricisi olarak görevine devam etmektedir.</p>
<p>CETURK Ekibi’nde <a href="http://www.ceturk.com/forum/oracle/" target="_blank">Oracle</a> Forum Sorumlusu olarak görev yapmaktadır.<br />
CETURK’teki yazılarına erişmek için : <a href="http://www.ceturk.com/etiket/hasan-tonguc-yilmaz" target="_blank">http://www.ceturk.com/etiket/hasan-tonguc-yilmaz<br />
</a>CETUK Forumu’undaki prifline erişmek için : <a href="http://www.ceturk.com/forum/uyeler/tonguc/" target="_blank">http://www.ceturk.com/forum/uyeler/tonguc/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/biyografi/h-tonguc-yilmaz-kimdir.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sadullah Keleş Kimdir?</title>
		<link>http://www.ceturk.com/biyografi/sadullah-keles-kimdir.html</link>
		<comments>http://www.ceturk.com/biyografi/sadullah-keles-kimdir.html#comments</comments>
		<pubDate>Sat, 31 Oct 2009 21:12:57 +0000</pubDate>
		<dc:creator>Kurtman Çelik</dc:creator>
				<category><![CDATA[Biyografi]]></category>
		<category><![CDATA[Ceturk Ekibi]]></category>
		<category><![CDATA[Sadullah Keleş]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=3406</guid>
		<description><![CDATA[
Sadullah Keleş 13 Ağustos 1980 de Zonguldak’ta doğdu. ilk ve orta okulu Zonguldak’ta, liseyi Kocaeli’de bitirdi. 1999 yılında Uludağ Üniversitesi Bilgisayar Programcılığı bölümüne giderek bilgisayar ile tanıştı. Bu bölümün ardından Kocaeli Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdi. Askerlik görevini İstanbul’da bitiren Sadullah halen İstanbul’da özel bir şirkette Yazılım Uzman Yardımcısı olarak iş hayatına devam etmektedir. Birçok [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ceturk.com/etiket/sadullah-keles" target="_blank"><img src="http://www.ceturk.com/images/sadullah21.jpg" alt="sadullah2" width="120" height="160" /></a></p>
<p>Sadullah Keleş 13 Ağustos 1980 de Zonguldak’ta doğdu. <strong>ilk ve orta okulu Zonguldak</strong>’ta, <strong>liseyi Kocaeli</strong>’de bitirdi. 1999 yılında <strong>Uludağ Üniversitesi Bilgisayar Programcılığı</strong> bölümüne giderek bilgisayar ile tanıştı. <span id="more-3406"></span>Bu bölümün ardından Kocaeli Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdi. Askerlik görevini İstanbul’da bitiren Sadullah halen İstanbul’da özel bir şirkette Yazılım Uzman Yardımcısı olarak iş hayatına devam etmektedir. Birçok bilişim topluluğunda yöneticilik görevlerini üstlenmektedir. Bu doğrultuda projeler geliştirmektedir.</p>
<p>CETURK Ekibi’nde <a href="http://www.ceturk.com/forum/c-csharp/" target="_blank">C#(CSharp)</a> Forum Sorumlusu olarak görev yapmaktadır.<br />
CETURK’teki yazılarına erişmek için : <a href="http://www.ceturk.com/etiket/sadullah-keles" target="_blank">http://www.ceturk.com/etiket/sadullah-keles<br />
</a>CETUK Forumu’undaki prifline erişmek için : <a href="http://www.ceturk.com/forum/uyeler/sa_keles/" target="_blank">http://www.ceturk.com/forum/uyeler/sa_keles/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/biyografi/sadullah-keles-kimdir.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
