<?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>Mustafa Murat Aydın &#187; facebook application</title>
	<atom:link href="http://www.mmaydin.com/tag/facebook-application/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mmaydin.com</link>
	<description>Bu adam neler yapıyor</description>
	<lastBuildDate>Sun, 31 Jul 2011 12:55:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>CakePhp ile Facebook Application Yapımı</title>
		<link>http://www.mmaydin.com/2009/12/cakephp-ile-facebook-application-yapimi/</link>
		<comments>http://www.mmaydin.com/2009/12/cakephp-ile-facebook-application-yapimi/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 00:46:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[facebook application]]></category>

		<guid isPermaLink="false">http://www.mmaydin.com/?p=76</guid>
		<description><![CDATA[Önceki yazımda cakephp kurulumunu anlatmıştım. Bu yüzden cakephp kurulum aşamasını geçiyorum isteyenler burdan bakabilir. İlk önce applicationımızın kullanacağı facebook kütüphanelerini indirmemiz gerekli. Facebook php kütüphanesini bu adresten indirebiirsiniz. indirdikten sonra cakephp içinde tutucağımız bölümü oluşturalım. cd /var/www/cakephp/app/vendors siz kendi uygulamanızı bulunduğunu dizine göre değiştiriniz. mkdir facebook indirdiğimiz sıkıştırılmış dosyayı açıyoruz. tar -zxvf facebook-platform.tar.gz oluşturduğumuz facebook [...]]]></description>
			<content:encoded><![CDATA[<p>Önceki yazımda cakephp kurulumunu anlatmıştım. Bu yüzden cakephp kurulum aşamasını geçiyorum isteyenler <a href="http://www.mmaydin.com/2009/12/cakephp-kurulumu/" target="_blank">burdan</a> bakabilir.</p>
<p>İlk önce applicationımızın kullanacağı facebook kütüphanelerini indirmemiz gerekli.</p>
<p>Facebook php kütüphanesini <a href="http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz" target="_blank">bu adresten</a> indirebiirsiniz.</p>
<p>indirdikten sonra cakephp içinde tutucağımız bölümü oluşturalım.</p>
<blockquote><p>cd /var/www/cakephp/app/vendors</p></blockquote>
<p>siz kendi uygulamanızı bulunduğunu dizine göre değiştiriniz.</p>
<blockquote><p>mkdir facebook</p></blockquote>
<p>indirdiğimiz sıkıştırılmış dosyayı açıyoruz.</p>
<blockquote><p>tar -zxvf facebook-platform.tar.gz</p></blockquote>
<p>oluşturduğumuz <strong><em>facebook</em></strong> klasörünün içine oluşan facebook-platform dizininde php klasorununun içini tamamen kopyalayıp <strong><em>cakephp/app/vendors/facebook</em></strong> klasorunun içine aktarıyoruz</p>
<blockquote><p>cp -r /home/mumi/indirilenler/facebook-platform/php/* /var/www/cakephp/app/vendors/facebook/.</p></blockquote>
<p>Cakephpde controllerlar controller sınfından türetilir. app_controller sınıfıda controller sınıfında türetilir. app_controller sınıfı boş tanımlanmıştır. Cakephp de oluşturduğumuz controllerları app_controller dan türetiyoruz.</p>
<p>Eğer kendi app_controllerımızı kullanmak istiyorsak bunu <strong><em>cakephp/app/controller</em></strong> içinde tanımlamamız gerekli. Bunu neden yapmak isteyebiliriz diye sorarsanız. Bazı controller larımız aynı fonksiyona gereksinim duyabilir ve hepsi için ayrı ayrı yazmak istemeyiz. Nasılsa bütün controllerlarımız app_controller sınıfından türetildiğine göre bu fonksiyonu sadece app_controller sınıfnda tanımlarsak, otomatikmen tüm sınflarda bu fonksiyon tanımlanmış olur.</p>
<p>Biz kendi app_controller ımızı oluşturalım. Facebook kütüphanesini bu sınıfın içinde çağıralım ki tüm sınıflara aktarılsın.<br />
cakephp/app/conroller içine app_controller.php oluşturalım ve içine aşağıdakileri yazalım.</p>
<pre class="brush: php">&lt;?php
/* Facebook kutuphanelerini import ediyoruz. */
App::import('Vendor', 'facebook'.DS.'facebook');
class AppController extends Controller {
    var $facebook;

    var $__fbApiKey = ' uygulamanizin facebook api anahtari ';
    var $__fbSecret = ' uygulamanızın gizlilik anahtari ';

    function __construct() {
        parent::__construct();

        /* 'Undefined index: facebook_config' uyarısını almamak icin bos atama yapiyoruz. */
        $GLOBALS['facebook_config']['debug'] = NULL;

        /* Facebook client API nesnesi olusturuyoruz. */
        $this-&gt;facebook = new Facebook($this-&gt;__fbApiKey, $this-&gt;__fbSecret);
    }
}
?&gt;
</pre>
<p>Facebook uygulama anahtarı ve gizlilik kodu almak için facebook developers uygulamasını profilimize eklemiş olmanız gerekli. Bunun için <a href="http://www.facebook.com/developers/" target="_blank">http://www.facebook.com/developers/</a> sayfasını açıp uygulamaya izin ver diyoruz. Bundan sonra yeni uygulama oluşturmak için sağ üst köşede bulunan <strong><em>Yeni Uygulama Oluştur</em></strong> düğmesine tıklıyoruz.</p>
<p>Sonraki adımda uygulamamızın adını girip facebookun şartlarını okuyup kabul ettikten sonra ( kabul etmediyseniz anlatımın gerisini okumanıza pek gerek kalmayacak <img src='http://www.mmaydin.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) <strong><em>create application</em></strong> düğmesine basıyoruz.</p>
<p>Açılan sayfada facebook API anahtarı ve gizli yazan bölümleri <strong><em>app_controller</em></strong> içinde tanımladığımız değişkenlere yazıyoruz.</p>
<p>Artık olusturacağımız uygulamayı yazmaya geldi. Uygulamamız sadece giren facebook kullanıcısının arkadaşlarının resimlerini ekrana basacak.</p>
<p>ilk önce arkadaslarının gosterilecigi sinfinin modelini olusturalım.</p>
<p><strong><em>cakephp/app/models/</em></strong> dizinin altına <strong><em>arkadaslar.php</em></strong> diye bir dosya olusturalim.</p>
<pre class="brush: php">&lt;?php
class Arkadaslar extends AppModel {
    var $name = 'Arkadaslar';
    var $useTable = false; /* Arkadaslar tablomuz olmadigi icin kullanmayacagimizi belirtiyoruz. */
}
?&gt;
</pre>
<p><strong><em>cakephp/app/controllers/</em></strong> dizinin altına <strong><em>arkadaslars_controller.php</em></strong> diye bir dosya olusturalim.</p>
<pre class="brush: php">&lt;?php
class ArkadaslarsController extends AppController {
    /* facebook kullanicisini tutacagimiz degisken */
    var $kullanici;

    /* beforeFilter fonksiyonu ozel bir fonksiyondur.Bu siniftan cagirilan her fonksiyondan once bu fonksiyon calistirilir. */
    function beforeFilter() {
        /* Facebook a login olup olmadigini sorgular. Giren kisinin arkadaslarini gosterebilmemiz icin facebook ta login olmasi gerekir. Eger bole bir gereksinimimiz olmasaydi disardan erisimlere acik bir uygulama yapabilirdik */
        $this-&gt;kullanici = $this-&gt;facebook-&gt;require_login();
    }

    /* view kisminda kullacagimiz sayfanin ismi de bu fonksiyonla ayni olmak zorunda*/
    function index() {
        /* Facebook tan kullanicinin arkadaslari bilgisi aliniyor. */
        $arkadaslar = $this-&gt;facebook-&gt;api_client-&gt;friends_get();
        /* Facebooktan aldigimiz arkadas bilgisinin arkadaslar degiskenine set ettik. Bu degiskeni arkadas view imizda kullanabilecegiz. */
        $this-&gt;set('arkadaslar', $arkadaslar);
    }
}
?&gt;
</pre>
<p>Şimdi view bölümünü oluşturmamız gerekli. Bunun içinde <strong><em>cakephp/app/views/</em></strong> dizinin altında <strong><em>arkadaslars</em></strong> dizini oluşturmamız gerekli.</p>
<blockquote><p>mkdir /var/www/cakephp/app/views/arkadaslars</p></blockquote>
<p>Bu dizinin içine <strong><em>index.ctp</em></strong> adinda bir dosya oluşturalım. İçine aşağıdakileri yazalım.</p>
<pre class="brush: php">&lt;p&gt;Arkadaslarim:&lt;/p&gt;
&lt;style type="text/css"&gt;
     li.mini-kafa { display:block; }
     ol.mini-kafalar {margin: 0; padding: 0;}
     ol.mini-kafalar li {float:left; margin: 0 5px 5px 0; list-style-type:none; width: 50px; height: 50px;}
&lt;/style&gt;
<ol class="mini-kafalar">
    &lt;?php foreach ($arkadaslar as $arkadas)  { ?&gt;
         &lt;li class="mini-kafa"&gt;
                 <!-- fb:profile-pic etiketi uye idsini verdigimiz kisinin fotografinin bize dondurur. -->
                 <fb:profile-pic uid="&lt;?php echo $arkadas; ?&gt;" size="square" linked="true">
                 </fb:profile-pic>
        &lt;/li&gt;
    &lt;?php } ?&gt;
</ol>
</pre>
<p>Uygulamamızı ilk açtığımızda ana sayfamızın giren kullanıcının arkadaşlarını gösteren sayfanın olmasını istiyorsak <strong><em>/cakephp/app/config/routes.php</em></strong> dosyasını değiştirmemiz gerekli.</p>
<blockquote><p>Router::connect(&#8216;/&#8217;, array(&#8216;controller&#8217; =&gt; &#8216;pages&#8217;, &#8216;action&#8217; =&gt; &#8216;display&#8217;, &#8216;home&#8217;));</p></blockquote>
<p>satırı bulup şu şekilde değiştirelim.</p>
<blockquote><p>Router::connect(&#8216;/&#8217;, array(&#8216;controller&#8217; =&gt; &#8216;arkadaslars&#8217;, &#8216;action&#8217; =&gt; &#8216;index&#8217;));</p></blockquote>
<p>böylece uygulamızın giriş sayfası <strong><em>arkadaslars</em></strong> sınıfının index fonksiyonu olmasını sağladık.</p>
<p>Cakephp nin ön tanımlı debug modu açık olarak gelir. Bu debugları kullanıcıların görmemesi gerekir. Bu yüzden debug modu kapatıyoruz. Bunun için de <strong><em>/cakephp/app/config/core.php</em></strong> sayfasında şu değişikliği yapmamız gerekli.<br />
Bu satırı</p>
<blockquote><p>Configure::write(&#8216;debug&#8217;, 2);</p></blockquote>
<p>Şununla değiştirelim.</p>
<blockquote><p>Configure::write(&#8216;debug&#8217;, 0);</p></blockquote>
<p>Böylece debug modu kapatmış olduk.</p>
<p>Şimdi basit bir template hazırlayalım.Bizim template imiz sadece view kısmınından gelen veriyi ekrana basacak. İsterseniz siz uygulamanızın header ve footer kısmını da buraya dahil edebilirsiniz, bu size her yerde header ve footer bölümlerini yazmanızı engelleyecektir.<br />
<strong><em>cakephp/app/views/layout/</em></strong> dizini içine <strong><em>default.ctp</em></strong> isimli bir dosya oluşturup içine şunları yazalım.</p>
<pre class="brush: php">&lt;?php
echo $content_for_layout;
?&gt;
</pre>
<p>Uygulamamızın facebook ta tam olarak gözükmesi için son bir düzenleme kaldı o da developers uygulamasına girip oluşturduğumuz uygulama ayarlarından canvas sekmesine gelip <strong><em>Geniş Sütun URL Bağlantısı</em></strong> bölüme uygulama adını yazmak , <strong><em>Canvas Callback URL</em></strong> olan bölüme de cakephp ile oluşturduğumuz sayfaları tutan yeri söylemek<br />
( örneğin <strong><em>http://code.mmaydin.com/cakephp-ornek/</em></strong> ) ve <strong><em>Görüntüleme Yöntemi</em></strong> seçenegini <strong><em>FBML</em></strong> yapmak(eğer bu seçeneği FBML yapmazsak fbml etiketlerimiz çalışmaz ve kullanıcıların resimlerini alamayız).</p>
<p>Şimdi uygulamamızı test etmeye geldi.<br />
Örnek uygulamaya <a href="http://apps.facebook.com/cakephp-ornek" target="_blank">bu adresten</a> uygulamanin kaynak koduna <a href="http://www.mmaydin.com/wp-content/uploads/2009/12/cakephp-facebook-application.tar.gz" target="_blank">burdan</a> ulaşabilirsiniz.</p>
<p>Örnek uygulamanın ekran görüntüsü;<br />
<a href="http://www.mmaydin.com/wp-content/uploads/2009/12/cakephp-ornek-e1261868778441.png"><img src="http://www.mmaydin.com/wp-content/uploads/2009/12/cakephp-ornek-e1261868778441.png" alt="Facebook cakephp-ornek uygulamasının ekran görüntüsü" title="facebook cakephp-ornek uygulaması" width="800" height="600" class="aligncenter size-full wp-image-63" /></a></p>
<p><strong>NOT:</strong> Kaynak kodun <strong><em>cakephp-ornek/app/controller/app_controller.php</em></strong> dosyasında uygulamanın api anahtarını ve gizli numarasını değiştirdiğiniz taktirde uygulamanız hazır duruma gelecektir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mmaydin.com/2009/12/cakephp-ile-facebook-application-yapimi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

