Programlama
     Sistem
     Web & Grafik
     Genel Konular
     Yarışma

Ceviz.Net RSS/XML




  Yazarlar 
$babacan
ab
abdagli
acehreli
Akın Öcal
anov
ApexLoader
apranaxfort
ArkHe
arthon
ASA
Asosyal
Barcoder
bronze
bunalthe
burhanmt
C-Nem
CaddeClub
Caesar
callaki
cappytoi
captainzap
Cekici
cemaliozan
civciv
civil
Codder
cubbuk
cumhurkorkut
darky_dark
deathisonitsway
diablo
dkoksal
dreammaker
Dreamy
Emre
esmaeild
Euclides
fatihhood
fgenc
fixman
Fobus
fuzbing
gorgpix
Guardian
HaokaH
hiko
hmustak
hsyn
HunTER
Huzeyfe
IcenGuard
john doe
jtaz
KamilORS
karavanabatu
karflake
kelalaka
kGlz
Magic2Melody
McTeo
Memik Yanık
memphiswoo
merush
Meteryus
Midgard
mkarabulut
Mr_MOON
muharrem_tac
myavruturk
myavuzselim
not:found
oCRaCy
Okan
omerosmanoglu
pan
PaNTHeRa_
ParK
perlci
pirilti
portalturks
Predator
prf_q
Psychaos
Pwm
Raiden
RaiST
Rapsodi
realist
realmusti
redial
renegade1905
Revlis
roksan
Sahin
Sam Orpheus
Scorpion
SEYRANLI
SGurel
sineld
sinoo
smasherz
Sniper
some_plus
SrcnCkr
tankado
teddmcload
TreeDY
turansoylu
Turok
UmutZafer
uszr
UuuR
vampire
Volkan Uzun
xXx
X_
yaso_19
yesilvadi
yildizib
Zerzevat Adam
Övünç Mete
 

Programlama :: PHP

:: 3 KATMANLI MİMARİ VE PHP

Sayfa 3

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.37
 



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.

 





» Yorum ekle
 
İsminiz:
Mailiniz:
Yorum Konu:
Güvenlik Kodu: güvenlik kodu
Bütün alanları doldurmanız gerekmektedir.


 
Forumda Aktif Olan Son 15 Konu

Designed by Gurdesign
www.gurdesign.com


1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  100  101  102  103  104  105  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144  145  146  147  148  149  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164  165  166  167  168  169  170  171  172  173  174  175  176  177  178  179  180  181  182  183  184  185  186  187  188  189  190  191  192  193  194  195  196  197  198  199  200  201  202  203  204  205  206  207  208  209  210  211  212  213  214  215  216  217  218  219  220  221  222  223  224  225  226  227  228  229  230  231  232  233  234  235  236  237  238  239  240  241  242  243  244  245  246  247  248  249  250  251  252  253  254  255  256  257  258  259  260  261