Öncelikle Cotonti'nin Land Down Under'ın halefi olan Seditio CMS'nin halefi olduğunu söylemeliyiz ve bu da sadece yeni doğan bir portal sistemi değil, 19 yılı aşkın kaliteli çalışma mirasının mirasçısı olduğu anlamına geliyor. Bu, yeni bir proje olarak modern web geliştirme trendlerinin en önemlilerini takip etme eğiliminde olduğu, ancak bu arada eski okul geleneklerinin en iyilerini koruduğu anlamına gelir.
Elbette bunun eskimiş, modası geçmiş ve sonsuza dek ölmesi gerektiğini söyleyeceksiniz. Muhtemelen nesne yönelimli programlamanın dünyanın kurtarıcısı olduğunu ve hayatta kalacak tek paradigma olduğunu iddia etmek istersiniz. Eğer gerçekten böyle düşünüyorsanız, tamamen nesne yönelimli başka bir çerçeveye baksanız iyi olur. Ancak biz bunu üç basit nedenden dolayı bilinçli bir seçim yaptık:
Kodu çok temiz, düz ve anlaşılması kolay tutuyoruz.
Bu şekilde performans açısından diğer içerik yönetim sistemlerini geride bırakır.
Ve bu şekilde, "gerçek OOP", "gerçek Web 2.0" ve gürültü yapan ancak gerçek günlük işler söz konusu olduğunda hiçbir anlam ifade etmeyen diğer moda sözcüklerle aynı olan kalabalık CMF/CMS pazarında bir fark yaratır.
Öte yandan, Cotonti tahmin edebileceğiniz kadar ilkel ve tutucu değildir. Çekirdek çoğunlukla prosedürel olmasına rağmen, bazı kesin işlevler ve çevre birimleri kullanışlı sınıflar ve sınıf kütüphaneleri ile sağlanabilir. Dolayısıyla, bu iki ünlü programlama konseptinden en iyisini almaktan çekinmiyoruz.
Nesneleri, kendilerini en iyi gösterdikleri alanlarda kullanıyoruz. Örneğin, Cononti, veritabanından bağımsız sınıfların ifade gücünü ve yerel PHP uzantılarının performansını birleştiren PDO veritabanı soyutlama katmanını kullanır.
Polimorfizm, kapsülleme ve kalıtımın (3 temel OO ilkesi) çok yardımcı olduğu bir başka yaygın yer de Önbellek kütüphanesidir.
Cotonti farklı optimizasyon amaçları için birden fazla önbellek katmanına sahiptir ve çeşitli önbellek depolarını destekler, ancak hepsi sağlam bir arayüz sağlar, bu nedenle hangi sürücüyü kullandığını ve gerçekte nasıl çalıştığını önemsemeniz gerekmez.
Şablon motorumuz da nesne yönelimli arayüze sahiptir, ancak bu sadece bir yan nottur. Buna karşın size Cotonti Ekibi tarafından gizli bir laboratuvarda özel bir Nesne Yönelimli sınıf kütüphanesi geliştirildiğini söyleyebilirim.
Hala standart prosedürel Cotonti çekirdeğinin üzerine inşa edilmiştir, ancak ortak yapı ve kod modellerinin inanılmaz bir şekilde yeniden kullanılabilirliğini sağlamak için bazı birinci sınıf nesne yönelimli teknikler kullanır.
Böyle bir kütüphane ile bir geliştirici sadece birkaç dakika içinde yeni iş ve içerik yönetimi uygulamaları yazabilecektir.
Model-View-Controller, bir web uygulaması için en popüler tasarım modelidir. Çoğu modern çerçevede uygulamanın 3 temel katmanından oluşur:
Model. Verileri varlıklar, ilişkiler, kayıtlar ve özellikler açısından temsil eder. Bazı geliştiriciler verileri bir veritabanında depolamanın veya veritabanı soyutlama katmanı kullanmanın bir modele sahip olmak olduğunu düşünür. Ancak biraz daha deneyimli olanlar, bunun uygulama verilerinin yapısını ve veri yönetimi için temel soyutlamaları temsil eden kod olduğunu bilirler.
View. Kullanıcının gördüklerinin uygulamanın yaptıklarının tamamı olmadığı ilkesine dayanır. Bir görünüm katmanına sahip olmak, düzeni prosedürlerden ayırmak ve düzen üretimi için özel prosedürler kullanmak anlamına gelir. Çoğu durumda bu, bir şablon motorunun kullanılması anlamına gelir.
Controller. Genellikle geri kalan her şeyi yapan kod anlamına gelir, saf MVC'de kontrolör bir olay işleyicidir ve tüm sistem olay güdümlüdür. Farklı kontrolörler uygulamanın farklı bölümlerinden sorumludur, olaylara tepki verir ve yürütme akışını düzenler.
Cotonti'den bahsetmişken, modelin her bileşeni biraz farklıdır: Veri modelleri genellikle eski-iyi düz SQL ile tanımlanır.
Model yapısı ve mantığı üzerinde herhangi bir kısıtlama koymuyoruz ve bu nedenle modül geliştiricilerine uygulamayı en iyi olduğunu düşündükleri şekilde tasarlama özgürlüğü veriyoruz. Veri manipülasyonu ve sorgulama için PDO (PHP Data Objects) katmanı kullanılmaktadır.
Cotonti, CoTemplate adlı şablon motoru için özeldir. Oldukça popüler bir XTemplate motorunun tüm özellikleriyle birlikte gelir ve onunla geriye dönük olarak uyumludur.
Denetleyici tarafından itilen yapısal bloklara ve bunların içinde değiştirilebilir değişkenlere ("TPL etiketleri") sahiptir. Ayrıca değişkenler için daha sonra "geri çağırma" özelliğine sahiptir ve çıktıyı işleme işlevleri aracılığıyla iletir. Blok tabanlı şablon motorları gerçekten basit ve net bir yapıya sahiptir ve özel bir şey yapmak istemediğiniz sürece programlama becerisi gerektirmez.
Bu durumda şablondaki bir şeyi her kontrol etmek istediğinizde denetleyiciyi değiştirmeniz gerekir. Bu sorun CoTemplate'de çözülmüştür çünkü mantıksal kontrol yapılarını (IF/ELSE) ve statik yapı bloklarını (BEGIN/END) aynı anda destekler. Böylece hem tasarımcılar hem de kodlayıcılar için özgürlük ve netliği bir araya getirir. Ve tahmin edebileceğiniz gibi yavaş olmadığından emin olmak için, şablonların bellek görüntülerini önbelleğe alır ve gerçek zamanlı olarak ayrıştırma yapmaz.
Modern çerçevelerin çoğu sizi genellikle onlarca ve yüzlerce etkileşimli sınıf içeren karmaşık denetleyici hiyerarşileri oluşturmaya teşvik ederken, Cotonti'de denetleyiciler son derece basittir.
Aslında, sınıf hiyerarşilerinin ve temel API'lerin derinliklerine inmek zorunda kalmadan program akışını kolayca izleyebilmeniz için saf komut dosyası ruhuyla inşa edilmişlerdir. Sıralamalarına rağmen kontrolörler, aslında "eklenti" adı verilen diğer komut dosyalarının dahil edilmesi için giriş noktaları olan kancalar aracılığıyla oldukça genişletilebilir. Modülerlik açıklaması aşağıdadır.
Sistemin kalbinde bir dizi kütüphane ve çekirdek komut dosyası vardır. Belirli bir özelliği uygulayan bir grup fonksiyon veya sınıf içeren her kütüphaneye API denir.
Ana hayati API, minimal CMS ortamını yükleyen bir bootstrap betiği ve standart davranışı uygulayan birkaç betik Core olarak adlandırılır.
Kullanıcı yönetimi modülü ve yönetim arka ucu ile birlikte bu dosyalar İçerik Yönetimi Çerçevesini oluşturur. Çerçeve, Modüller oluşturmak için kullanılır. Modüller bir site için en büyük yapı taşlarıdır.
Bir modül, sitede son kullanıcıya bazı benzersiz işlevler sağlayan bir konumu temsil eder. Modüller bağımsızdır. Diğer modüllerle etkileşime girebilirler ancak tamamen kendi başlarına çalışabilirler. Eklentiler, çekirdeği ve modülleri genişletmek için kullanılır.
Eklentiler, davranışlarını değiştirmek için modüllere veya çekirdek komut dosyalarına bağlanır. Modüller ve eklentiler, çekirdek işlevselliği genişlettikleri için birlikte Uzantılar olarak adlandırılır. Uzantılar size site özelleştirmesinde sınırsız özgürlük sağlar ve güncellemelerde sizi birçok baş ağrısından kurtarır.
Uluslararasılaştırma (genellikle i18n olarak kısaltılır), bir uygulamanın farklı doğal dillerde kullanılmak üzere yapılandırılması için önemli bir özelliktir. Aynı zamanda çok dilli içeriklere doğru atılan önemli bir adımdır. XXI yüzyılda birçok site aynı anda farklı dillerde mesajlar içerebilir ve bu nedenle giderek daha fazla insan karakter kodlaması olarak Unicode'u seçmektedir.
Cotonti kutudan çıktığı haliyle Unicode'u destekler ve varsayılan karakter seti olarak UTF-8'i tercih eder. Sistemin arayüzü dil dosyaları kavramı kullanılarak yerelleştirilmiştir. Birkaç tür dil dosyası vardır: çekirdek dil dosyaları, modül dil dosyaları, tema dil dosyaları ve her bir eklentiyle birlikte gelen dil dosyaları.
Herhangi bir nedenle diliniz için dil dosyası yoksa, kendiniz veya bir çevirmen ya da topluluktan yardım alarak kolayca çeviri yapabilirsiniz. Sayfalar ve kategoriler gibi site içeriklerinin uluslararasılaştırılması da desteklenir. Cotonti ile tamamen çok dilli web siteleri oluşturabilir, çevirileri yönetebilir ve i18n uzantılarını etkinleştirirseniz diller arasında anında geçiş yapabilirsiniz.
Cotonti dünyanın en güvenli PHP CMS'lerinden biriydi (hata kayıtlarına göre) ve istikrarı ana hedeflerinden biri haline getirdi. Bunun takip edilmesi gereken iyi bir gelenek olduğuna inanıyoruz.
Kodlayıcılar SQL enjeksiyonları, siteler arası komut dosyası oluşturma (XSS), siteler arası istek sahteciliği (CSRF) ve yaygın PHP tuzaklarının farkındadır ve sitenizi hem pasif (düzgün kodlama, hata düzeltmeleri) hem de aktif (özel algoritmalar) savunma ile korumak için ellerinden geleni yaparlar.
Ayrıca Erişim Kontrol Listeleri (ACL) ve Erişim Modlarına dayalı güçlü ve net bir izin verme sistemi vardır. Kullanıcı grupları ve site öğelerinin sütun olarak yer aldığı bir matristir. Matrisin alanları ve hücreleri bir grup ve bir öğe için tam izin içerir.
Ayrıca yerleşik anti-hammering ve spam koruması da vardır. Ancak tüm bu mükemmel güvenlik sistemlerine rağmen, siteyi kendinizden koruyamayacaklarını her zaman hatırlamalısınız. İstikrar için bariz tanımlardan biri, hataların olmamasıdır.
Bunu başarmanın iki yolu vardır. Birincisi yukarıda da bahsettiğimiz gibi dikkatli kodlamadır. İkincisi ise Kalite Güvencesi (QA) olarak bilinir. Kullanıcı tarafından gönderilen hata raporları, testler, hata ayıklama ve güncellemelerden oluşur..
Performans söz konusu olduğunda en önemli soru, sitenizin dakikada kaç isteği (RPM) veya saniyede kaç isteği (RPS) kaldırabileceğidir. Ve Cotonti'de yüksek sonuçlar almak için elimizden geleni yapıyoruz.
Yeni özellikler eklerken ek yüklerden kaçınıyoruz, ön oluşturma ve sunucu tarafı önbellek gibi etkili performans teknikleri kullanıyoruz. SQL sorguları ve veritabanı optimize edilmiştir ve kod, siteniz büyüdüğünde ve çok daha popüler hale geldiğinde işini iyi yapacak şekilde tasarlanmıştır.
Sunucunuz destekliyorsa çoklu site kurulumları oluşturabilirsiniz, böylece aynı motoru birkaç veritabanına ve site yapılandırmasına güç sağlamak için kullanabilirsiniz. Öte yandan, yük tek bir sunucunun yeterli olmayacağı kadar artarsa, Cotonti MySQL kümeleri, web sunucusu kümeleri, yük dengeleyicileri ile kolayca ölçeklendirilir ve dağıtılmış modda sorunsuz çalışır.
Bazı çok iyi görünümlü web siteleri vardır, çok sayıda grafik ve Flash ile mükemmel bir görünüme ve hisse sahiptirler, ancak arama motorları tarafından o kadar düşük sıralanırlar ki, onları bulmanız bir mucizedir. Bu nedenle sitenizi arama için optimize etmek önemlidir.
Cotonti güçlü URL tasarım aracı, özelleştirilebilir başlıklar, metalar ve çok sayıda kullanışlı yapılandırma seçeneği ile birlikte gelir. Cotonti bir web robotuna hangi sayfaları indekslememesi ve hangi bağlantıları takip etmemesi gerektiğini söyler. Site haritaları da eklentiler tarafından sağlanmaktadır.
Son olarak, eklentilerle harika SEO fırsatları var: bunların sayısı artıyor ve istediğinizi kolayca yazabilirsiniz.
Cotonti web geliştirme alanındaki en önemli modern trendleri takip ediyor. Aşağıda bunlardan sadece en önemlilerinden bahsedilmektedir.
AJAX, Asenkron JavaScript ve XML anlamına gelir ancak aslında benzer teknolojilerden oluşan mutlu bir ailedir. Sayfayı yenilemeye gerek kalmadan istemci-sunucu iletişimi sağlar.
Bu şekilde web uygulaması daha hızlı çalışır, daha az bant genişliği tüketir ve kullanıcı gözünde daha yumuşak görünür. Cotonti, istemci tarafında mükemmel AJAX desteği sağlayan dünyanın en popüler JavaScript kütüphanesi jQuery ile birlikte gelir.
Sunucu tarafında herhangi bir Cotonti modülü hem senkron hem de asenkron modda çalışabilir ve eklentiler için kolayca AJAX parçaları yazabilirsiniz. Varsayılan olarak (X) HTML çıktısı üretilir. Bunu AJAX işleyicileri ve robotlar için uygun kompakt XML dosyalarına dönüştürmek için kolayca XML şablon dosyaları yazabilirsiniz.
Erişim izinlerine göre sitenizin farklı alanları için RSS ve Atom uyumlu çıktı üreten standart RSS modülünü yüklediyseniz robotlar da sitenizin içeriğini alabilir. Besleme toplayıcıları gibi uzantılar topluluk tarafından sağlanır.
Çoğu site bilgi sağlar, bir ziyaretçi istediği bilgiyi ne kadar hızlı bulursa o kadar memnun olur. Cotonti, uygun site içeriklerinin popüler arama servislerinde yer alması için elinden geleni yapar, ancak ne yazık ki Google veya Bing gibi harici arama sistemleri sitenizin bazı özel alanlarına erişemez veya sitenizin dizinini gerçek zamanlı olarak güncelleyemez.
Bu nedenle, dizinini zamanında güncelleyen ve doğrudan kullanıcının görmesine izin verilen verilerde arama yapan kendi site arama sistemimizi geliştirdik. Bazı popüler sitelerdeki yaşam Etiketler olmadan hayal edilemez ve Cotonti size esnek bir Etiketler alt sistemi sunar.
Etiketleri sayfalarda, forumlarda, üçüncü parti modüllerde ve kendi eklentilerinizde kullanabilirsiniz. Kullanıcılarınızın site girdilerini etiketlemesine izin verin; etiket bulutları oluşturacak ve insanların öğeleri etiketlere göre aramasına izin verecektir.
Cotonti kutudan çıktığı haliyle bir sosyal ağ değildir çünkü çok temel çekirdek işlevselliğe sahip genel bir CMS/CMF'dir.
Ancak, temel özelliklerini (sayfalar, forumlar, özel mesajlar) internette bulunan bazı harika eklentilerle birlikte kullanırsanız bir tane oluşturabilirsiniz: bloglar, arkadaşlar, kullanıcı duvarları, galeriler vb.
Duvarda bir tuğla eksikse, onu yapmak için çok fazla çaba harcamanıza gerek kalmayacaktır - bu Cotonti'nin gücüdür. Diğer popüler sosyal ağlarla bağlantı, ücretsiz eklentiler ve hizmetlerle de kurulabilir. Örneğin, Facebook, Twitter ve diğer sosyal ağlar ve servislerle etkileşim için eklentiler vardır. Web servisleri söz konusu olduğunda Cotonti, Single Sign-On sağlayıcıları, dosya paylaşımı, coğrafi konum gibi mevcut olanlarla kolayca iletişim kurabilir. Ya da seçtiğiniz bir arayüzü kullanarak Cotonti sitenizden web servislerini dışa aktarmak için modüller ve eklentiler oluşturabilirsiniz: REST, XML-RPC, SOAP, her neyse.
Cotonti kullandığınızda herşey sizin hayal gücünüze bağlıdır.