Üye GİRİŞİ

Son eklenen makale ve haberler

  Programlama » PHP

3 KATMANLI MİMARİ VE PHP

Sayfa 3

Ceviz.Net Pdf Çıktısı Al
 
Ceviz.Net Doc Çıktısı Al
 

Ana php dosyamız :


index.php

 

<?php
error_reporting
(0); 
// hataları gizle
session_start(); 
// oturumu başlat

define("BASEDIR"dirname(__FILE__
));

// sınıf ve gerekli dosyaları yükle

include_once(BASEDIR "/class/thumb.class.php"
);
include_once(
BASEDIR "/class/functions.php"
);
include_once(
BASEDIR "/class/database.class.php"
);
include_once(
BASEDIR "/class/general.class.php"
);
include_once(
BASEDIR "/libs/Smarty.class.php");
include_once(
BASEDIR "/class/page.class.php"
);
include_once(
BASEDIR "/class/news.class.php"
);

$database             = new DataLayer(); 
// veritabanı sınıfını oluştur
$theme                = new Page(); 
// tema sınıfını oluştur

@include("sistem/$theme->page.php"); 
// modülü yükle
echo $theme->fetch($theme->tpl); 
// temayı işle

?>

 

Ana template dosyamız :


templates/main/main.tpl

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9" />
<title>3 katmanli mimari</title>
<link href="templates/css/stil.css" _fcksavedurl=""templates/css/stil.css"" _fcksavedurl=""templates/css/stil.css"" _fcksavedurl=""templates/css/stil.css"" _fcksavedurl=""templates/css/stil.css"" _fcksavedurl=""templates/css/stil.css"" _fcksavedurl=""templates/css/stil.css"" _fcksavedurl=""templates/css/stil.css"" _fcksavedurl=""templates/css/stil.css"" rel="stylesheet" type="text/css" />
</head>
<body>
<center>
<div id="main">
<table width="100%" bgcolor="#003366" cellpadding="0" cellspacing="0" align="center">
 <tr>
  <td><img src="templates/images/main/logo.gif" _fcksavedurl=""templates/images/main/logo.gif"" _fcksavedurl=""templates/images/main/logo.gif"" _fcksavedurl=""templates/images/main/logo.gif"" _fcksavedurl=""templates/images/main/logo.gif"" alt=""></td>
 </tr>
 <tr>
  <td bgcolor="#003366" colspan="2">
  <div id="nav">
  <table width="100%" cellspacing="0" cellpadding="0">
   <tr>
     <td class="fize"><a href="index.php">Anasayfa</a></td>    
     <td class="fize"><a href="index.php?page=news&action=view_category&category=1">Sağlık</a></td>   
     <td class="fize"><a href="index.php?page=news&action=view_category&category=2">Ekonomi</a></td>   
     <td class="fize" width="400"></td>    
   </tr>
  </table>
  </div>

  </td>
 </tr>
 <tr>
  <td width="100%" bgcolor="#003366">
   <div id="content">
   <table width="100%" cellpadding="0" cellspacing="0">
    <tr>
     <td width="100%" valign="top">
      <div id="beyaz">{$content}</div>
     </td>
    </tr>
   </table>
   </div>  
  </td>
 </tr>
 <tr>
  <td>
   <div id="footer">
    <div id="first"><div class="yazilim">yazılım <br /> <a class="beyaz" href="mailto:info@internet.com.tr">Emre Çevik</a></div></div>
    <div id="second">Copyright© 2007 Benim Şirketim</div>
   </div>
  </td>
 </tr>
</table>

</div>
</center>
</body>
</html>

 


sistem/index.php
(index.php?page=index)

 

<?php

$news_class 
= new News($database); 
// Haber sınıfını oluştur

$items         $news_class->ShowHeadlines(5);     
// 5 tane ana haberi çağır (sağ kısım)
$list         $news_class->ListHeadlines(10,5); 
// 5 haberden sonra 10 tane kısa haber çağır (sol kısım)


$theme->assign('items'$items
);
$theme->assign('list'$list
);

$fetch_tpl "home/index.tpl"
;  
$theme->assign('content'$theme->fetch($fetch_tpl
));        

?>

 


templates/home/index.tpl
(index.php?page=index)

 

<table width="100%" cellpadding="0" cellspacing="0" border="0">
 <tr>
  <td width="430" valign="top">
  {foreach from=$items item=news}
  <table width="100%" cellpadding="0" cellspacing="0">
   <tr>
    <td>
     <div class="newsdiv">
      <div class="titlediv"><a href="{$news->link}">{$news->title}</a></div> 
      {if $news->image}<div class="news_img"><img src="{$news->image}" /></div>{/if}
      {$news->info}
      <div style="clear:both;"></div>
     </div>
    </td>
   </tr>
  </table>
  {/foreach}

  </td>
  <td valign="top">
  {if $list}
  <div class="newsdiv">
  <div class="titlediv" style="margin-bottom:1px;">Diğer haberler</div>
  {foreach from=$list item=ls}
   <div class="listdiv"><a href="{$ls->link}">{$ls->title}</a></div>
  {/foreach}
  </div>
  {/if}
  </td>
 </tr>
</table>


 

Haber dosyamız : (index.php?page=news)


sistem/news.php

 

<?php

$news_class 
= new News($database); 
// Haber sınıfını oluştur

switch ($_REQUEST["action"
])
{
    case 
"view_news"
:
        
$items $news_class->ShowNews($_REQUEST["id"]); 
// Haber detaylarını çağır
        
$theme->assign('items'$items
);
        
$fetch_tpl "news/news_details.tpl"
;
    break;
    
    case 
"view_category"
:
        
$categ int($_REQUEST["category"
]);
        if(!empty(
$categ
))
        {
            
$w_category "category = '".$categ."' "
;    
            
$n_category $categ
;
            
$s_category "&category=".$categ
;
        } else {
            
$w_category ""
;
            
$n_category ""
;
            
$s_category ""
;
        }
        
        if(empty(
$_REQUEST["p"]) or $_REQUEST["p"] == 0$_REQUEST["p"] = 1
;

        
        
$fields        = array("COUNT(id) as total"
);
        
$where        = array($w_category
);
        
$table        = array("news"
);
        
            
        
$query     $database->Query($fields$table$where
);
        
$sql     $query->SingleRow
();

        
$news_page     int($_REQUEST["p"
]);
        
$news_total $sql->total
;
        
$news_limit    3
;
        
$start        = ($news_page 1) * $news_limit
;
        
        
        
$items $news_class->ShowHeadlines($news_limit,$start,$n_category); 
// Ana haberleri çağır
        
$pagination $news_class->Pagination("index.php","news","view_category",$s_category,$news_page,$news_total,$news_limit); 
// sayfalama çubuğunu çağır 
        
$theme->assign('items'$items
);
        
$theme->assign('pagination'$pagination
);
        
$fetch_tpl "news/news_archive.tpl"
;
    break;
}

$theme->assign('content'$theme->fetch($fetch_tpl
));

?>

 

Haber Temalarımız :


templates/news/news_archive.tpl
(index.php?page=news&action=view_category)

 

<table cellpadding="0" cellspacing="0">
 <tr>
  <td width="430" valign="top">
  {foreach from=$items item=news}
  <table width="100%" cellpadding="0" cellspacing="0">
   <tr>
    <td>
     <div class="newsdiv">
      <div class="titlediv"><a href="{$news->link}">{$news->title}</a></div> 
      {if $news->image}<div class="news_img"><img src="{$news->image}" /></div>{/if}
      {$news->info}
      <div style="clear:both;"></div>
     </div>
    </td>
   </tr>
  </table>
  {/foreach}
  {$pagination}
  </td>
  <td valign="top">

  </td>
 </tr>
</table>

 


templates/news/news_details.tpl
(index.php?page=news&action=view_news)

 

<table width="100%" cellpadding="0" cellspacing="0">
 <tr>
  <td width="100%" valign="top">
     <div class="newsdiv">
      <div class="titlediv">{$items->title}</div>
      <div style="padding:5px">
      {if $items->image}<div class="news_img"><img src="{$items->image}" /></div>{/if}
      {$items->info}
      <br />
      {$items->more}
      </div>
      <div style="clear:both;"></div>
     </div>  
  </td>

 </tr>
</table>


 

Tüm dosyaları zip halinde indirmek için tıklayın.

Bu makaleye ilgi olması halinde makaleyi devam ettirmeye ve geliştirmeye çalışacağım. Makale ile her türlü soru, sorun ve önerinizi forumda yazabilirsiniz.

Kolay gelsin.
Emre Çevik - info@internet.com.tr


Emre 20.05.2007
Sayfalar: 1 2 3


co.mments  del.icio.us  digg  Furl  NewsVine  Reddit  Spurl  TailRank  Wists   



Rating : 10 üzerinden 9.43
 



Tümünü Göster / Sadece Başlıklar Yorumlar

Akifemre Makale...
Gercekten cok guzel bir makale, tesekkurler jure.
Artik basma kalip, gelisi guzel kod yazan web programcilarinin fonksiyonel ve nesneye yonelik profesyonel kod yazimina gecmeleri acisindan epey egitici olmus.

Nesneye yonelik programlama konusunda bilgi eksigi olanlar http://www.ceviz.net/php-ve-nesneye-yonelik-programlama_a77.html veSmarty kullanmak istemeyenler dehttp://www.ceviz.net/php-nesneleri-template_a270.html makalelerini inceleyebilirler.


 
anov Server-side kontrol mantığı var mıdır?
Php bilmem, sadece merak ettiğim için soruyorum.
asp.net te Bir textbox un içerdiği değere .Text diyerek ulaşabilirsiniz. Smarty ile 3 katmanlı mimari kullandığımda php bana bu tip imkanları sağlayabilir mi?
 
Mehmet AK OOP tabanında bir açıklama olmuş
Gerçekten bilinçli ve doğru kodlamanın temellerini anlatmışsın

tebrik ediyorum
 
jure asp.net vs smarty
asp.net ile php yi bu açıdan kıyaslamak mümkün değildir. bende asp.net'i çok iyi bilmem ama bildiğim karadıyla object oriented temel üzerine kuruldu yani herşey nesnedir mantığıyla çalışıyor.

ayrıca asp.net ile karşılaştırma yapacak olursak

.aspx -> .tpl (smarty )
.aspx.cs -> .php
.cs -> .php (class)

dosyaları olarak birbirine karşılık gelir. yani sonuç olarak bunu smarty ile değilde php kısmında yapmak gerekecektir. çünkü asp.net te tex1.Text aspx.cs dosyasında yapılıyor. bir form classı yapıldığında php dede bu mümkün olabilir.
 
anov Tebrikler, fakat...
Öncelikle tebrik etmek istiyorum, bir makale için oldukça iyi bir uygulama olmuş. Fakat katmanlar ile ilgili bazı problemler olduğunu düşünüyorum. Biraz eleştiri yazayım bu kadar övgünün üstüne

1- Hiç bir zaman veri katmanının yaptığı işler, iş katmanında bulunmaz. Yani iş katmanı veri/veritabanı/veri kaynağı hakkında hiç bir şey bilmez. Sizin iş katmanı olarak tanıttığınız sınıflarınızda SQL kodları var, bu mimari açıdan yanlıştır. Database layer bir dosya olarak belirtilmiş, aslında o dosya da veritabanına erişimi kolaylaştıran bir Helper nesne ve iş katmanı olarak belirtilen sınıfların bir kısmı da aslında veri katmanına dahil edilmeli.

Ayrıca sistem klasörü içindeki dosyalar hangi katmana dahil oluyor? Belirtilmemiş.

Sınıfların tasarımı ile de ilgili problemler var, sınıfların içindeki metodlar birbirini kullanmıyor hiç ve hemen hemen hiç sınıf attribute'u ve property'si tanımlanmamış. Sınıflar kabaca sadece namespace görevi görüyor gibi.

Bana kalırsa OOP'un faydalarını kullanabilmek için Design Patterns incelenmeli ve o pattern'leri kullanan sınıflar tasarlanmalı. Heralde OOP'a en temiz geçiş bu olur.

 
jure eksiklikler
evet haklsısınız bazı problemler olabilir, ben çok iyi bişey yaptım demiyorum fakat yararlı olacağı sanıyorum. Bu tip bilgileri bulmanız çok zor özelikle türkçe kaynak açısından.

" Ayrıca sistem klasörü içindeki dosyalar hangi katmana dahil oluyor? Belirtilmemiş."

"iş katmanına dahil elbette gerekli olacağını düşünememiştim".

"Hiç bir zaman veri katmanının yaptığı işler, iş katmanında bulunmaz."

Aslında sql kodları yoktu

$db->query($table,$fields,$values,$where);

gibi idi fakat ben bunu yetiştiremeyeceğim için (pazartesi finallerin başlıyor) böyle bir başlangıç yapma zorunluluğu hissettim.


" Sınıfların tasarımı ile de ilgili problemler var, sınıfların içindeki metodlar birbirini kullanmıyor "

ilk baştaki sınıf şemasına bakarsanız bunu bir başlangıç olduğunu görürsünüz. İlerleyen yerlerde methodlar birbirini elbet kulanacaktır ama yine dedigim gibi bunu asp.net ile kıyaslamamak lazım.

php4 ve classlar ile ilgili ayrıntılı bilgi http://www.php.net/manual/en/language.oop.php buradan alınabilir.

Sonuçta bu projenin iş katmanında su anda 3-5 fonksiyondan kullanıyor şu aşamada bu giriş için yazılmıştır ileride biraz daha gelişecektir tabi bunu derken bu benim bakış açım olduğu için yanlış şeylerde illaki yapılacaktır. Bunlarıda siz söyleyince öğreneceğiz.

Teşekkürler
 
turansoylu Elinize Sağlık
Konunun özellikle ilk kısmı oldukça anlaşılır. PHP bilmediğim için öyle söylüyorum. Gerçekten çok güzel çalışmalar bunlar.. Yazan tüm arkadaşlardan Allah razı olsun.
 
ali mvc
flash tabanlı ria geliştiricisi olarak bahsettiğiniz model bizimde kendi web tabanlı projelerde kullandığımız modeldir.Buna kısaca mvc ingilizce olarak model view controller olarak ifade edilmektedir.Yanlız ben oldum olası php ile kod yazmayı sevemediğimden bu mimariyi phpde uygulama fırsatım olmadı.Makaleniz umarım buna bir önayak olacaktır.
Flash uygulamaları geliştiren arkadaşlar model kısmında amfphp projesinden faydalanarak, çok daha ayrık uygulamalar geliştirebilmektedir.Nitekim flash componentleri tamamıyla bu mimari üzerine geliştirilmiştir.
Bunu dışında mvc tek başına bir pattern olmaktan daha ziyade Observer ve Singleton gibi patternları kendi yapısında derlemiş karma bir patterndir.Mvc yanı sıra bu patternlara da gözatmanın faydası olacaktır.
 
Can Asp.net versiyonu
Elinize saglik baya bir emek harcanarak yazilmis bir makale. ben php ile ilgilenmedigim icin kodu incelemedim ama n-tier mimarilerde pattern kullanimini ögrenmek istiyorum.bu makalenin yada benzerinin asp.net versiyonu yazilsa tam süper olucak. birde pattern ler kullanilirsa dadindan yinmez. :)
 
jure makalede değişiklik
anov'un söylemesi üzerine veritabanı sınıfında (database.class.php) bazı değişiklikler yaptım. bundaki değişiklikler nedeniyle news.class.php ve news.php dede bazı değişiklikler oldu. bilginize. 23.05.2007
 
anov Bu tür çalışmaların devamını dilerim
Yanlış anlaşılmak istemem, php ile asp.net karşılaştırılamaz tabii bunun için erken olabilir. Ancak bir gün php nin o güce erişebileceğini tahmin edebiliyorum. Bu tip bilgilendirici çalışmaların devamı ile ancak biz bu yöne yönelebiliriz. template mantığından ziyade tam anlamıyla (render) mantığını içinde bulunduran ve kolay kullanılabilen (kod ve html i veya kod ve sql i iç içe barındırmayacak) bir yapıyı bir gün gerçekleştireceğini ümit ediyorum. Bu durumda php yi "henüz yeterince olgunlaşmamış" olarak görmemi umarım anlayışla karşılayacaksınız. Kolay gelsin.
 
Ahmet Guzel çalışma
İyi bir çalışma olmuş, bayağıdır patTemplate takıntısından kurtulup smarty ile siteler yapmaya başlasam dediğim zamanda okudum makalenizi, direkt elimdeki bir işi smarty ile yapmaya başladım, smarty nin hızı konusunda aklıma takılan birkaç durum vardı ama dün yaptığım testlerden sonra, sabit bölümleri(menuler, ust bar vb.) cache atarak yaptığım ölcümlerde hız kaygımın boşa olduğu ortaya çıktı.
 
jure ahmet : smarty
\libs\plugins içerisinden kullanmadiginiz veya kullanmayacaginiz pluginleri silebilirsiniz.
 
ismail teşekkürler
güzel ve aydınlatıcı bir makale olmuş. teşekkürler
 
o--d Devamını bekliyoruz
Makalenin devamını diliyorum. Tesekkurler paylastığın icin.
 
Lisans Güzel
Devamını bekliyoruz gerçekten hoş bir makale.
 
emin eyvallah
çok sağolun tam smarty nedir onu araştırıyordum üstüne bu makaleyi buldum ALLAH razı olsun
 
anılkan gayet başarılı bir çalışma..
Emeğinize sağlık. Bence makalenizin devamını yazmaya hemen başlamalısınız.
 
zekeriya thnks
emeğenize sağlık çok güzel teşekkürler....
 
Sinan Eldem Tebrikler...
Gerçekten açıklamalar ve örnekler çok güzel hazırlanmış, kutlarım...
 
Sahin Tebrikler ve tesekkurler
Özellikle smarty ile ilgili örnek türkçe kaynak bulmak oldukca zor eger ki yeterince kaynak olsa daha cok kisi smarty ile proje gelistirmeye basliyacaktir tebrik ederim Emre güzel calisma.
 
Emre projenin devamı
artık bu sistem üzerinde çalışmadığımdan bu projeyi devam ettiremiyorum. codeigniter (codeigniter.com) + smarty (smarty.php.net) tabanlı bir sistem üzerinde calısmalarım sürüyor. Eğer zaman bulabilirsem bunlar ile alakalı da bir yazı yazmaya çalışırım.
 
