Aslında ortada bir proje filan yok şimdilik. Delphi, PHP ve Flash ile bir uygulama yapmak istemişimdir hep…
DeFlax’ın konusu "internet tabanlı öğrenim/eğitim sitesi"…

Önce eski dostum Delphi7 ile XML tabanlı bir ders düzenleme programı yapmak istedim. Ama artık D7 çok eski ve yaptığı XML ile Flash’ın XML okuma şekli farklı. İstesem biraz daha debelenip Flash’a Delphi’nin bildiği XML dosyaları okutabilirdim bu arada…
Sonra yine önceden keşfettiğimiz ama kullanmadığımız "Delphi for PHP (DfPHP) http://www.codegear.com/products/delphi/php" programı aklıma geldi. Yeni sürümü olan 2.0’ı indirdim. http://www.qadram.com/vcl4php ‘un yaptığı açık kaynak "VCL for PHP" asıl çekirdek. Örnekleri güzel. Hani Windows programlama (RAD) ne kadar çok basit kodlama ve görsel olarak çok ileri ise, biz de Web programlarında bu imkanları istiyoruz.

DfPHP ile ders düzenleme ve kullanıcı yönetimi kısımlarını yapmayı düşünüyorum. Flash ile de veritabanından okunan ders ve sınav bilgilerini hızlı, animasyonlu ve süslü bir şekilde sunumu yapılabilir. Ders sonlarında öğrenci öğrenme durumunu da takip edebilecek. idea e-learning (http://ideaelearning.com/sayfalar/index.asp) gibi… Bir de CISCO’nun mükemmel altyapısına da gıpta ile bakıyoruz (http://www.cisco.com/web/learning/netacad/index.html).

9-10 saat arabirimine alışma ve basit bir örnek yapmak için yetti bana. MySQL’den bir tabloyu okuma/yazma/arama/sayfalama yaptım. Toplam yazdığım 40 satır bile değil.

Delphi içinde PHP yazmak ilk başta kafa karıştırıcı. Yani kendinizi Pascal yazarken bulabilirsiniz. Ama PHP kodlamanız gerek… Bir de dosyaların nereden yayınlandığı konusunda kafa karışabiliyor. "Tools*Deployment Wizard" ile istenen yere sitenizi ve gerekli kütüphaneleri kaydediyor. Bu klasörü istediğiniz web sunucusunda sorunsuz olarak yayınlayabilirsiniz. Fakat her F9’a bastığınızda javascript hataları gösteriyor ise, projeniz ve DfPHP ayrı yerlerde bulunmasından kaynaklanıyordur. Yani projenizi DfPHP’nin tavsiye ettiği yerlere kaydedin. Mesela "c:Program FilesCodeGearDelphi for PHP2.0apache2htdocs" olabilir. Bende belki Vista yüzündendir, "C:UsersmeAppDataLocalVirtualStoreProgram FilesCodeGearDelphi for PHP2.0apache2htdocs" gibi bir adreste.
DfPHP içinde Apache2 ve PHP5 var. MySQL yok ama InterBase kurulumu install içinde var. SQL Server, Oracle ve ADO desteği de sağlanmış. "Data Explorer" ile Visual Studio’daki gibi veritabanı bağlantısı hazırlayıp, sürükle bırak ile form üzerinde grid oluşması var.

Zend nesneleri ile kullanıcılar şifreli olarak girebilir ve yetki verilen işlemleri yapabilir. Her kullanıcı için sayfadaki nesnelere yetki atanabiliyor. Ajax, CSS ve dinamik grafik yapımı gibi özellikler ise artık daha fazla kullanışlı. İlerledikçe webçi olmak daha zevkli olmaya başlıyor…

 
Örnek Kodlar:
 
       public $sayfaNo = 0;
       function Unit1Create($sender, $params)
       {
//Kaçıncı bloktayız
        global $sayfaNo;
        $sayfaNo = 0;
       }
 
       function Unit1BeforeShow($sender, $params)
       {
//Label2’yi güncel tutalım
        global $sayfaNo;
          $this->Label2->Caption= "Toplam:".$this->Query1->Fields["toplam"]."<br>LStart:"
            .$this->tbcountries1->LimitStart.", LCount:".$this->tbcountries1->LimitCount."<br>Sayfa:".$sayfaNo ;
       }
       function DBPaginator1Click($sender, $params)
       {
//Paginator biraz tuhaf çalışıyor… ??
        global $sayfaNo;
       $sayfa = $_GET["DBPaginator1"];
       if($sayfa=="first") $sayfa=0; else
       if($sayfa=="last") $sayfa=round(($this->Query1->Fields["toplam"]-$this->tbcountries1->LimitCount) / $this->tbcountries1->LimitCount);  else
       if($sayfa=="prev") $sayfa=$sayfaNo-1; else
       if($sayfa=="next") $sayfa=$sayfaNo+1;
       $sayfaNo=$sayfa;
       $this->tbcountries1->LimitStart=$sayfa*$this->tbcountries1->LimitCount;
       redirect("unit1.php");
       }
       function Button1Click($sender, $params)
       {
//filter ile arama yapımı
       $this->tbcountries1->LimitStart=0;
       $this->tbcountries1->LimitCount=($this->Query1->Fields["toplam"]);
       $this->tbcountries1->Filter="countries_name LIKE ‘%".$this->Edit1->Text."%’";
       $this->DBPaginator1->Visible=false;
       redirect("unit1.php");
       echo "Arama yapıldı!";
       }
       function Button2Click($sender, $params)
       {
//tüm kayıtları göster
       $this->tbcountries1->LimitStart=0;
       $this->tbcountries1->LimitCount=10;
       $this->tbcountries1->Filter="";
       $this->DBPaginator1->Visible=true;
       redirect("unit1.php");
       }

Örnek Uygulamanın Resimleri: