Eyl
08
2007
0

ERP’NİN ABC’Sİ

ERP’nin günümüzdeki tanımı nedir? Bugün artık ERP konuşulurken sadece planlama fonksiyonundan bahsedilmiyor. ERP artık bir kurumun yaptığı işin bütününü yansıtan bir kavram olarak kullanılıyor. Diğer bir deyişle ERP bir kurumun tüm bileşenlerinin bir bütün olarak görülmesine imkan veriyor.

ERP, bir kurumun kendi iç süreçlerini bütünleşik bir yapıda gerçekleştirmeye imkan tanırken, işin kurum sınırları dışına taşan kısmının da desteklenmesini sağlıyor. Bu iki süreci birleştiren ERP çözümlerinin genel karakteristikleri şöyle özetlenebilir:

    ERP uygulamaları, iş süreçlerini adresler. ERP uygulamaları modüler yapıdadır. ERP uygulamaları entegredir. ERP uygulamaları kurumların sınırlarını aşar, müşterilerine, iş ortaklarına ve tedarikçilerine kadar uzanır. Uçtan uca bir ERP çözümü, kurumun tüm iş fonksiyonlarını destekler.
    </LI>

ERP hakkında kafalarda soru işareti oluşturan bazı konulara yanıt aramak gerekirse karşılaşacağımız sorular ve yanıtları şunlar olacaktır:

1.“İş süreci” kavramı şirketin bir bölümü veya özel bir fonksiyonu mudur?

İş süreçleri, kurum içerisinde birden fazla fonksiyona dokunur. Bu nedenle fonksiyonlar ve bölümler üzeridir. Örneğin bir şirkette muhasebe bölümü olabilir ya da satın alma işlemi gerçekleştirilebilir. Bu bölümler işlerini süreçler aracılığıyla yapar ama süreçler bölüm veya fonksiyon değildir. Örneğin satış süreci, müşteriyi edinmekle başlayan ve ürün veya hizmetin karşılığını müşteriden tahsil edene dek süren bir dizi aşamayı içerir.. Bu nedenle süreçler çok daha geniş bir yapıya sahiptir.

2.Modüler bir ERP uygulaması, standart uygulamalardan nasıl farklılaşır?

ERP uygulamasının güzel yanı, içerisindeki tüm fonksiyonların entegre bir yapıda çalışmasıdır. Bu özelliğe sahip olmayan bir çözüm, iş süreçlerinin bütününü kapsayamaz. Modüler yapının önemi, ERP uygulamasını satın alma ve kurma sürecinde daha da ön plana çıkar. Bir kurum, ERP uygulamasının sahip olduğu fonksiyonların tümünü kullanmak istemeyebilir. Bu nedenle modüler yapı istenilen fonksiyonları istenilen zamanlarda kullanmayı mümkün kılar.

3.Kullandığım uygulamalar zaten entegre. Neden ERP düşüneyim?

Farklı uygulamalar her zaman birbiri ile uyumlu çalışmaz ve aslında bu zor bir süreçtir. Ayrıca bir araya gelmiş birçok uygulama tek bir uygulamanın sağladığı özellikleri sağlayamayabilir. Yani 2+2 her zaman 4 etmeyebilir.

Yapılan birçok araştırma göstermektedir ki özellikle orta ve küçük ölçekli kurumlar bazı işlemleri birçok kez tekrarlamaktadır. Bu mükerrer işlemler sırasında belli başlı sorunlarla karşılaşmak mümkün. Örneğin sürekli veri girişi yapmak aman kaybına neden olmakta. Ayrıca bu girişlerde hata payı yükselmekte. Farklı uygulamalardan gelen veriler farklı özellikte olacağı için bu verileri bütünleştirip analizler yapmak elma ile armudu karşılaştırmak gibi kalacaktır.

Entegre bir ERP paketinde gerekli veriler bir kere girildikten sonra ihtiyaç duyulan her noktada kullanılabilmektedir. Uygulamayı kullanan tüm süreçler ve çalışanlar, karar verme mekanizmasındaki yöneticiler bilgileri aynı biçimde, gerçek zamanlı olarak görme şansına kavuşur.

4.Neden ERP uygulaması, kurumun sınırlarını aşmak zorunda?

Günümüzde kurumların işleri zaten kendi sınırlarını aşıyor, dahili uygulamalar harici uygulamalarla bütünleşiyor. Başarılı olmak isteyen kurumlar, satın alma süreçlerini, iş ortakları ve müşterileri ile olan ilişkilerini en doğru ve etkin biçimde sürdürmek orunda. Bunların tümü harici operasyonlar gerektiriyor.

5.Kurumun bütününü adresleyen bir ERP çözümüne sahip olmanın avantajları nelerdir?

Komple bir çözüm sahibi olmanın, parça parça uygulamalara göre birçok önemli avantajı söz konusudur.

    Ölçeklenebilirlik: ERP çözümleri, kurumun büyümesine paralel olarak genişleyebilme özelliğine sahiptir. Fonksiyonalite: ERP çözümleri, uygun maliyetlerle farklı fonksiyonlara gerektiği zaman erişmeyi mümkün kılar. Bugün ihtiyaç duymadığınız bir özelliği yarın aktive ederek kullanmanız mümkün. Destek ve hizmet: ERP çözümlerinde destek ve hizmet son derece önemlidir. Entegre bir ERP ortamının destek ve hizmet işlemleri çok daha basit ve etkili biçimde gerçekleştirilebilir.</LI>

KOBİ’lerin Başlıca Sorunları

Dünyada birçok KOBİ, 1990’lı yıllardaki ERP fırtınasına yakalanmış ve bu sürecin maliyetlerini ve zorluğunu göğüslemekte zorlanmıştır. Bugün bu kurumların çoğu, güncelliğini kaybetmiş veya gereğinden fazla büyük uygulamalarla iş yapmaya çalışmakta ve rekabetçiliklerini korumak için yeni teknolojilere yatırım yapmak zorunda kalmaktadır. Bugün birçok KOBi ellerindeki sistemler için güncellemelere, farklı uygulamalara ve yeni teknolojilere gereksinim duymaktadır.

ERP’yi yeniden değerlendirmek için doğru zaman mı?

Günümüzde KOBİ’ler için maliyetlerin etkin biçimde yönetimi son derece önemlidir. Ayrıca KOBİ’lerin finansman eksiliği de önemli bir sorundur. Buna karşın günümüzün modern KOBİ’leri, müşteri tabanını büyütmek ve eldeki müşterileri korumak çabası içerisindedir. Her geçen gün farklılığı azalan ürün ve hizmetlerin getirdiği rekabet, KOBİ’lerin bir diğer önemli sıkıntısıdır. Bu sıkıntıların ERP ile kesiştiği noktalara bir göz atalım:

    Kurumsal stratejilerin ve inisiyatiflerin hayata geçirilmesi için finansman yetersizliği Kurumsal vizyonu ve hedefleri belirlemedeki sıkıntı Kurumsal stratejilerin ve inisiyatiflerin iletişiminde yetersizlik Çalışanların daha verimli kılınması için gerekli olan ölçütlerin eksikliği Kurumsal amaçları gerçekleştirecek kalifiye insan kaynağı eksikliği Müşteri taleplerini planlamada yetersizlik
    </LI>

Kurumsal stratejilerin belirlenmesi ve etkin biçimde duyurulmasının en iyi yolu, kurum içerisinde portal yapıları üzerinden çalışanlar ile etkileşimin sağlanmasıdır. Amaçlara yönelik girişimlerin hayata geçirilmesi için yine insan kaynağı ile etkin iletişim, e-işe alma sistemleri önemli avantajlar sağlayacaktır diğer yandan müşteri taleplerini öngörmeye yönelik analiz ve raporlama sistemleri süreci oldukça kolaylaştıracaktır. Her ne kadar orta ölçekli kurumlar bu tür çözümleri hayata geçirmekte büyük ölçekli kurumlardan biraz daha yavaş olsa da ERP tüm bu sorunlara çözüm getirmektedir.

<I>Sonuç olarak…</I>