freestyle teşekkürler
bunun gibi türkçe makaleler bulmak gerçekten güç.böyle bir girişimde bulunduğunuz için tebrik ediyorum.bizlerin eleştirileriyle de daha anlaşılır ve doğru makaleler yazacağınızı umuyorum.
 
mehmet ellerine sağlık
makale için teşekkurlerimi iletmeyi kendime bir borç bilirim
 
eDe teşekkür
makalenizden faydalandım.
teşekkürler ediyorum..
 
deNİs tsk
gercektende cok yayarı dokundu
 
deNİs tsk
gercektende cok yayarı dokundu
 
serkan teşekürler
teşekürler...
 
eDe yardım
makalenin devamını yazmayacağınızı söylemişsiniz.
makaleyi uyguladım ve şu anda kendimi yarım bırakılmış hissediyorum. bu makaledeki diğer dosyaları bulabileceğimiz -yabancı kaynak- var mı acaba.?
teşekkürler...
 
Emre dosyalar
bu dosyaları ben olusturdugum icin baska yerde bulamazsınız. ayrıca programlamayı tamamen bırakmıs durumdayım. devam etmesi gibi bir olasılık hiç kalmadı. kolay gelsin.
 
eDe 1 teklif
Uygulamanın planını gösteren bir sınıf şeması vermiştiniz. O şemadaki dosyaların içerisinde olması gereken fonksiyon isimlerini yazsanız ve biz de o ipuçlarına göre uygulamanın devamını geliştirsek.?
Yani şöyle..:
search.class.php : (var bulunan; var bla bla; metod search; metod bla bla

bu şekilde ana planı çizebilirseniz sanırım uygulama geliştirmek adına bu siteyi takip eden birçok üyeye güzel bir alıştırma hediye etmiş olursunuz.?
teşekkürler...
 
elshad teshekkurler
gozel bir makale yapmişsiniz.Teşekkürler.Admin panel ile bilgi verseydiniz güzel olurdu.
 
esen güzel olmuş ama
ama ben henüz programcı olma yolundayım pek de bişey anlamadım ellerinize sağlık güzel bilgiler edindiğimde oluyor bi de bu işe yeni başlamaya adım atmış insanlar için ele alacak bi yazı yassanız daha da güzel olur programcı olmayı çok istiyorum ama bu işe nasıl nerden başlmalıyım bu tür sorulara cvb olabilecek bi yazı
 
Emre yeni başlayanlar için
sitede yeni başlayanlar için yazılmış bir sürü makale bulabilirsiniz.
 
asmode tam da vaktinde :)
gerçekten çok teşekkürler
tam da mvc ve php ile oop öğrenmeye başladığım dönemde ilaç gibi geldi :)
 
Doğruyu söylemek gerekirse çok iyi PHP bildiğim söylenemez. Ancak makalenizi oldukça başarılı buldum. Son derece anlaşılır. Tebrik ediyorum.
 
handan tebrik
sik sik sik
 
tqhobreipm ejuIYnFv
NduM1V <a href="http://lhgwchyyxpxi.com/">lhgwchyyxpxi</a>, [url=http://wncittmryhsc.com/]wncittmryhsc[/url], [link=http://mjssksrnpsxc.com/]mjssksrnpsxc[/link], http://rfswkjqfwjoj.com/
 
Cihan db.class
db modellemesinde neden 2 ayrı sınıf yazma ihtiyacı duydun jure ? yani tek bir class ile gerçekleştirsek sorun mu yaşarız yoksa tamamen keyfi bişeymidir ?
 
bilcelik oop kaynak
arkadaşlar oop yi sıfırdan anlatan bir kaynak varmı bildiğiniz ve tam olarak bu ne işe yarar ve avantajları nelerdir bilgilendirir seniz çok teşekkür ederiz
iyi çalışmalar
 
tebrikler, gerçekten mükemmel bir çalışma
 




yorum Yorum ekle
İsminiz:
Mailiniz:
Yorum Konu:
Soru: 4+8
Cevap :
Bütün alanları doldurmanız gerekmektedir.

Ceviz Reklam