Bu mimariye göre projemiz 3 ayrı katmana bölünür.
Bunlar :
1. Sunum Katmanı (Presentation Layer)
2. İş Katmanı (Business Layer)
3. Veri Katmanı (Data Layer)
Öncelikle makaleyi okumaya başlamadan önce dosyaları indirip dosyalardan takip etmenizi tavsiye ederim dosyaları indirmek için tıklayın. Bu makale yeni başlayanlar için değildir.
Bu mimariye göre projemiz 3 ayrı katmana bölünür.
Bunlar :
1. Sunum Katmanı (Presentation Layer)
Sunum katmanı, İş katmanı ve Veri katmanından gelen bilgilerin kullanıcılara gösterildiği kısımdır. Yani bir arayüz denebilir. HTML sayfalar bu katmana örnek verilebilir.
2. İş Katmanı (Business Layer)
İş katmanı, tüm işlemlerin yapıldığı kısımdır. Her türlü denetim burada yapılır. Sunum katmanından gelen istekleri hazırlayan ve veri katmanına gönderen kısımdır.
3. Veri Katmanı (Data Layer)
Veritabanı katmanı, projemizin veritabanı ile ilişkisini sağlar. kendisinden istenen verileri işler, hazırlar ve iş katmanına gönderir.
Nasıl Çalışır
Niye 3 katmanlı mimari ?
Mesela veritabanı olarak mysql kullanıyoruz ve bazı sebeplerden dolayı Mssql, PostgreSQL vb. başka bir veritabanı kullanacağız. İşte bu noktada sadece Veri Katmanını değiştirmemiz yetecektir.
Bu örnek iş katmanı içinde geçerli ufak değişiklerle tüm sistem üzerinde büyük değişiklikler yapmamıza olanak sağlar ve güvenlik açısından önemlidir.
Peki 3 katmanlı mimari kullanmak çokmu zor?
Hayır hiçte zor değil. Fakat projeye başlarken biraz daha fazla kod yazmanıza sebep olur.
Bu öğrendiğimiz bilgileri bir proje üzerinde uygulayalım.
Projemizde veritabanı olarak mysql, sunum katmanı olarak ise Smarty kullanacağız. Smarty ile ilgili ayrıntılı bilgiyi http://smarty.php.net sayfasından alabilirsiniz.
ÖRNEK PROJE :
Örnek proje olarak bir haber portalı yapmaya başlayalım.
KULLANILACAK CLASS YAPISI
SMARTY KURULUMU
http://smarty.php.net/download.php adresinden Smarty’nin son versiyonunu indiriyoruz. Ben en son yayınlanan 2.6.18 versiyonunu indirdim. İndirdiğimiz zip dosyasının içindeki libs/ klasorunu ana dizinimize atıyoruz.
DİZİNLER
VERİ KATMANI
jure.sql
– ——————————————————–
–
– Tablo yapısı: `jure_news`
–
CREATE TABLE `jure_news` (
`id` int(11) unsigned NOT NULL auto_increment,
`category` smallint(5) unsigned NOT NULL,
`title` text NOT NULL,
`info` text NOT NULL,
`more` text NOT NULL,
`picture` varchar(255) NOT NULL,
`active` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5 AUTO_INCREMENT=1;
–
– Tablo döküm verisi `jure_news`
–
INSERT INTO `jure_news` VALUES (1, 1, ‘Tiryakilere elektronik sigara!’, ‘Nikotin bağımlılığından kurtulmanın alternatif yolu elektronik sigara. Tirkayilere gerçek sigara içiyorlarmış hissi veren elektronik sigara Türkiye’de de satılıyor.’, ‘İSTANBUL – Sigara alışkanlığından vazgeçmeye çalışan ama bunu bir türlü başaramayanlar için alternatif bir çözüm geliştirildi. Hong Kong’taki bir firma elektronik sigara üretti.<br /><br />Hong Kong’da bir firma sigarayı bırakmaya çalışan tiryakilere, nikotin bandı ve sakızı dışında farklı bir alternatif sunuyor. Elektronik sigara… Elektronik sigara, tiryakilere gerçek sigara içiyorlarmış hissi veriyor. Üretici firma, pille çalışan elektronik sigaranın alternatiflerinden çok daha etkili olacağı konusunda iddialı. 208 dolara satılan elektronik sigaranin piyasa sürüldüğü ülkeler arasında Türkiye de bulunuyor. Üretici firmanın yetkilileri, son 12 ayda gelirlerini 2 katına çıkardıklarını söylüyor.’, ‘uploads/saglik/265971.jpg’, 1);
INSERT INTO `jure_news` VALUES (2, 1, ‘Aspirin, bağırsak kanserinden koruyor’, ‘İngiliz bilim adamları, uzun süreli aspirin kullanımının bağırsak kanserini önleyebildiğini tespit etti.’, ‘LONDRA – Oxford üniversitesi bilim adamları, sonuçlarını tıp dergisi The Lancet’de yayımladıkları araştırmalarında, beş yıl süreyle günde 300 miligramlık doz aspirin kullanımının, bu süreyi takip eden 15 yılda bağırsak kanserine yakalanma ihtimalini yüzde 74 oranında azalttığını gördü. <br /><br />Mide rahatsızlıkları ve hatta mide kanamasına kadar varan yan etkilerinden dolayı uzun süreli aspirin kullanımının ancak bağırsak kanserine yakalanma riski yüksek olan kişilere tavsiye edilebileceğini belirten bilim adamları, araştırmalarını 7500 kişi üzerinde yaptı. <br /><br />1970’li ve 80’li yıllarda başlayan araştırmaya katılanlara, günlük 300, 500, 1200 miligramlık doz olarak aspirin ve bir gruba placebo verildi. Araştırmaya katılanlara aspirin beş ve yedi yıl süreyle kullandırıldı. Daha sonra katılımcıların sağlık durumu 20 yıl süreyle izlendi.’, ‘uploads/saglik/265985.jpg’, 1);
INSERT INTO `jure_news` VALUES (3, 1, ‘Prostat kanseri yaşı düşüyor’, ‘Prostat kanseri, erkeklerde en sık görülen kanser türlerinden biri. Aynı zamanda sinsi bir hastalık olarak da değerlendirilen prostat kanseri vakalarında son yıllardaki artış dikkat çekiyor.’, ‘İSTANBUL – Artışın yanı sıra, şimdiye kadar 60’lı yaşlardan sonrası için risk olarak değerlendirilen bu kanser türü, son yıllarda daha erken yaşlar için de bir risk haline geldi. <br /><br />Üroloji Uzmanı Opr. Doktor Mehmet Kırdar, prostat kanseri tanısında ve takibinde önemli bir test olarak değerlendirilen PSA’nın (Prostat Spesifik Antijen) kanser taramasında kullanımı arttıkça tespit edilen vaka sayısında da artış olduğunu vurguluyor. Kırdar, bunun prostat kanserinin daha erken yaşlarda teşhisini ortaya çıkaran bir başka nokta olduğunu belirtiyor. <br /><br />2006 yılında dünyada 680 bin erkeğe prostat kanseri tanısı konuldu ve yaklaşık 200 bin erkek hastalık nedeniyle öldü. 0 yaş üstü erkeklerin yüzde 9’unda prostat iltihabı bulunuyor ve seksüel geçişli hastalıklarda prostat kanseri riski artıyor. <br /><br />Antienflamatuar ajanlar, antioksidanlar, düşük yağlı diyet meyve sebze ve lifli diyet likopen içeren domates gibi besinlerin tüketiminin bu riski azalttığını belirten Kırdar, prostat kanserinin genellikle geç belirti verdiğine dikkat çekiyor.’, ‘uploads/saglik/264974.jpg’, 1);
INSERT INTO `jure_news` VALUES (4, 1, ‘Nikotin bandını doktor kontrolünde kullanın’, ‘ABD’de yapılan araştırmada aşırı strese maruz kalanların beyin hücrelerinin öldüğü belirlendi.’, ‘Stresin insan vücudu üzerindeki etkilerini araştıran ABD’li bilimadamları şiddetli stresin başta depresyon olmak üzere ciddi sağlık sorunlarını nasıl ortaya çıkardığını belirledi. Chicago’daki Rosalind Franklin Üniversitesi bilimadamlarınca yapılan araştırmada şiddetli stresin beyin hücrelerinin ölümüne neden olduğu ortaya çıktı. <br /><br />Aşırı stres beynin hafıza, öğrenme ve duygulardan sorumlu hipocampus bölümünde üretilen yeni hücreleri öldürüyor, yeni hücrelerin yetersizliği de depresyonla sonuçlanıyor. <br /><br />Bilimadamları fareler üzerinde yaptıkları deneylerde aşırı stresin hipocampus bölgesinin yeni hücre üretme yeteneğine zarar vermediğini, ancak üretilen yeni hücrelerin 24 saat sonra ölmeye başladığını belirledi. <br /><br />Elde edilen bu yeni bilginin depresyon tedavisinde yeni bir çığır açması bekleniyor. Stresin yeni hücreleri derhal değil, üretildikten 24 saat sonra öldürmeye başladığına dikkat çeken uzmanlar, bu süreçte kullanılabilecek bir ilaç geliştirilerse hüvrelerin ölümünün engellenebileceğine dikkat çekiyor. <br /><br />Aşırı stresin insan vücüdunda fiziksel bir etkisi olduğunu kanıtlayan ABD’li bilimadamları, çok düşük miktarlardaki stresinse insan beynini uyanık ve tetikte tutacağı için faydalı olabileceğini belirtiyor.’, ‘uploads/saglik/263096.jpg’, 1);
INSERT INTO `jure_news` VALUES (5, 1, ‘Stresi yenmek için çay için’, ‘Psychopharmacology dergisinde yayımlanan araştırma çerçevesinde, 6 hafta boyunca günde 4 bardak çay içen erkeklerde, çay yerine başka bir içecek tüketenlere oranla stres hormonu kortizol seviyesinin daha düşük olduğu tespit edildi.’, ‘İngiliz bilimadamlarının yaptığı araştırma bu kişilerin stres seviyelerinin yükseltilmesi için verilen görevlerden sonra büyük bir rahatlama hissettiklerini gösterdi. <br /><br />Araştırmanın yazarlarından, London College Üniversitesi’nde Epidomoloji ve Kamu Sağlığı bölümünde görevli Andrew Steptoe, araştırmanın sonuçlarının önemini vurgulayarak, akut stresin yavaş atlatılmasının koroner kalp hastalığı gibi kronik hastalıklarla bağdaştırılma riskinin yüksek olduğuna dikkati çekti. <br /><br />Steptoe, çayın stres hormonunun normal seviyeye gerilemesine yardımcı olduğunu ifade etti.<br /><br />Araştırma kapsamında 75 erkeğin iki gruba ayrıldığı, bunlardan birine meyve aromalı siyah çay, diğerine ise çay tadan başka bir kafeinli içecek verildiği belirtildi. Araştırmacılar, 6 haftanın sonunda katılımcılara, 5 dakikada sunum hazırlamak ve teslim etmek gibi stres seviyelerini yükseltmeyi amaçlayan testler verildiğini, bu testler sırasında her iki gruptaki kişilerin stres sevileri, tansiyon ve kalp atışlarının benzer çıktığını kaydettiler. Ancak verilen görevlerin sona ermesinden 50 dakika sonra çay içenlerde kortizol seviyesinin ortalama yüzde 47 oranında düştüğü, bunun diğer grupta yüzde 27’de kaldığı saptandı. <br /><br />Steptoe, çayın içindeki hangi maddelerin buna yol açtığının ise henüz bilinmediğini söyledi.’, ‘uploads/saglik/248204.jpg’, 1);
INSERT INTO `jure_news` VALUES (6, 1, ‘Sigaradan kurtulma rehberi’, ‘Sağlık Bakanlığı Temel Sağlık Hizmetleri Genel Müdürlüğü, sigara içenleri bırakmaya teşvik etmek ve bilgilendirmek amacıyla bir “rehber” hazırladı.’, ‘<p class="textBodyBlack">Rehberde, sigarayı bırakmanın ilk etkileri şöyle sıralandı: <br />“Bıraktığınız ilk günden itibaren, artık karbonmonoksitli hava solumadığınız için eritrositleriniz dokularınıza oksijeni yeniden ve tam kapasite ile taşıyabilecek. 6 binden fazla zehirli maddeyi gün boyunca solumayacaksınız. Dolayısıyla iştah bozuklukları, solukluk, çabuk yorulma başta olmak üzere bir çok sağlık sorununuz bir anda düzelecek, yüzünüzdeki çizgiler hafifleyecek, gözaltınızdaki torbalanmalar inecek, sesinizdeki kalınlaşma ve bozulma düzelecek, nefesiniz küllük gibi değil, normal insan gibi kokacak.”<br /><br />Sigarayı alışkanlığından vaz geçmede sabır ve bırakmanın getireceği zorlukların nasıl aşılacağı konusunda bilinçli olmanın yeterli olduğu ifade edilen rehberde, sigara içme isteğinin önce zayıflayacağı, sonra da söneceği vurgulandı. <br /><br />Rehberde, sigarayı bırakan kişinin bazen çok sinirli, mutsuz ya da keyifli olabileceği, bu durumlarda sigara içme isteğinin artacağı belirtilerek, bu isteğin 3-5 dakika süreceği ve zamanla yok olacağı anlatıldı. <br /><br /><font face="Verdana" size="2"><strong>BİR SAĞLIK KURULUŞUNDAN YARDIM ALINABİLİR</strong></font><br />Rehberde, sigarayı bırakmak isteyen kişinin daha yüksek başarı elde etmek için sağlık kuruluşlarından yardım alabileceği belirtildi.<br /><br />Rehberde, sigarayı bırakanlara, kilo almamak için beslenmeye özen göstermeleri önerildi. Kilo almamak için spor yapılabileceği vurgulanan rehberde, sporun, sigaranın bırakıldığı ilk günlerde ortaya çıkabilecek sıkıntının aşılmasına da yardımcı olacağı hatırlatıldı.<br /><br />Daha önce bırakmayı deneyip başaramayanlara tavsiyelerin yer aldığı rehberde, bu kişilere yeniden denemeleri önerisinde bulunuldu. Sigarayı bırakmanın ilk deneme de başarısız olmasının “çok doğal olduğu” belirtilen rehberde, bu konuda kararlı olunması gerektiği hatırlatıldı. <br /><br /><font face="Verdana" size="2"><strong>“HAZIRLIK DÖNEMİ” İÇİN TAVSİYELER</strong></font><br />Rehberde, ilk işin bırakma gününe karar verilmesi olacağı belirtildi. Hazırlık için bir haftanın yeterli olacağı vurgulanan rehberde, bırakma zamanı olarak doğum günü, evlilik yıl dönümü gibi özel günlerin belirlenmesi ve bunun yakın çevreye ilan edilmesi önerildi. Rehberde aile ve yakın çevrenin psikolojik ve sosyal olarak destek olmasının bırakma eyleminin sürmesinde etkili olacağı belirtildi.<br /><br />Sigarayı bırakmaya karar veren kişinin kendisini ödüllendirmesi de önerilen rehberde, bunun sigara içilmeden tamamlanan ilk günün, ilk haftanın, ilk ayın sonunda tekrar edilmesinin yararlı olacağı ifade edildi. <br /><br />Rehberde, sigarayı bırakmak isteyenlerin, bu kararın nedenlerini önem sırasına göre bir kağıda yazmaları ve bunu yanlarında taşımaları istenerek, zaman zaman okumalarının yararlı olacağı vurgulandı.<br /><br />Evdeki sigara, çakmak, küllük gibi nesnelerin atılması ya da gözden uzaklaştırılması da tavsiye edilen rehberde, bu nesnelerin kökleşmiş sigara içme isteği sönünceye kadar sigarayı bırakan kişi için tehlikeli olduğu kaydedildi. <br /><br /><font face="Verdana" size="2"><strong>PSİKOLOJİK OLARAK HAZIRLANMA</strong></font><br />Rehberde, sigara içme isteğinin birçok uyaranın etkisiyle ortaya çıktığı vurgulandı. Bu nedenle sigarayı bırakmak isteyenlerin birkaç gün sigara içme davranışlarını takip etmeleri gerektiğine işaret edilen rehberde, bu işlemi, düzenleyecekleri bir çizelge yardımıyla daha kolay yapabilecekleri ifade edildi. <br /><br />Rehberde, sigarayı bıraktıktan sonra, içme isteği hissedildiği de hatırlatılarak, şu tavsiyelerde bulunuldu. <br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> 3-5 dakika süren içme isteği dalgaları geldiğinde yanınızda taşıdığınız, üzerine bırakma nedenlerinizi kaydettiğiniz kağıdı çıkartıp, zihninizi bırakma nedenlerinize yoğunlaştırın. Bulunduğunuz yer ve durumu değiştirin. Dikkatinizi başka şeylere yöneltmeye çalışın, yerinizden kalkıp gezinin, meyve suyu ya da su için, bir arkadaşınızla birkaç dakika sohbet edin. <br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> Ellerinizi ve zihninizi meşgul edecek yeni uğraşlan bulun. Kolay ulaşılabilir bir yerde meyve ve sebze bulundurun. Sigara içme isteği duyduğunuzda ağzınızı bunlarla meşgul edin. Böylelikle hem vitamin ihtiyacınızı karşılamış, hem de kilo almayı engellemiş olursunuz. <br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> Sigara içme isteği uyandıracak arkadaş çevresi ve ortamlarından bir süre uzak kalmanız bırakma başarısını sürdürmenizde etkili olacaktır. Düzenli spora başlayın. Kaldırabileceğinizden fazla sorumluluk yüklenmekten kaçının. Günlük işlerinizi yaparken zamanınızı iyi kullanmaya çalışın. İşlerinizi son güne bırakmayın. Sizi strese sokabilecek kişilerden uzak durun ve her olayda mutlu olacak pozitif bir yön arayın.<br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> Kendinizi keşfedin, zayıf ve güçlü yönlerinizi gözden geçirin, güçlü olan yanlarınızı öne çıkarın ve bunlarla övünün. Bıraktıktan sonra geçen süre ne olursa olsun bir tek sigara bile içmeyi denemeyin.<br /><br /><font face="Verdana" size="2"><strong>BIRAKMANIN YARARLARI</strong></font><br />Sigaraya bırakan kişinin kalp, akciğer, solunum yolları hastalıkları ve kanserler gibi hastalık risklerinin bir anda azalacağına dikkat çekilen rehberde, bunun kişinin yaşam süresi ve kalitesini kendisinin belirlemesi anlamına geleceği ifade edildi.<br /><br />Sigara içmeyi 35 yaşından önce bırakanlarda erken ölüm riskinin hemen hemen yok olacağının altı çizilen rehberde, sigarayı bıraktıktan sonra vücutta meydana gelecek değişiklikler de şöyle sıralandı:<br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> 20 dakika sonra kan basıncı ve nabız normale döner, el ve ayaklarda kan dolaşımı düzelir. 8 saat sonra, kanda oksijen düzeyi normale döner, kalp krizi geçirme riski azalır.<br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> 24 saat sonra, vücut karbonmonoksitten arınır. 48 saat sonra, kanda nikotin düzeyi azalır, tat ve koku duyusu artar, peptik ülserli hastaların tedaviye verdiği cevap artar. <br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> 72 saat sonra, solunum yollarının gevşemesi sonucu nefes alıp verme rahatlar, solunum yolları fonksiyon görmeye başladığı için sekresyon miktarı artar.<br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> 2-12 hafta sonra, vücuttaki tüm dolaşım düzelir, solunum yolu enfeksiyonlarına yakalanma riski azalır, yürürken yorulma ve tıkanma daha az görülür. <br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> 3-9 ay sonra öksürük, kısa aralıklarla nefes alıp verme ve hırıltılı ya da ıslık sesli soluk alıp verme gibi solunum yolu problemleri düzelir. Akciğer fonksiyonları yüzde 5-10 artar. <br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> Bir yıl sonra, koroner kalp hastalığı riski yarı yarıya azalır. 12-36 ay sonra mesane kanseri riski yüzde 50 azalır. <br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> 5 yıl sonra, kalp krizi geçirme riski ile yemek borusu ve ağız boşluğu kanseri riski yüzde 50 azalır. <br /><img height="7" alt="*" hspace="1" src="http://www.ntvmsnbc.com/Site_Elements/dotBlack.gif" width="7" vspace="1" border="0" /> 10-15 yıl sonra, kalp krizi geçirme riski içmeyenlerle aynı seviyeye iner, akciğer kanseri riski içenlere oranla yüzde 50 azalır.<br /><br />Rehberde, bu alışkanlığından vazgeçmek istemeyenlerin de “sigara içmeyen kişilerin temiz hava soluma haklarına saygı göstermeleri, çocukların önünde sigara içmemeleri ve gençlere ve çocuklara olumsuz model oluşturmamaları” istendi.<br /></p>’, ‘uploads/saglik/19924.jpg’, 1);
INSERT INTO `jure_news` VALUES (7, 1, ‘Ağır tiryakiliğin nedeni de genler’, ‘Osaka Üniversitesi’nde görevli bilim adamlarının, sabah yataktan kalkar kalkmaz sigara yakan tiryakiler arasında yaptığı araştırma, bu kişilerde nikotini parçalayan enzimin üretimden sorumlu genin daha aktif olduğunu gösterdi.’, ‘Nihon Keizai Shimbun’da yayımlanan araştırmada, CYP2A6 geninin, 300 tiryaki ve geçmişte sigara içenlerde incelenmesi sonucunda genin çok aktif biçimine sahip olanların yüzde 70’inin çok ağır tiryakiler olduğu tespit edildi. <br /><br />Araştırmanın, sigara içenlerin bu alışkanlıktan kurtulmasında daha etkili yöntemlerin bulunmasına yardımcı olmasının beklendiği kaydedildi.’, ‘uploads/saglik/254596.jpg’, 1);
– ——————————————————–
–
– Tablo yapısı: `jure_news_category`
–
CREATE TABLE `jure_news_category` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`parent` smallint(5) unsigned NOT NULL,
`title` varchar(255) NOT NULL,
`active` tinyint(1) unsigned NOT NULL,
`posi` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5 AUTO_INCREMENT=1;
–
– Tablo döküm verisi `jure_news_category`
–
INSERT INTO `jure_news_category` VALUES (1, 0, ‘Sağlık’, 1, 1);
INSERT INTO `jure_news_category` VALUES (2, 0, ‘Ekonomi’, 1, 2);
class/database.class.php
/**
/**
/**
/**
class
Datalayer$this->prefix = "jure";
/**
foreach (
$tables as $tbl)/**
}
kısımlara kendi veritabanı bilgilerimizi yazıyoruz.
Böylece veri katmanımız tamamlanmış oldu.
Smarty çalışması için bazı ayarların yapılması gerekli. Bunu smarty dosyalarının içindede yapabilirsiniz veya yeni bir class türeterek türeterek yapabilirsiniz. Biz yeni bir class türeterek gerçekleştireceğiz.
SUNUM KATMANI
class/page.class.php
/**
switch (
$this->page }
}
Sunum katmanıda tamamlanmış oldu. .
İŞ KATMANI
class/functions.php
class/thumb.class.php
var
$errmsg;//if there are no errors, determine the file format
//initialize resources if no errors
$size = GetImageSize($this->fileName);
if(
$this->error == true)if(
$this->maxWidth > 0)$newSize = $this->calcWidth($width,$height);
if(
$this->maxHeight > 0 && $newSize['newHeight'] > $this->maxHeight)//$this->newDimensions = $newSize;
if(
$this->maxHeight > 0)if(
$this->maxWidth > 0 && $newSize['newWidth'] > $this->maxWidth)//$this->newDimensions = $newSize;
$this->newDimensions = $newSize;
$this->calcImageSize($this->currentDimensions['width'],$this->currentDimensions['height']);
if(
function_exists("ImageCreateTrueColor"))ImageCopyResampled(
$this->oldImage = $this->workingImage;
$this->calcImageSizePercent($this->currentDimensions[
if(
function_exists("ImageCreateTrueColor"))ImageCopyResampled(
$this->oldImage = $this->workingImage;
$cropX = intval(($this->currentDimensions['width'] - $cropSize) / 2);
if(
function_exists("ImageCreateTrueColor"))imagecopyresampled(
$this->oldImage = $this->workingImage;
if(
function_exists("ImageCreateTrueColor"))imagecopyresampled(
$this->oldImage = $this->workingImage;
if(
function_exists("exif_read_data") && $this->format == ‘JPG’)
}
Thumb class’ı ile ayrıntılı bilgiye http://www.gen-x-design.com/projects/php-thumbnailer-class/ adresinden ulaşabilirsiniz.
class/general.class.php
/**
}
Buraya kadar yazdığımız class ve fonksiyonlar sistemin ana işleyişi ile iligli kısımdı. Şimdi haber sistemini yapmaya başlayabiliriz.
#sayfa_sonu#
Artık haber sistemini yapmaya başlıyoruz. Öncelikle bu bölümde yapacağımız haber sistemini tanımlayalım. Haber sistemi 3 sayfadan oluşuyor.
1- Ana sayfa
2- Kategori safası
3- Haber detayları
Ana sayfayı yapmaya başlayalım :
Yukarıdaki resimde ana sayfamız görünmektedir. Sol taraftaki haber listesini oluşturmak için fonksiyonumuzu yazalım.
$fields = array("id","picture","title","info");
return
$items;
Şimdide sağ taraftaki haber listesi için fonksiyonumuzu yazalım.
Ana sayfamızı bitirdik. Aşağıda görünen kategori sayfasıda ana sayfa ile ilgili aynı bölümleri taşımaktadır. Onun için ayrı bir fonksiyon yazmamıza gerek yoktur.
Şimdide haber detaylarını oluşturan fonksiyonumuzu yazalım :
$sql = $this->SelectNews($id); // Haber verilerini veritabanından al
if(!empty(
Tüm fonksiyonlarımızı tamamladık şimdi haber sınıfımızı oluşturabiliriz.
class/news.class.php
$sql = $this->SelectNews($id); // Haber verilerini veritabanından al
if(!empty(
/**
$fields = array("id","picture","title","info");
return
$items;
}
Haber sınıfımızı tamamladıktan sonra bu sınıfı çağıracak php dosyamız ve template sistemini yapmak kaldı. Sırayla php dosyalarını ve template sistemini yapalım.
#sayfa_sonu#
Ana php dosyamız :
index.php
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)
$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)
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
$news_class
= new News($database); // Haber sınıfını oluştur switch ($_REQUEST["action"])
$news_page = int($_REQUEST["p"]);
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
3 katmanlı mimari, php çok katmanli mimari, 3 katmanlı mimari örnek, 3 katmanlı mimari şemaları, mimari de faydalı alan örnekleri, ceviz net 3 katmanlı mimari, çok katmanlı mimari, internet projesi sunum örnekleri, php katmanlı mimari, katmanlı mimari
Benzer Konular:
\libs\plugins içerisinden kullanmadiginiz veya kullanmayacaginiz pluginleri silebilirsiniz.
ı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ı.
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?
Gerçekten bilinçli ve doğru kodlamanın temellerini anlatmışsın
tebrik ediyorum
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.
Ö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.
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.
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.
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. :)
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
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.
güzel ve aydınlatıcı bir makale olmuş. teşekkürler
Makalenin devamını diliyorum. Tesekkurler paylastığın icin.
Devamını bekliyoruz gerçekten hoş bir makale.
çok sağolun tam smarty nedir onu araştırıyordum üstüne bu makaleyi buldum ALLAH razı olsun
Emeğinize sağlık. Bence makalenizin devamını yazmaya hemen başlamalısınız.
Ö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.
emeğenize sağlık çok güzel teşekkürler….
Gerçekten açıklamalar ve örnekler çok güzel hazırlanmış, kutlarım…
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.
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.
makale için teşekkurlerimi iletmeyi kendime bir borç bilirim
makalenizden faydalandım.
teşekkürler ediyorum..
gercektende cok yayarı dokundu
gercektende cok yayarı dokundu
teşekürler…
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…
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.
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…
gozel bir makale yapmişsiniz.Teşekkürler.Admin panel ile bilgi verseydiniz güzel olurdu.
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ı
sitede yeni başlayanlar için yazılmış bir sürü makale bulabilirsiniz.
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.
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
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 ?
tebrikler, gerçekten mükemmel bir çalışma
Makale gerçekten çok güzel olmuş. Emeğinize sağlık. Umarı bu tarz makalelerin yenilerinide yayınlayarak başarılarınızı taçlandırırsınız. Böylece Türkçe kaynak sıkıntısınıda ortadan kaldırmış oluruz
gerçekten güzel çalışma olmuş farklı örneklerle devamını bekliyoruz…