:: 3 KATMANLI MİMARİ VE PHP
Ö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
cache/ (chmod 777)
class/
libs/ - smarty dosyaları bu dizinde olacak
sistem/
temp/page/ (chmod 777)
templates/
uploads/ (chmod 777)
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"strongBİR SAĞLIK KURULUŞUNDAN YARDIM ALINABİLİR/strong/fontbr /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/fontbr /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"strongPSİKOLOJİK OLARAK HAZIRLANMA/strong/fontbr /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"strongBIRAKMANIN YARARLARI/strong/fontbr /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
?php
class Result
{
var $_result;
/**
*
* @param $result
* @return Result
*/
function Result($result)
{
$this-_result = $result;
}
/**
* Veritabanından gelen veriyi object olarak döndürür...
*
* @return object
*/
function FetchRow()
{
return @mysql_fetch_object($this-_result);
}
/**
* Veritabanından gelen veri sayısını döndürür...
*
* @return int
*/
function NumRows()
{
return @mysql_num_rows($this-_result);
}
/**
* İstenilen alanın sonucunu verir
*
* @param string $field
* @return string
*/
function ReturnQuery($field)
{
$row = $this-FetchRow();
return $row-$field;
}
/**
* Veritabanında veri olup olmadığını kontrol eder...
*
* @return bool
*/
function BoolQuery()
{
if($this-NumRows())
return true;
else
return false;
}
/**
* Veritabanından gelen tek veriyi object olarak döndürür...
* Bu fonksiyon fetchrow ile aynıdır fakat ileride projemiz genişlediğinde bunun yararını göreceğiz.
* @return object
*/
function SingleRow()
{
$row = $this-FetchRow();
return $row;
}
/**
* Veritabanından gelen cogul veriyi dizi olarak döndürür...
*
* @return object
*/
function MultipleRow()
{
$array = array();
while($row = $this-FetchRow())
{
array_push($array,$row);
}
return $array;
}
/**
* Kullanılan veriyi siler...
*
* @return null
*/
function FreeResult()
{
$r = @mysql_free_result($this-_result);
unset($this);
return $r;
}
}
class Datalayer
{
var $prefix;
var $lang;
var $debug;
var $host;
var $user;
var $password;
var $database;
var $conn;
/**
* Constructor. Veritabanı bağlantısı yapılır.
*
* @return Datalayer
*/
function Datalayer()
{
$this-prefix = "jure";
$this-debug = true;
$this-host = "localhost";
$this-user = "root";
$this-database = "database";
$this-password = "password";
$this-Connect();
$this-selectDatabase($this-database);
$this-setCharset();
}
/**
* Veritabanı bağlantısı...
*
*/
function Connect()
{
if($this-host && $this-user && $this-database)
$this-conn = mysql_connect($this-host,$this-user,$this-password) or $this-error("Could not connect to server","Connect to $this-host $this-user:$this-password");
}
/**
* Mysql Charseti...
*
*/
function setCharset()
{
mysql_query("SET NAMES 'latin5'");
mysql_query("SET CHARACTER SET latin5");
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'");
}
/**
* Veritabanı seç...
*
* @param string $database
*/
function selectDatabase($database)
{
$this-database = $database;
mysql_select_db($database, $this-conn) or $this-MysqlError(mysql_error(), "no database");
}
/**
* sql sorgusunu veritabanına gönderir.
*
* @param string $sql
* @return object
*/
function LiteQuery($sql)
{
$result = mysql_query($sql, $this-conn) or $this-MysqlError(mysql_error(), $sql);
return new Result($result);
}
/**
* sql sorgusunu veritabanına gönderir...
*
* @param array $fields
* @param array $tables
* @param array $where
* @param array $order
* @param array $group
* @param string $limit
* @return object
*/
function Query($fields, $tables, $where = array(), $order = array(), $group=array(),$limit = "")
{
foreach ($tables as $tbl)
{
$tablos[] = $this-prefix."_".$tbl;
}
$fields = implode(",",$fields);
$tables = implode(",", $tablos);
$where = implode(" AND ", $where);
$order = implode(",",$order);
$group = implode(",",$group);
$sql = "SELECT $fields FROM $tables";
if(!empty($where)) $sql .= ' WHERE '.$where;
if(!empty($order)) $sql .= ' ORDER BY '.$order;
if(!empty($group)) $sql .= ' GROUP BY '.$group;
if(!empty($limit)) $sql .= ' LIMIT '.$limit;
$result = mysql_query($sql, $this-conn) or $this-MysqlError(mysql_error(), $sql);
return new Result($result);
}
/**
* Veritabanı hatasını ekrana yazdırır
*
* @param string $error
* @param string $query
*/
function MysqlError($error, $query)
{
if($this-debug)
{
echo "SQL: $querybr /Error: $error";
}
}
/**
* Veritabanına eklenen satırın id sini verir.
*
* @return int
*/
function InsertId()
{
return mysql_insert_id();
}
/**
* Veritabanı bağlantısı kapat
*
*/
function Close()
{
mysql_close($this-conn);
}
}
?
@mysql_connect("localhost","user","password")
@mysql_select_db("database")
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
?php
Class Page extends Smarty
{
var $page;
var $tpl;
/**
* Constructor...
*
* @return Page
*/
function Page()
{
$_REQUEST['page'] = (isset($_REQUEST['page'])) ? $_REQUEST["page"] : "index";
$this-compile_dir = 'temp/page'; // compile edilecek temaların kopyalanacağı dizin
$this-template_dir = 'templates'; // tema dosyalarının bulunacağı dizin
$this-page = $this-ClearPage($_REQUEST['page']); // sayfadaki zararlı karakterleri temizleyelim
$this-ClearGlobals(); // globallerden gelen zararlı değişkenleri temizleyelim
$this-tpl = $this-IncludeTemplate(); // sitemizin kullanacağı ana temayı belirleyelim
}
/**
* Sayfaya göre ana temayı yükler...
*
* @return string
*/
function IncludeTemplate()
{
switch ($this-page )
{
case "index" :
$template = $this-AddTemplate("main");
break;
default :
$template = $this-AddTemplate("main");
}
return $template;
}
/**
* Ana tema yolu...
*
* @param string $param
* @return string
*/
function AddTemplate($param)
{
$thetpl = "main/" . $param . ".tpl";
return $thetpl;
}
/**
* ":", "/", "..", ".", ";", "\\", "http", "ftp" karakterlerini temizler...
*
* @param string $page
* @return string
*/
function ClearPage($page)
{
$page = (!isset($page)) ? "index" : $page;
$page = str_replace(array(":", "/", "..", ".", ";", "\\", "http", "ftp"), "", $page);
return $page;
}
/**
* Gelen dizideki ' karakterlerini /' olarak değiştir...
*
* @param array $array
* @return array
*/
function Escape($array)
{
reset($array);
while (list($key, $val) = each($array)) {
if (is_string($val)) {
$array[$key] = addslashes($val);
} else {
if (is_array($val)) {
$array[$key] = $this-Escape($val);
}
}
}
return $array;
}
/**
* Global'den gelen değerler escape fonksiyonuna gönderilir...
*
*/
function ClearGlobals()
{
if (!get_magic_quotes_gpc())
{
@$_REQUEST = $this-Escape($_REQUEST);
@$_POST = $this-Escape($_POST);
@$_GET = $this-Escape($_GET);
@$_COOKIE = $this-Escape($_COOKIE);
@$_SESSION = $this-Escape($_SESSION);
@$_SERVER = $this-Escape($_SERVER);
}
}
}
?
Sunum katmanıda tamamlanmış oldu. .
İŞ KATMANI
class/functions.php
?php
function int($param)
{
return intval($param);
}
/**
* Dosyanın olup olmadığını kontrol eder...
*
* @param string $path
* @return bool
*/
function isfile($path)
{
if (!is_file($path)) return false; else return true;
}
/**
* HTML taglarınız geçersiz hale getirir...
*
* @param string $string
* @return string
*/
function clearhtml($string)
{
return htmlspecialchars($string);
}
/**
* yönlendirme yapar...
*
* @param string $page
*/
function location($page)
{
header("Location: $page");
exit();
}
?
class/thumb.class.php
?php
/**
*
* @author Ian Selby (ian@gen-x-design.com)
* @copyright Copyright 2006
* @version 1.1 (PHP4)
*
*/
class Thumbnail
{
var $errmsg;
var $error;
var $format;
var $fileName;
var $imageMeta;
var $currentDimensions;
var $newDimensions;
var $newImage;
var $oldImage;
var $workingImage;
var $percent;
var $maxWidth;
var $maxHeight;
function Thumbnail($fileName)
{
if(!function_exists("gd_info"))
{
echo 'You do not have the GD Library installed. This class requires the GD library to function properly.' . "\n";
echo 'visit http://us2.php.net/manual/en/ref.image.php for more information';
exit;
}
//initialize variables
$this-errmsg = '';
$this-error = false;
$this-currentDimensions = array();
$this-newDimensions = array();
$this-fileName = $fileName;
$this-imageMeta = array();
$this-percent = 100;
$this-maxWidth = 0;
$this-maxHeight = 0;
$this-watermarkImg = '';
//check to see if file exists
if(!file_exists($this-fileName))
{
$this-errmsg = 'File not found';
$this-error = true;
} elseif(!is_readable($this-fileName)) {
$this-errmsg = 'File is not readable';
$this-error = true;
}
//if there are no errors, determine the file format
if($this-error == false)
{
//check if gif
if(stristr(strtolower($this-fileName),'.gif')) $this-format = 'GIF';
//check if jpg
elseif(stristr(strtolower($this-fileName),'.jpg') || stristr(strtolower($this-fileName),'.jpeg')) $this-format = 'JPG';
//check if png
elseif(stristr(strtolower($this-fileName),'.png')) $this-format = 'PNG';
//unknown file format
else {
$this-errmsg = 'Unknown file format';
$this-error = true;
}
}
//initialize resources if no errors
if($this-error == false)
{
switch($this-format)
{
case 'GIF':
$this-oldImage = ImageCreateFromGif($this-fileName);
break;
case 'JPG':
$this-oldImage = ImageCreateFromJpeg($this-fileName);
break;
case 'PNG':
$this-oldImage = ImageCreateFromPng($this-fileName);
break;
}
$size = GetImageSize($this-fileName);
$this-currentDimensions = array('width'=$size[0],'height'=$size[1]);
$this-newImage = $this-oldImage;
$this-gatherImageMeta();
}
if($this-error == true)
{
//$this-showErrorImage();
break;
}
}
function destruct()
{
if(is_resource($this-newImage)) @ImageDestroy($this-newImage);
if(is_resource($this-oldImage)) @ImageDestroy($this-oldImage);
if(is_resource($this-workingImage)) @ImageDestroy($this-workingImage);
}
function getCurrentWidth()
{
return $this-currentDimensions['width'];
}
function getCurrentHeight()
{
return $this-currentDimensions['height'];
}
function calcWidth($width,$height)
{
$newWp = (100 * $this-maxWidth) / $width;
$newHeight = ($height * $newWp) / 100;
return array('newWidth'=intval($this-maxWidth),'newHeight'=intval($newHeight));
}
function calcHeight($width,$height)
{
$newHp = (100 * $this-maxHeight) / $height;
$newWidth = ($width * $newHp) / 100;
return array('newWidth'=intval($newWidth),'newHeight'=intval($this-maxHeight));
}
function calcPercent($width,$height)
{
$newWidth = ($width * $this-percent) / 100;
$newHeight = ($height * $this-percent) / 100;
return array('newWidth'=intval($newWidth),'newHeight'=intval($newHeight));
}
function calcImageSize($width,$height)
{
$newSize = array('newWidth'=$width,'newHeight'=$height);
if($this-maxWidth 0)
{
$newSize = $this-calcWidth($width,$height);
if($this-maxHeight 0 && $newSize['newHeight'] $this-maxHeight)
{
$newSize = $this-calcHeight($newSize['newWidth'],$newSize['newHeight']);
}
//$this-newDimensions = $newSize;
}
if($this-maxHeight 0)
{
$newSize = $this-calcHeight($width,$height);
if($this-maxWidth 0 && $newSize['newWidth'] $this-maxWidth)
{
$newSize = $this-calcWidth($newSize['newWidth'],$newSize['newHeight']);
}
//$this-newDimensions = $newSize;
}
$this-newDimensions = $newSize;
}
function calcImageSizePercent($width,$height)
{
if($this-percent 0)
{
$this-newDimensions = $this-calcPercent($width,$height);
}
}
function showErrorImage()
{
header('Content-type: image/png');
$errImg = ImageCreate(220,25);
$bgColor = imagecolorallocate($errImg,0,0,0);
$fgColor1 = imagecolorallocate($errImg,255,255,255);
$fgColor2 = imagecolorallocate($errImg,255,0,0);
imagestring($errImg,3,6,6,'Error:',$fgColor2);
imagestring($errImg,3,55,6,$this-errmsg,$fgColor1);
imagepng($errImg);
imagedestroy($errImg);
}
function resize($maxWidth = 0, $maxHeight = 0)
{
$this-maxWidth = $maxWidth;
$this-maxHeight = $maxHeight;
$this-calcImageSize($this-currentDimensions['width'],$this-currentDimensions['height']);
if(function_exists("ImageCreateTrueColor"))
{
$this-workingImage = ImageCreateTrueColor($this-newDimensions['newWidth'],$this-newDimensions['newHeight']);
} else {
$this-workingImage = ImageCreate($this-newDimensions['newWidth'],$this-newDimensions['newHeight']);
}
ImageCopyResampled(
$this-workingImage,
$this-oldImage,
0,
0,
0,
0,
$this-newDimensions['newWidth'],
$this-newDimensions['newHeight'],
$this-currentDimensions['width'],
$this-currentDimensions['height']
);
$this-oldImage = $this-workingImage;
$this-newImage = $this-workingImage;
$this-currentDimensions['width'] = $this-newDimensions['newWidth'];
$this-currentDimensions['height'] = $this-newDimensions['newHeight'];
}
function resizePercent($percent = 0)
{
$this-percent = $percent;
$this-calcImageSizePercent($this-currentDimensions[ 'width'],$this-currentDimensions['height']);
if(function_exists("ImageCreateTrueColor"))
{
$this-workingImage = ImageCreateTrueColor($this-newDimensions['newWidth'],$this-newDimensions['newHeight']);
} else {
$this-workingImage = ImageCreate($this-newDimensions['newWidth'],$this-newDimensions['newHeight']);
}
ImageCopyResampled(
$this-workingImage,
$this-oldImage,
0,
0,
0,
0,
$this-newDimensions['newWidth'],
$this-newDimensions['newHeight'],
$this-currentDimensions['width'],
$this-currentDimensions['height']
);
$this-oldImage = $this-workingImage;
$this-newImage = $this-workingImage;
$this-currentDimensions['width'] = $this-newDimensions['newWidth'];
$this-currentDimensions['height'] = $this-newDimensions['newHeight'];
}
function cropFromCenter($cropSize)
{
if($cropSize $this-currentDimensions['width']) $cropSize = $this-currentDimensions['width'];
if($cropSize $this-currentDimensions['height']) $cropSize = $this-currentDimensions['height'];
$cropX = intval(($this-currentDimensions['width'] - $cropSize) / 2);
$cropY = intval(($this-currentDimensions['height'] - $cropSize) / 2);
if(function_exists("ImageCreateTrueColor"))
{
$this-workingImage = ImageCreateTrueColor($cropSize,$cropSize);
} else {
$this-workingImage = ImageCreate($cropSize,$cropSize);
}
imagecopyresampled(
$this-workingImage,
$this-oldImage,
0,
0,
$cropX,
$cropY,
$cropSize,
$cropSize,
$cropSize,
$cropSize
);
$this-oldImage = $this-workingImage;
$this-newImage = $this-workingImage;
$this-currentDimensions['width'] = $cropSize;
$this-currentDimensions['height'] = $cropSize;
}
function crop($startX,$startY,$width,$height)
{
//make sure the cropped area is not greater than the size of the image
if($width $this-currentDimensions['width']) $width = $this-currentDimensions['width'];
if($height $this-currentDimensions['height']) $height = $this-currentDimensions['height'];
//make sure not starting outside the image
if(($startX + $width) $this-currentDimensions['width']) $startX = ($this-currentDimensions['width'] - $width);
if(($startY + $height) $this-currentDimensions['height']) $startY = ($this-currentDimensions['height'] - $height);
if($startX 0) $startX = 0;
if($startY 0) $startY = 0;
if(function_exists("ImageCreateTrueColor"))
{
$this-workingImage = ImageCreateTrueColor($width,$height);
} else {
$this-workingImage = ImageCreate($width,$height);
}
imagecopyresampled(
$this-workingImage,
$this-oldImage,
0,
0,
$startX,
$startY,
$width,
$height,
$width,
$height
);
$this-oldImage = $this-workingImage;
$this-newImage = $this-workingImage;
$this-currentDimensions['width'] = $width;
$this-currentDimensions['height'] = $height;
}
function show($quality=100,$name = '')
{
switch($this-format)
{
case 'GIF':
if($name != '')
{
ImageGif($this-newImage,$name);
} else {
header('Content-type: image/gif');
ImageGif($this-newImage);
}
break;
case 'JPG':
if($name != '')
{
ImageJpeg($this-newImage,$name,$quality);
} else {
header('Content-type: image/jpeg');
ImageJpeg($this-newImage,'',$quality);
}
break;
case 'PNG':
if($name != '')
{
ImagePng($this-newImage,$name);
} else {
header('Content-type: image/png');
ImagePng($this-newImage);
}
break;
}
}
function save($name,$quality=100)
{
$this-show($quality,$name);
}
function gatherImageMeta()
{
if(function_exists("exif_read_data") && $this-format == 'JPG')
{
$imageData = exif_read_data($this-fileName);
if(isset($imageData['Make']))
$this-imageMeta['make'] = ucwords(strtolower($imageData['Make']));
if(isset($imageData['Model']))
$this-imageMeta['model'] = $imageData['Model'];
if(isset($imageData['COMPUTED']['ApertureFNumber']))
{
$this-imageMeta['aperture'] = $imageData['COMPUTED']['ApertureFNumber'];
$this-imageMeta['aperture'] = str_replace('/','',$this-imageMeta['aperture']);
}
if(isset($imageData['ExposureTime']))
{
$exposure = explode('/',$imageData['ExposureTime']);
$exposure = round($exposure[1]/$exposure[0],-1);
$this-imageMeta['exposure'] = '1/' . $exposure . ' second';
}
if(isset($imageData['Flash']))
{
if($imageData['Flash'] 0)
{
$this-imageMeta['flash'] = 'Yes';
} else {
$this-imageMeta['flash'] = 'No';
}
}
if(isset($imageData['FocalLength']))
{
$focus = explode('/',$imageData['FocalLength']);
$this-imageMeta['focalLength'] = round($focus[0]/$focus[1],2) . ' mm';
}
if(isset($imageData['DateTime']))
{
$date = $imageData['DateTime'];
$date = explode(' ',$date);
$date = str_replace(':','-',$date[0]) . ' ' . $date[1];
$this-imageMeta['dateTaken'] = date('m/d/Y g:i A',strtotime($date));
}
}
}
}
?
Thumb class'ı ile ayrıntılı bilgiye http://www.gen-x-design.com/projects/php-thumbnailer-class/ adresinden ulaşabilirsiniz.
class/general.class.php
?php
Class General
{
var $db;
/**
* Enter description here...
*
* @param unknown_type $db
* @return General
*/
function General(&$db)
{
$this-db = &$db;
}
/**
* Sayfalama fonksiyonu...
*
* @param string $index
* @param string $page
* @param string $action
* @param string $static
* @param int $p
* @param int $num
* @param int $limit
* @return string
*/
function Pagination($index,$page,$action,$static,$p,$num,$limit)
{
$nav = "";
if($num $limit)
{
$p = (int) $p;
$total_page = ceil($num / $limit);
$tpl_on = "lia href=\"".$index."?page=".$page."&action=".$action.$static."&p={s}\"".$p."/a/li";
$tpl_off = " lia href=\"".$index."?page=".$page."&action=".$action.$static."&p={s}\"{t}/a/li ";
$pages = array ($p-3,$p-2,$p-1,$p,$p+1,$p+2,$p+3);
$pages = array_unique($pages);
//
$nav .= "div class=\"pagination\"ul";
if($total_page 1 && $p != 1)
$nav .= str_replace("{t}", "İlk", str_replace("{s}", 1, $tpl_off));
if($p 1)
$nav .= str_replace("{t}", "", str_replace("{s}", ($p-1), $tpl_off));
while(list($key,$val) = each($pages))
{
if($val = 1 && $val = $total_page)
{
if($p == $val)
$nav .= str_replace(array("{s}", "{t}"), $val, $tpl_on);
else
$nav .= str_replace(array("{s}", "{t}"), $val, $tpl_off);
}
}
if($p $total_page)
$nav .= str_replace("{t}", "", str_replace("{s}", ($p+1), $tpl_off));
if($total_page 1 && $p != $total_page)
$nav .= str_replace("{t}", "Son", str_replace("{s}", $total_page, $tpl_off));
$nav .= "/ul/div";
}
return $nav;
}
/**
* Cache yapilan resimler için Md5 isim olusturur...
*
* @param string $param
* @param int $height
* @param int $width
* @return string
*/
function CacheHash($param,$height="",$width="")
{
$hash = md5($param.$height.$width);
return $hash;
}
}
?
Buraya kadar yazdığımız class ve fonksiyonlar sistemin ana işleyişi ile iligli kısımdı. Şimdi haber sistemini yapmaya başlayabiliriz.
alıntı
Ö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
cache/ (chmod 777)
class/
libs/ - smarty dosyaları bu dizinde olacak
sistem/
temp/page/ (chmod 777)
templates/
uploads/ (chmod 777)
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"strongBİR SAĞLIK KURULUŞUNDAN YARDIM ALINABİLİR/strong/fontbr /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/fontbr /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"strongPSİKOLOJİK OLARAK HAZIRLANMA/strong/fontbr /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"strongBIRAKMANIN YARARLARI/strong/fontbr /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
?php
class Result
{
var $_result;
/**
*
* @param $result
* @return Result
*/
function Result($result)
{
$this-_result = $result;
}
/**
* Veritabanından gelen veriyi object olarak döndürür...
*
* @return object
*/
function FetchRow()
{
return @mysql_fetch_object($this-_result);
}
/**
* Veritabanından gelen veri sayısını döndürür...
*
* @return int
*/
function NumRows()
{
return @mysql_num_rows($this-_result);
}
/**
* İstenilen alanın sonucunu verir
*
* @param string $field
* @return string
*/
function ReturnQuery($field)
{
$row = $this-FetchRow();
return $row-$field;
}
/**
* Veritabanında veri olup olmadığını kontrol eder...
*
* @return bool
*/
function BoolQuery()
{
if($this-NumRows())
return true;
else
return false;
}
/**
* Veritabanından gelen tek veriyi object olarak döndürür...
* Bu fonksiyon fetchrow ile aynıdır fakat ileride projemiz genişlediğinde bunun yararını göreceğiz.
* @return object
*/
function SingleRow()
{
$row = $this-FetchRow();
return $row;
}
/**
* Veritabanından gelen cogul veriyi dizi olarak döndürür...
*
* @return object
*/
function MultipleRow()
{
$array = array();
while($row = $this-FetchRow())
{
array_push($array,$row);
}
return $array;
}
/**
* Kullanılan veriyi siler...
*
* @return null
*/
function FreeResult()
{
$r = @mysql_free_result($this-_result);
unset($this);
return $r;
}
}
class Datalayer
{
var $prefix;
var $lang;
var $debug;
var $host;
var $user;
var $password;
var $database;
var $conn;
/**
* Constructor. Veritabanı bağlantısı yapılır.
*
* @return Datalayer
*/
function Datalayer()
{
$this-prefix = "jure";
$this-debug = true;
$this-host = "localhost";
$this-user = "root";
$this-database = "database";
$this-password = "password";
$this-Connect();
$this-selectDatabase($this-database);
$this-setCharset();
}
/**
* Veritabanı bağlantısı...
*
*/
function Connect()
{
if($this-host && $this-user && $this-database)
$this-conn = mysql_connect($this-host,$this-user,$this-password) or $this-error("Could not connect to server","Connect to $this-host $this-user:$this-password");
}
/**
* Mysql Charseti...
*
*/
function setCharset()
{
mysql_query("SET NAMES 'latin5'");
mysql_query("SET CHARACTER SET latin5");
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'");
}
/**
* Veritabanı seç...
*
* @param string $database
*/
function selectDatabase($database)
{
$this-database = $database;
mysql_select_db($database, $this-conn) or $this-MysqlError(mysql_error(), "no database");
}
/**
* sql sorgusunu veritabanına gönderir.
*
* @param string $sql
* @return object
*/
function LiteQuery($sql)
{
$result = mysql_query($sql, $this-conn) or $this-MysqlError(mysql_error(), $sql);
return new Result($result);
}
/**
* sql sorgusunu veritabanına gönderir...
*
* @param array $fields
* @param array $tables
* @param array $where
* @param array $order
* @param array $group
* @param string $limit
* @return object
*/
function Query($fields, $tables, $where = array(), $order = array(), $group=array(),$limit = "")
{
foreach ($tables as $tbl)
{
$tablos[] = $this-prefix."_".$tbl;
}
$fields = implode(",",$fields);
$tables = implode(",", $tablos);
$where = implode(" AND ", $where);
$order = implode(",",$order);
$group = implode(",",$group);
$sql = "SELECT $fields FROM $tables";
if(!empty($where)) $sql .= ' WHERE '.$where;
if(!empty($order)) $sql .= ' ORDER BY '.$order;
if(!empty($group)) $sql .= ' GROUP BY '.$group;
if(!empty($limit)) $sql .= ' LIMIT '.$limit;
$result = mysql_query($sql, $this-conn) or $this-MysqlError(mysql_error(), $sql);
return new Result($result);
}
/**
* Veritabanı hatasını ekrana yazdırır
*
* @param string $error
* @param string $query
*/
function MysqlError($error, $query)
{
if($this-debug)
{
echo "SQL: $querybr /Error: $error";
}
}
/**
* Veritabanına eklenen satırın id sini verir.
*
* @return int
*/
function InsertId()
{
return mysql_insert_id();
}
/**
* Veritabanı bağlantısı kapat
*
*/
function Close()
{
mysql_close($this-conn);
}
}
?
@mysql_connect("localhost","user","password")
@mysql_select_db("database")
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
?php
Class Page extends Smarty
{
var $page;
var $tpl;
/**
* Constructor...
*
* @return Page
*/
function Page()
{
$_REQUEST['page'] = (isset($_REQUEST['page'])) ? $_REQUEST["page"] : "index";
$this-compile_dir = 'temp/page'; // compile edilecek temaların kopyalanacağı dizin
$this-template_dir = 'templates'; // tema dosyalarının bulunacağı dizin
$this-page = $this-ClearPage($_REQUEST['page']); // sayfadaki zararlı karakterleri temizleyelim
$this-ClearGlobals(); // globallerden gelen zararlı değişkenleri temizleyelim
$this-tpl = $this-IncludeTemplate(); // sitemizin kullanacağı ana temayı belirleyelim
}
/**
* Sayfaya göre ana temayı yükler...
*
* @return string
*/
function IncludeTemplate()
{
switch ($this-page )
{
case "index" :
$template = $this-AddTemplate("main");
break;
default :
$template = $this-AddTemplate("main");
}
return $template;
}
/**
* Ana tema yolu...
*
* @param string $param
* @return string
*/
function AddTemplate($param)
{
$thetpl = "main/" . $param . ".tpl";
return $thetpl;
}
/**
* ":", "/", "..", ".", ";", "\\", "http", "ftp" karakterlerini temizler...
*
* @param string $page
* @return string
*/
function ClearPage($page)
{
$page = (!isset($page)) ? "index" : $page;
$page = str_replace(array(":", "/", "..", ".", ";", "\\", "http", "ftp"), "", $page);
return $page;
}
/**
* Gelen dizideki ' karakterlerini /' olarak değiştir...
*
* @param array $array
* @return array
*/
function Escape($array)
{
reset($array);
while (list($key, $val) = each($array)) {
if (is_string($val)) {
$array[$key] = addslashes($val);
} else {
if (is_array($val)) {
$array[$key] = $this-Escape($val);
}
}
}
return $array;
}
/**
* Global'den gelen değerler escape fonksiyonuna gönderilir...
*
*/
function ClearGlobals()
{
if (!get_magic_quotes_gpc())
{
@$_REQUEST = $this-Escape($_REQUEST);
@$_POST = $this-Escape($_POST);
@$_GET = $this-Escape($_GET);
@$_COOKIE = $this-Escape($_COOKIE);
@$_SESSION = $this-Escape($_SESSION);
@$_SERVER = $this-Escape($_SERVER);
}
}
}
?
Sunum katmanıda tamamlanmış oldu. .
İŞ KATMANI
class/functions.php
?php
function int($param)
{
return intval($param);
}
/**
* Dosyanın olup olmadığını kontrol eder...
*
* @param string $path
* @return bool
*/
function isfile($path)
{
if (!is_file($path)) return false; else return true;
}
/**
* HTML taglarınız geçersiz hale getirir...
*
* @param string $string
* @return string
*/
function clearhtml($string)
{
return htmlspecialchars($string);
}
/**
* yönlendirme yapar...
*
* @param string $page
*/
function location($page)
{
header("Location: $page");
exit();
}
?
class/thumb.class.php
?php
/**
*
* @author Ian Selby (ian@gen-x-design.com)
* @copyright Copyright 2006
* @version 1.1 (PHP4)
*
*/
class Thumbnail
{
var $errmsg;
var $error;
var $format;
var $fileName;
var $imageMeta;
var $currentDimensions;
var $newDimensions;
var $newImage;
var $oldImage;
var $workingImage;
var $percent;
var $maxWidth;
var $maxHeight;
function Thumbnail($fileName)
{
if(!function_exists("gd_info"))
{
echo 'You do not have the GD Library installed. This class requires the GD library to function properly.' . "\n";
echo 'visit http://us2.php.net/manual/en/ref.image.php for more information';
exit;
}
//initialize variables
$this-errmsg = '';
$this-error = false;
$this-currentDimensions = array();
$this-newDimensions = array();
$this-fileName = $fileName;
$this-imageMeta = array();
$this-percent = 100;
$this-maxWidth = 0;
$this-maxHeight = 0;
$this-watermarkImg = '';
//check to see if file exists
if(!file_exists($this-fileName))
{
$this-errmsg = 'File not found';
$this-error = true;
} elseif(!is_readable($this-fileName)) {
$this-errmsg = 'File is not readable';
$this-error = true;
}
//if there are no errors, determine the file format
if($this-error == false)
{
//check if gif
if(stristr(strtolower($this-fileName),'.gif')) $this-format = 'GIF';
//check if jpg
elseif(stristr(strtolower($this-fileName),'.jpg') || stristr(strtolower($this-fileName),'.jpeg')) $this-format = 'JPG';
//check if png
elseif(stristr(strtolower($this-fileName),'.png')) $this-format = 'PNG';
//unknown file format
else {
$this-errmsg = 'Unknown file format';
$this-error = true;
}
}
//initialize resources if no errors
if($this-error == false)
{
switch($this-format)
{
case 'GIF':
$this-oldImage = ImageCreateFromGif($this-fileName);
break;
case 'JPG':
$this-oldImage = ImageCreateFromJpeg($this-fileName);
break;
case 'PNG':
$this-oldImage = ImageCreateFromPng($this-fileName);
break;
}
$size = GetImageSize($this-fileName);
$this-currentDimensions = array('width'=$size[0],'height'=$size[1]);
$this-newImage = $this-oldImage;
$this-gatherImageMeta();
}
if($this-error == true)
{
//$this-showErrorImage();
break;
}
}
function destruct()
{
if(is_resource($this-newImage)) @ImageDestroy($this-newImage);
if(is_resource($this-oldImage)) @ImageDestroy($this-oldImage);
if(is_resource($this-workingImage)) @ImageDestroy($this-workingImage);
}
function getCurrentWidth()
{
return $this-currentDimensions['width'];
}
function getCurrentHeight()
{
return $this-currentDimensions['height'];
}
function calcWidth($width,$height)
{
$newWp = (100 * $this-maxWidth) / $width;
$newHeight = ($height * $newWp) / 100;
return array('newWidth'=intval($this-maxWidth),'newHeight'=intval($newHeight));
}
function calcHeight($width,$height)
{
$newHp = (100 * $this-maxHeight) / $height;
$newWidth = ($width * $newHp) / 100;
return array('newWidth'=intval($newWidth),'newHeight'=intval($this-maxHeight));
}
function calcPercent($width,$height)
{
$newWidth = ($width * $this-percent) / 100;
$newHeight = ($height * $this-percent) / 100;
return array('newWidth'=intval($newWidth),'newHeight'=intval($newHeight));
}
function calcImageSize($width,$height)
{
$newSize = array('newWidth'=$width,'newHeight'=$height);
if($this-maxWidth 0)
{
$newSize = $this-calcWidth($width,$height);
if($this-maxHeight 0 && $newSize['newHeight'] $this-maxHeight)
{
$newSize = $this-calcHeight($newSize['newWidth'],$newSize['newHeight']);
}
//$this-newDimensions = $newSize;
}
if($this-maxHeight 0)
{
$newSize = $this-calcHeight($width,$height);
if($this-maxWidth 0 && $newSize['newWidth'] $this-maxWidth)
{
$newSize = $this-calcWidth($newSize['newWidth'],$newSize['newHeight']);
}
//$this-newDimensions = $newSize;
}
$this-newDimensions = $newSize;
}
function calcImageSizePercent($width,$height)
{
if($this-percent 0)
{
$this-newDimensions = $this-calcPercent($width,$height);
}
}
function showErrorImage()
{
header('Content-type: image/png');
$errImg = ImageCreate(220,25);
$bgColor = imagecolorallocate($errImg,0,0,0);
$fgColor1 = imagecolorallocate($errImg,255,255,255);
$fgColor2 = imagecolorallocate($errImg,255,0,0);
imagestring($errImg,3,6,6,'Error:',$fgColor2);
imagestring($errImg,3,55,6,$this-errmsg,$fgColor1);
imagepng($errImg);
imagedestroy($errImg);
}
function resize($maxWidth = 0, $maxHeight = 0)
{
$this-maxWidth = $maxWidth;
$this-maxHeight = $maxHeight;
$this-calcImageSize($this-currentDimensions['width'],$this-currentDimensions['height']);
if(function_exists("ImageCreateTrueColor"))
{
$this-workingImage = ImageCreateTrueColor($this-newDimensions['newWidth'],$this-newDimensions['newHeight']);
} else {
$this-workingImage = ImageCreate($this-newDimensions['newWidth'],$this-newDimensions['newHeight']);
}
ImageCopyResampled(
$this-workingImage,
$this-oldImage,
0,
0,
0,
0,
$this-newDimensions['newWidth'],
$this-newDimensions['newHeight'],
$this-currentDimensions['width'],
$this-currentDimensions['height']
);
$this-oldImage = $this-workingImage;
$this-newImage = $this-workingImage;
$this-currentDimensions['width'] = $this-newDimensions['newWidth'];
$this-currentDimensions['height'] = $this-newDimensions['newHeight'];
}
function resizePercent($percent = 0)
{
$this-percent = $percent;
$this-calcImageSizePercent($this-currentDimensions[ 'width'],$this-currentDimensions['height']);
if(function_exists("ImageCreateTrueColor"))
{
$this-workingImage = ImageCreateTrueColor($this-newDimensions['newWidth'],$this-newDimensions['newHeight']);
} else {
$this-workingImage = ImageCreate($this-newDimensions['newWidth'],$this-newDimensions['newHeight']);
}
ImageCopyResampled(
$this-workingImage,
$this-oldImage,
0,
0,
0,
0,
$this-newDimensions['newWidth'],
$this-newDimensions['newHeight'],
$this-currentDimensions['width'],
$this-currentDimensions['height']
);
$this-oldImage = $this-workingImage;
$this-newImage = $this-workingImage;
$this-currentDimensions['width'] = $this-newDimensions['newWidth'];
$this-currentDimensions['height'] = $this-newDimensions['newHeight'];
}
function cropFromCenter($cropSize)
{
if($cropSize $this-currentDimensions['width']) $cropSize = $this-currentDimensions['width'];
if($cropSize $this-currentDimensions['height']) $cropSize = $this-currentDimensions['height'];
$cropX = intval(($this-currentDimensions['width'] - $cropSize) / 2);
$cropY = intval(($this-currentDimensions['height'] - $cropSize) / 2);
if(function_exists("ImageCreateTrueColor"))
{
$this-workingImage = ImageCreateTrueColor($cropSize,$cropSize);
} else {
$this-workingImage = ImageCreate($cropSize,$cropSize);
}
imagecopyresampled(
$this-workingImage,
$this-oldImage,
0,
0,
$cropX,
$cropY,
$cropSize,
$cropSize,
$cropSize,
$cropSize
);
$this-oldImage = $this-workingImage;
$this-newImage = $this-workingImage;
$this-currentDimensions['width'] = $cropSize;
$this-currentDimensions['height'] = $cropSize;
}
function crop($startX,$startY,$width,$height)
{
//make sure the cropped area is not greater than the size of the image
if($width $this-currentDimensions['width']) $width = $this-currentDimensions['width'];
if($height $this-currentDimensions['height']) $height = $this-currentDimensions['height'];
//make sure not starting outside the image
if(($startX + $width) $this-currentDimensions['width']) $startX = ($this-currentDimensions['width'] - $width);
if(($startY + $height) $this-currentDimensions['height']) $startY = ($this-currentDimensions['height'] - $height);
if($startX 0) $startX = 0;
if($startY 0) $startY = 0;
if(function_exists("ImageCreateTrueColor"))
{
$this-workingImage = ImageCreateTrueColor($width,$height);
} else {
$this-workingImage = ImageCreate($width,$height);
}
imagecopyresampled(
$this-workingImage,
$this-oldImage,
0,
0,
$startX,
$startY,
$width,
$height,
$width,
$height
);
$this-oldImage = $this-workingImage;
$this-newImage = $this-workingImage;
$this-currentDimensions['width'] = $width;
$this-currentDimensions['height'] = $height;
}
function show($quality=100,$name = '')
{
switch($this-format)
{
case 'GIF':
if($name != '')
{
ImageGif($this-newImage,$name);
} else {
header('Content-type: image/gif');
ImageGif($this-newImage);
}
break;
case 'JPG':
if($name != '')
{
ImageJpeg($this-newImage,$name,$quality);
} else {
header('Content-type: image/jpeg');
ImageJpeg($this-newImage,'',$quality);
}
break;
case 'PNG':
if($name != '')
{
ImagePng($this-newImage,$name);
} else {
header('Content-type: image/png');
ImagePng($this-newImage);
}
break;
}
}
function save($name,$quality=100)
{
$this-show($quality,$name);
}
function gatherImageMeta()
{
if(function_exists("exif_read_data") && $this-format == 'JPG')
{
$imageData = exif_read_data($this-fileName);
if(isset($imageData['Make']))
$this-imageMeta['make'] = ucwords(strtolower($imageData['Make']));
if(isset($imageData['Model']))
$this-imageMeta['model'] = $imageData['Model'];
if(isset($imageData['COMPUTED']['ApertureFNumber']))
{
$this-imageMeta['aperture'] = $imageData['COMPUTED']['ApertureFNumber'];
$this-imageMeta['aperture'] = str_replace('/','',$this-imageMeta['aperture']);
}
if(isset($imageData['ExposureTime']))
{
$exposure = explode('/',$imageData['ExposureTime']);
$exposure = round($exposure[1]/$exposure[0],-1);
$this-imageMeta['exposure'] = '1/' . $exposure . ' second';
}
if(isset($imageData['Flash']))
{
if($imageData['Flash'] 0)
{
$this-imageMeta['flash'] = 'Yes';
} else {
$this-imageMeta['flash'] = 'No';
}
}
if(isset($imageData['FocalLength']))
{
$focus = explode('/',$imageData['FocalLength']);
$this-imageMeta['focalLength'] = round($focus[0]/$focus[1],2) . ' mm';
}
if(isset($imageData['DateTime']))
{
$date = $imageData['DateTime'];
$date = explode(' ',$date);
$date = str_replace(':','-',$date[0]) . ' ' . $date[1];
$this-imageMeta['dateTaken'] = date('m/d/Y g:i A',strtotime($date));
}
}
}
}
?
Thumb class'ı ile ayrıntılı bilgiye http://www.gen-x-design.com/projects/php-thumbnailer-class/ adresinden ulaşabilirsiniz.
class/general.class.php
?php
Class General
{
var $db;
/**
* Enter description here...
*
* @param unknown_type $db
* @return General
*/
function General(&$db)
{
$this-db = &$db;
}
/**
* Sayfalama fonksiyonu...
*
* @param string $index
* @param string $page
* @param string $action
* @param string $static
* @param int $p
* @param int $num
* @param int $limit
* @return string
*/
function Pagination($index,$page,$action,$static,$p,$num,$limit)
{
$nav = "";
if($num $limit)
{
$p = (int) $p;
$total_page = ceil($num / $limit);
$tpl_on = "lia href=\"".$index."?page=".$page."&action=".$action.$static."&p={s}\"".$p."/a/li";
$tpl_off = " lia href=\"".$index."?page=".$page."&action=".$action.$static."&p={s}\"{t}/a/li ";
$pages = array ($p-3,$p-2,$p-1,$p,$p+1,$p+2,$p+3);
$pages = array_unique($pages);
//
$nav .= "div class=\"pagination\"ul";
if($total_page 1 && $p != 1)
$nav .= str_replace("{t}", "İlk", str_replace("{s}", 1, $tpl_off));
if($p 1)
$nav .= str_replace("{t}", "", str_replace("{s}", ($p-1), $tpl_off));
while(list($key,$val) = each($pages))
{
if($val = 1 && $val = $total_page)
{
if($p == $val)
$nav .= str_replace(array("{s}", "{t}"), $val, $tpl_on);
else
$nav .= str_replace(array("{s}", "{t}"), $val, $tpl_off);
}
}
if($p $total_page)
$nav .= str_replace("{t}", "", str_replace("{s}", ($p+1), $tpl_off));
if($total_page 1 && $p != $total_page)
$nav .= str_replace("{t}", "Son", str_replace("{s}", $total_page, $tpl_off));
$nav .= "/ul/div";
}
return $nav;
}
/**
* Cache yapilan resimler için Md5 isim olusturur...
*
* @param string $param
* @param int $height
* @param int $width
* @return string
*/
function CacheHash($param,$height="",$width="")
{
$hash = md5($param.$height.$width);
return $hash;
}
}
?
Buraya kadar yazdığımız class ve fonksiyonlar sistemin ana işleyişi ile iligli kısımdı. Şimdi haber sistemini yapmaya başlayabiliriz.
alıntı
![]() |
3 Katmanlı Mimari Ve Php adlı bu yazının tamamını ve yapılan yorumları okumak için tıklayın. |
|