Günümüzde KOBİ’ler, teknolojiyi, stratejilerini hayata geçiren bir araç olarak konumlandırmaktadır. Gelişmiş analiz araçları, karar destek sistemleri, raporlama araçları ve süreçlere özel uygulamaların özellikleri geliştikçe, bu hedef daha kolay gerçekleşmektedir. ERP çözümleri, bu çabanın en önemli destekçisidir.

KOBİ’lerin farklı iş yapma biçimleri ve kendilerine özgü dinamiklerinin çeşitliliği hala son derece fazladır. Buna karşın operasyonel maliyetlerin düşürülmesi ve yatırımların daha etkin gerçekleştirilmesi sayesinde KOBİ2ler iş amaçlarına daha etkin biçimde ulaşacaktır. Bunun yolu ERP’den geçmektedir. Bu bağlamda KOBİ2ler şu 3 noktaya dikkat etmelidir:

    İş amaçlarının ve gerekliliklerin bugünün şartlarına göre belirlenmesi Potansiyel çözümlerin, üreticilerin ve katma değerli satıcıların değerlendirilmesi Planların bugün için değil gelecek için yapılması</LI>

 

kaynak: microsoft.com

Written by turgay in: Genel |
Eyl
08
2007
0

CRM Nedir?

Müşteri ilişkileri yönetimi ya da çok popüler kısaltması ile CRM, son birkaç yılda, her ölçekten şirketin stratejik ajandasında yer alan bir yatırım. Üzerine binlerce rapor yazılan, milyarlarca dolar yatırım yapılan ve hala gelişmeyi sürdüren bu alan acaba iş dünyası için neler vaat ediyor?

Öncelikle CRM pazarının son yıllarda nasıl bir gelişme sürecinde olduğuna bakıldığında karşımıza iş dünyasının yaşadığı büyük değişim çıkıyor. Dünyada, hemen hemen tüm pazarlarda rekabetin arttığı, ürünlerin pazara girme sürelerinin kısaldığı ve marjların düştüğü bir ortamda müşteriye daha etkin ulaşmak, müşterinin isteklerini anlayarak ürün ve hizmetleri bu yönde şekillendirmek büyük önem taşıyor. Tüm bu ihtiyaçlar çerçevesinde CRM pazarı hızla gelişmeyi sürdürüyor. Dünyaca ünlü araştırma şirketlerinin rakamları da bu büyümeyi net biçimde ortaya koyuyor. Aberdeen Reseach’e göre dünyada CRM yazılımları ve hizmetleri pazarı 2003 yılında 23 milyar dolarlık bir hacme ulaştı. Bu konuda biraz daha iddialı bir rakam ortaya koyan IDC ise 2005 yılı sonunda CRM yazılımları ve hizmetleri alanında elde edilecek gelirlerin tüm dünyada 162 milyar dolara çıkacağını öngörüyor.

Önce Müşteri…

CRM’in C’si yani müşteri (customer) kavramının son yıllarda yaşadığı değişim gerçekten inanılmaz boyutlara ulaştı. Tarihsel süreç açısından bakıldığında 1950’li yılların “Ne bulursam görürüz. Arz ekonomisinin ön planda olduğu bu dönemlerde pazarda yer alan ürün ve hizmetlerin çeşitliliğindeki sınırlamalar, tüketici tercihlerinin geri plana atılmasına zemin hazırlıyordu. Ardından 1970’li yıllar geldi ve ürün ve hizmet çeşitliliği artmaya başladı. Bu noktada müşterilerin genel eğilimi “Neyi alabilirsem onu alayım” biçiminde değişti. 1990’larla birlikte artık “ne istersem onu alırım” dönemi başladı. bu yeni döneme gelinmesinde birkaç temel nokta büyük rol oynadı.

    Ürün ve hizmetlerim çeşitliliği inanılmaz biçimde arttı ve müşterilerin tercih olasılıkları çoğaldı. Bilgi ve iletişim teknolojilerini etkin kullanan müşteriler, bilgiye, rakibe ve muadil ürünlere çok kolay erişebilir bir hale geldi. Teknolojik yapılar, ürün ve hizmetlerin pazarlanmasından dağıtım kanalına dek iş süreçlerini değiştirdi. Müşterilere çok farklı kanallardan erişim mümkün oldu.</LI>

