Ö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 klasörünün içine oluşan facebook-platform dizininde php klasorununun içini tamamen kopyalayıp cakephp/app/vendors/facebook klasorunun içine aktarıyoruz
cp -r /home/mumi/indirilenler/facebook-platform/php/* /var/www/cakephp/app/vendors/facebook/.
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.
Eğer kendi app_controllerımızı kullanmak istiyorsak bunu cakephp/app/controller 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.
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.
cakephp/app/conroller içine app_controller.php oluşturalım ve içine aşağıdakileri yazalım.
<?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->facebook = new Facebook($this->__fbApiKey, $this->__fbSecret);
}
}
?>
Facebook uygulama anahtarı ve gizlilik kodu almak için facebook developers uygulamasını profilimize eklemiş olmanız gerekli. Bunun için http://www.facebook.com/developers/ sayfasını açıp uygulamaya izin ver diyoruz. Bundan sonra yeni uygulama oluşturmak için sağ üst köşede bulunan Yeni Uygulama Oluştur düğmesine tıklıyoruz.
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
) create application düğmesine basıyoruz.
Açılan sayfada facebook API anahtarı ve gizli yazan bölümleri app_controller içinde tanımladığımız değişkenlere yazıyoruz.
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.
ilk önce arkadaslarının gosterilecigi sinfinin modelini olusturalım.
cakephp/app/models/ dizinin altına arkadaslar.php diye bir dosya olusturalim.
<?php
class Arkadaslar extends AppModel {
var $name = 'Arkadaslar';
var $useTable = false; /* Arkadaslar tablomuz olmadigi icin kullanmayacagimizi belirtiyoruz. */
}
?>
cakephp/app/controllers/ dizinin altına arkadaslars_controller.php diye bir dosya olusturalim.
<?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->kullanici = $this->facebook->require_login();
}
/* view kisminda kullacagimiz sayfanin ismi de bu fonksiyonla ayni olmak zorunda*/
function index() {
/* Facebook tan kullanicinin arkadaslari bilgisi aliniyor. */
$arkadaslar = $this->facebook->api_client->friends_get();
/* Facebooktan aldigimiz arkadas bilgisinin arkadaslar degiskenine set ettik. Bu degiskeni arkadas view imizda kullanabilecegiz. */
$this->set('arkadaslar', $arkadaslar);
}
}
?>
Şimdi view bölümünü oluşturmamız gerekli. Bunun içinde cakephp/app/views/ dizinin altında arkadaslars dizini oluşturmamız gerekli.
mkdir /var/www/cakephp/app/views/arkadaslars
Bu dizinin içine index.ctp adinda bir dosya oluşturalım. İçine aşağıdakileri yazalım.
<p>Arkadaslarim:</p>
<style type="text/css">
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;}
</style>
<?php foreach ($arkadaslar as $arkadas) { ?>
<li class="mini-kafa">
</li>
<?php } ?>
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 /cakephp/app/config/routes.php dosyasını değiştirmemiz gerekli.
Router::connect(‘/’, array(‘controller’ => ‘pages’, ‘action’ => ‘display’, ‘home’));
satırı bulup şu şekilde değiştirelim.
Router::connect(‘/’, array(‘controller’ => ‘arkadaslars’, ‘action’ => ‘index’));
böylece uygulamızın giriş sayfası arkadaslars sınıfının index fonksiyonu olmasını sağladık.
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 /cakephp/app/config/core.php sayfasında şu değişikliği yapmamız gerekli.
Bu satırı
Configure::write(‘debug’, 2);
Şununla değiştirelim.
Configure::write(‘debug’, 0);
Böylece debug modu kapatmış olduk.
Ş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.
cakephp/app/views/layout/ dizini içine default.ctp isimli bir dosya oluşturup içine şunları yazalım.
<?php
echo $content_for_layout;
?>
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 Geniş Sütun URL Bağlantısı bölüme uygulama adını yazmak , Canvas Callback URL olan bölüme de cakephp ile oluşturduğumuz sayfaları tutan yeri söylemek
( örneğin http://code.mmaydin.com/cakephp-ornek/ ) ve Görüntüleme Yöntemi seçenegini FBML yapmak(eğer bu seçeneği FBML yapmazsak fbml etiketlerimiz çalışmaz ve kullanıcıların resimlerini alamayız).
Şimdi uygulamamızı test etmeye geldi.
Örnek uygulamaya bu adresten uygulamanin kaynak koduna burdan ulaşabilirsiniz.
Örnek uygulamanın ekran görüntüsü;

NOT: Kaynak kodun cakephp-ornek/app/controller/app_controller.php dosyasında uygulamanın api anahtarını ve gizli numarasını değiştirdiğiniz taktirde uygulamanız hazır duruma gelecektir.