Tüm bu gelişmeler hemen hemen tüm unsurları olumlu etkilediyse de müşteri sadakatinin inanılmaz ölçüde düşmesini sağladı. Örneğin konut kredisi ile ilgilenen bir müşteri eskiden çalıştığı bankadan başka bir tercihe kolaylıkla sıcak bakmaz iken bugün internet üzerinde bir arama motoruna “konut kredisi” yazarak 10 binden fazla sayfaya ve onlarca farklı teklife birkaç dakika içerisine erişme şansına sahip oluyor.

Diğer taraftan yapılan birçok araştırma, müşteriyi elde tutmanın, yeni müşteri kazanmaktan çok daha karlı bir iş olduğunu ortaya koyuyor. Loyalty Effect’in araştırmalarına göre 5 yılda bir müşterilerinin yaklaşık yarısını kaybeden şirketlerin buna acil bir çözüm bulması gerekiyor. zira mevcut müşterileri elinde tutmanın maliyeti, yeni müşteri kazanmaya oranla 6-7 kat daha düşük.

Müşteriyi elde tutmanın yolu ise basit: Müşteriyi anlamak, onun ihtiyaçları çerçevesinde ürün ve hizmetlerini özelleştirebilmek… Bunun ilginç bir örneği ABD’nin çok satan gazetelerinden biri tarafından ortaya koyuldu. Söz konusu gazete elde ettiği veriler ışığında müşterilerini nasıl daha fazla tatmin edebileceği sorusuna cevap aramak için bir anket yaptırdı. Bu çalışma sonucunda gazete aboneliklerini iptal eden müşterilerin en büyük sıkıntılarının dağıtımın sabahın geç saatlerinde yapılması olduğu ortaya çıktı. Diğer taraftan satış noktalarında gazetenin iyi sergilenmemesi alım oranını azaltıyordu. Gazete yönetimi, öncelikle ülke çapındaki baskı tesislerini yüksek hızlı ağlarla birbirine başlayarak baskı potansiyelini daha verimli kullanmaya başladı. Böylece dağıtım süresi sabahın erken saatlerine çekilmiş oldu. Kurulan bir telefon hattı üzerinden de abonelere gazetelerini hangi saatlerde almak istediklerini bildirebildikleri bir kanal sağlandı. Farklı bölgelerin hava durumu sayfaları o bölgeye özel hale getirildi. Tüm bu faaliyetler sonucunda gazetenin tirajı %2 arttı ve müşteriyi elde tutma oranı %95’e yükseldi. ABD’de bu oranın endüstri ortalaması ise yüzde 60’dı.

CRM Nedir?

Aslında CRM, çok da yeni bir kavram değil. CRM kısaltması ABD medyasında 1989 yılında sadece birkaç defa geçmesine karşın 2000 yılında bu rakam 14 bine ulaşmıştı. Hangi dönemde olursa olsun, vizyon sahibi yöneticilerin tümü müşterileri anlamanın işlerini geliştirmek için ne kadar faydalı olduğunun bilincinde olmuştur. 50 sektör üzerinde yapılan bir araştırmaya göre 1923 yılında sektöründe lider olan şirketlerin 43’ü bugün hala o sektörlerin liderleri. Ve bu şirketlere bakıldığında hepsinin müşteriyi anlamaya ciddi yatırımlar yapan ve müşteri odaklı çalışan şirketler oldukları görülüyor.

CRM’in bugünkü boyutuna temel oluşturan güzel örneklerden bir tanesi de eski mahalle bakkalları… Müşterilerinin neredeyse tamamını ismen tanıyan, ürünlerden hangilerini ne şekilde tercih ettiğini bilen bu bakkallara gönderme yapan Meta Group analisti Liz Shahnam CRM’i şöyle tanımlıyor:

“<I>CRM pek de yeni olmayan bir kavram. Yeni olansa geçmişte mahalle bakkalımızla yapabildiğimizi olası kılan teknoloji… O bakkalın az sayıda müşterisi ve herkesin tercihlerini aklında tutabilecek güçte hafızası vardı. Teknoloji, işte bu modelin gerçekleşmesini sağladı."</I>

Örnekler bir yana, genel bir tanımını yapmak gerekirse; CRM, karşılıklı, uzun vadeli bir değer ilişkisi yaratmak için müşteriler ile gerçekleştirilen ilişkilerin etkin biçimde yönetilmesidir. CRM; satış, pazarlama ve hizmet süreçlerinin müşteri odaklı bir felsefe etrafında yeniden tanımlanmasını gerektirir.

CRM’in neden son dönemde bu kadar popüler olduğuna bakıldığında birkaç ana noktadan söz etmek gerekir:

    İş dünyasındaki rekabetin geldiği nokta, müşteriyi çok daha ön plana çıkarıyor. 1990’lı yılarda ERP ile başlayan kurumsal verimlilik sürecinde arka ofis uygulamaları olgunlaştı. Bu otomatize yapının dışa açılan yüzüne olan ihtiyaç daha da arttı. Ürünlerin pazarda kalma süreleri kısaldı, yenilikçi ürünlerin sağladığı ilk olma avantajı azaldı. Müşteriler için seçenekler artarken üreticilerin rekabeti arttı. İnternet başta olmak üzere iletişim teknolojileri, müşterilerin seçim alışkanlıklarını değiştirdi, sadakat seviyelerini azalttı.</LI>

Stratejiden Teknolojiye CRM

Tanımdan da anlaşılacağı üzere CRM, bir felsefe ve bir iş yapma biçimidir. Bu son derece önemli bir nokta, zira birçok kurum CRM’i teknolojik bir çözüm olarak görüyor. bu kısıtlı bakış açısı ile başlayan projeler tamamlandığında da beklenen sonuçları tam anlamıyla veremiyor.

Aslında CRM’in yapısını bir piramide benzetmek mümkün. Bu piramidin en tepesinde iş stratejisi yatıyor. İkinci katmanda ise organizasyon yapısı (yani çalışanlar) ve son olarak en alt katmanda teknoloji bulunuyor. CRM; kurumların iş stratejilerine yönelik ihtiyaçlarını, kurumsal yapı ve süreçlerin optimizasyonu ile sağlarken bunu destekleyen ve buna imkân veren yapı olarak da teknolojinin kullanılmasını gerektiriyor.

İş fonksiyonları açısından bakıldığında CRM; pazarlama, satış, ticaret ve hizmet süreçlerinin etkin kılınmasında büyük rol oynar.

    Pazarlama süreçlerinde veri toplama, kampanya yönetimi, olası müşterilerin yönetimi gibi birçok araç ile yeni müşterilerin kazanılması ve eldeki müşterilerden daha fazla değer elde edilmesi mümkün olur. Satış süreçlerinde, bilgi yönetimini ve paylaşımını sağlamak, raporlama ve analiz yetenekleri geliştirmek gibi avantajları ile CRM, satış hacminin yükseltilmesinde önemli role sahip olur. Hizmet alanında ise CRM’in etkileşim ve web ortamında süreçlerin yürütülmesi anlamında oldukça önemli açılımlar sağladığı bir gerçek.</LI>
Pazarlama Satış E-ticaret Hizmetler
Kurum çalışanları Pazarlama otomasyonu Satış otomasyonu Hizmet otomasyonu
Satış kanalı İş ortakları ile olan ilişkilerin yönetilmesi
Online müşteriler Kurumsal web sitesi-portal   e-ticaret portali Self servis hizmetler

CRM’in Farklı Aşamaları

Bugün CRM çözümleri olarak nitelendirilen uygulamalar ile geçmişteki uygulamalar arasında birçok yapısal benzerlik ve farklılıklar vardır. Aslında farklılıklar, CRM’in geçirdiği evreleri de ortaya koyması açısından önemlidir. CRM’de yeni bir dönem başlamasına neden olan en temel gelişme, çözümlerin içerisinde yer alan analitik özelliklerin gerçek zamanlı ve çok daha kapsamlı hale gelmesi oldu. Bu özellikler çeşitlendikçe CRM çözümleri de farklılaşmaya başladı. bu anlamda 3 temel CRM yapısından söz etmek mümkün:

Operasyonel CRM: CRM’in bu biçimi aslında tipik iş fonksiyonlarının kapsandığı CRM çözümlerinden oluşur. Bu fonksiyonlara örnek olarak müşteri hizmetleri, sipariş yönetimi, faturalama, satış ve pazarlama otomasyonu gibi süreçleri verebiliriz. Bu çözümler daha çok kurumsal sistem içerisindeki finans, insan kaynakları gibi farklı iş fonksiyonlarının entegre bir yapıya kavuşturulması için kullanılır.

Analitik CRM: Adından da anlaşılacağı gibi bu CRM biçiminde kullanıcılara ait verilerin elde edilmesi, depolanması, işlenmesi, analiz ve tahminlere dönüştürülerek raporlanması işlemleri gerçekleştirilir. Böylelikle CRM’in operasyonel ve entegrasyon özellikleri üzerine analiz ve raporlama özellikleri eklenir.

İşbirliğine yönelik CRM: Bu CRM biçimi aslında diğerlerinin en uygun birleşiminden oluşur. Müşteriler ile şirketler arasında tam anlamıyla bir etkileşim ve koordinasyon ağının oluşmasına imkân veren bu çözümler, farklı iletişim kanallarından (web, telefon, e-posta vb) gelen bilgilerin değere dönüştürülmesini sağlar. İşbirliğine Yönelik CRM çözümleri müşteri ile etkileşime imkân veren tüm fonksiyonları içerir.

Kaynak: microsoft.com

Written by turgay in: Genel |
Eyl
07
2007
0

3G Teknolojisi Nedir?

3G teknolojisi kısaca telefonla uydu aracılığı ile veri alma veya göndermedir. Eski GPRS sistemlerde ses normal olarak giderken, yeni nesil 3G de ise ses veri olarak gidecektir.

Bunun yararları ise çoktur. Laptop’unuzudan cep telefonu aracılığı ile geniş bant olarak internete bağlanabilirsiniz, cep telefonuzun taracısıyla internete bağlanabilirsiniz, cep telefonu ile görüntülü konuşma yapabilir veya TV izleyebilirsiniz.

Geniş bantın cepe girmesiyle internetin ikinci devresinin başladığına inanıyorum.

Ülkemizde maalesef 3G teknolojisi çok geç geldi. Bugün Turkcell 3G teknolojisi ihalesini kazandığını okudum. Ülkemizde ihalesi yeni yapılması bazı gariplikleri birbirinde getirdi. Ülkemizde satılan bazı Nokia’nın modellerinde 3G teknolojisi desteği vardı ama 3G Türkiye’de yoktu. Artık o telefon sahipleride bu özellikten faydalabilecekler.

Geçtiğimiz aylarda telefon alacaklara 3G desteği telefon almaları yönünde uyarılarda bulunmuştum. Tahmin ettiğim gibi 3G ile ülkemizde tanıştı. Hayırlı uğurlu olsun.

Hee bir de Turkcell’in aldığı iyi oldu, Telekom alsaydı 3G’ye kota falan getirirdi. Kotalı 3G diye yine tarih sayfalarına şanlı adımızı yazdırırdık.

Written by turgay in: Genel |
Eyl
07
2007
1

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

<IMG src=”http://www.ceviz.net/ceviz_main/uploads/uye949/3n.jpg” mce_src=”http://www.ceviz.net/ceviz_main/uploads/uye949/3n.jpg” >

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

<IMG src=”http://www.ceviz.net/ceviz_main/uploads/uye949/makale.jpg” mce_src=”http://www.ceviz.net/ceviz_main/uploads/uye949/makale.jpg” >

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) </DIV>


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 SAzLIK KURULUzUNDAN 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.ceviz.net/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);

</DIV></DIV>

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: $query<br />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); 
    }
}
?> </DIV></DIV>

@mysql_connect(”localhost”,”user”,”password”)
@mysql_select_db(”database”)
kısımlara kendi veritabanı bilgilerimizi yazıyoruz. </DIV>

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);
        }
    }
}
?> </DIV></DIV>

Sunum katmanıda tamamlanmış oldu. . 
İz 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();
}
?> </DIV></DIV>

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));
            }
        }
    }
}
?> </DIV></DIV>

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     = “<li><a href=\”".$index.”?page=”.$page.”&action=”.$action.$static.”&p={s}\”>”.$p.”</a></li>”;
$tpl_off     = ” <li><a 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;
    }
}
?> </DIV></DIV>

Buraya kadar yazdığımız class ve fonksiyonlar sistemin ana işleyişi ile iligli kısımdı. zimdi haber sistemini yapmaya başlayabiliriz.

ceviz.net ten alıntıdır.

Written by turgay in: Php&MySQL, Yazılım Mühendisliği |
Eyl
06
2007
0

Windows Live Suite – Windows Live Messenger 8.5 Türkçe

Windows Live Photo Gallery Beta, Windows Live Messenger 8.5 Beta, Windows Live Writer Beta, Windows Live OneCare Family Safety ve Windows Live Toolbar yazılımlarını içeren Windows Live Suite; Microsoft tarafından tüm dillerde yayınlandı.
Windows Live Suite bileşenlerinin tümünü indirmek istiyorsanız
aşağıdaki sayfayı ziyaret ediniz:
Windows Live deneyiminizi özelleştirin
Windows Live Mail:

E-posta hesaplarınızı yönetmenin daha hızlı, kolay ve güvenli yolu

    Birden fazla e-posta hesabını masaüstünüzde görüntüleme Güçlü virüs tarama ve diğer güvenlik özellikleri Windows Live Spaces’a ve Messenger’a tek tıklatmayla erişim </LI>

Windows Live Fotoğraf Galerisi:
""
Fotoğraf ve video düzenleyip karşıya yükleyin

    Fotoğraflarınızı kolayca alın ve düzenleyin Düzenini belirleyin, resim yazısı ekleyin ve en beğendiklerinizi slayt gösterisi için işaretleyin Birkaç tıklatmayla çevrimiçi ortamda paylaşın </LI>

Windows Live Writer:

Blogunuzda kolayca resim, video ve diğer zengin içeriği yayımlayın

    Blog postalarınızı yazarken nasıl görüneceklerini tam olarak görün Windows Live Spaces, WordPress, Live Journal ve diğer birçok blog hizmetiyle uyumlu Fotoğraf, video, etiket ve daha bir çok çekici içerik ekleyin ve özelleştirin </LI>

Windows Live Toolbar:

Güçlü koruma özelliğiyle tüm Web sayfalarında arama yapın

    Herhangi bir Web sayfasında arama başlatın Kimlik avı tuzaklarına ve virüslere karşı daha iyi korunun </LI>

Windows Live Messenger:

Bağlanın, paylaşın ve konuşmalarınıza önem kazandırın

    Metin, ses veya görüntü kullanarak bağlanın Fotoğrafları ve diğer dosyaları anında paylaşın “i’m” girişimi ile en çok önem verdiğiniz amaç için para ayrılmasını sağlayın </LI>

Yalnızca Windows Live Messenger 8.5 Türkçe BETA’yı indirmek istiyorsanız aşağıdaki sayfayı ziyaret ediniz:
Windows Live Messenger’ınızı ayarlayın

Windows Live Messenger sürümü: Sürüm 2008 (Derleme 8.5.1288.816)
Windows Live sayfasından hangi bileşenleri kurmak istediğinizi seçebilirsiniz. WLinstaller.exe dosyasını indirdikten sonra da diğer Windows Live bileşenlerini kurabilmeniz mümkün.

Not: Windows Live Messenger 8.5.1288.816 sürümü ve eklentilerin/yamaların uyumu konusunda daha fazla bilgiyi bu konunun sonraki mesajlarında bulabileceksiniz. Messenger Plus! Live, sorunsuz olarak çalışıyor görünmekte.

Written by turgay in: Genel |

Turgay YILMAZ