folder Tahribat.com Forumları
linefolder Asp - Php - Cgi - Perl
linefolder PHP' Yi HTML Den Soyutlamalı Mı ?



PHP' Yi HTML Den Soyutlamalı Mı ?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek
    sLeymN bunu yazdı

    bakınız. mvc, restful

     

     

    metot değil hocam, fayda ve faydasızlıklarını merakımdan açtım konuyu, çünkü php diğer dillere nazaran farklı bi amaçla çıkmış ve konumu farklı. daha yeni yeni oop yapısı kazandırılıp tam bir server side tarafında geçiriliyor :d

    @PcK0 bekliyorum hocam

     

    ozgunlu tarafından 01/Nis/16 13:57 tarihinde düzenlenmiştir

    Hello, i am nothing. I come from Neverland.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    Öncelikle kafamdakileri yazayım daha sonra phonegap ile birleştirme konusuna değiniriz. Ve baştan alayım.

    PHP ile HTML kodunu tümleşik yazmak her ne kadar büyük performans sağlayacak gibi dursada uygulamanın geliştirilebilirliğine büyük darbe vuruyor. Proje tamamlandıktan sonra elimizde değişimlere karşı direnç gösteren ve yeni özellik eklenmesi bahsedeceğim sisteme göre çok uzun süren bir kod kalıyor. İlgili sistem farklı platfromlara kaydırılınca çok acı verici bir süreç başlıyor ve kod bahsedeceğim mimariye otomatikman dönüşmek zorunda kalıyor.

     

    Örnek üzerinden gidersek daha kolay olur diye düşünüyorum.

    İstek: abc.com/kullanici/pck0 olsun.

    İlk olarak isteği PHP tarafında yorumluyoruz. Kullanıcılardan pck0 rumuzlu kullanıcının profil sayfası istenmiş. Öyleyse bize pck0 kullanıcısının verileri lazım. Bunu sql ile çekiyoruz. Normalde sınıf olarakta kullanıyor olabiliriz ama karışmasın diye bu verileri $kullanici adında bir dizide tuttuğumuzu varsayalım. Ve işte bu noktada benim söylemek istediğim sistem devreye giriyor. Normalde elimizdeki verileri ekrana

    şeklinde basarız. Bunun yerine buraya bir karar mekanizması ekleyip bu isteğin bir ajax mı yoksa normal bir istek mi olduğuna dair karar mekanizması ekleriz. Eğer bir ajax isteği ise bunu basitçe json_encode() ile göndeririz. Eğer normal bir istek ise burada verilerimizi template engine'e ilgili sayfa adıyla göndeririz. Şöyle ki:

    Kodumuz:

    Eğer istek ajax ise:

    Eğer istek normal ise:

    şeklinde basacak. Ve bunun böyle olmasını sağlayan twig template'miz ise:

    Velhasıl kelam PHP kodumuz o ilk bölümde gösterdiğim gibi HTML kodlarından soyutlanmış olacak. Ve böylece istersek HTML olarak, istersek JSON olarak hatta bahsetmedim ama XML formatında ekrana basabileceğiz. Ve bu konuda sınır olmayacak. Multiplatfroma destek veren bir yapı olacak.

    PhoneGap olayına bunu tanımlamak istersek sadece ve sadece dış çağrımlar için ajax kullanmak gerekecek. Ve bizim kodumuz üstteki yapı ile çok kolay JSON formatında veri aktarımı yapabiliyor. O yüzden isterse native bir mobil uygulama olsun gayet başarılı olarak çalışacaktır. Yani bütün olay aslında bundan ibaret. Ekrana basılacak değişkenleri hemen basmıyor bir karar mekanizması ile tekrar şekillendiriyoruz. Bahsedilen MVC mimarisinin view kısmı böyle. Birçok atlaya atlaya HTML ile ayırmanın neden güzel olduğuna değinmek istedim. Resimler her ne kadar güzel çıkmasada kafada böyle şekillendirmesi bile kolay olacaktır.

     

    Şimdi geldik multilanguage olayına. Klasik PHP ile cevap vermek istersem PHP:gettext ve PoEdit derim. çıktılarımızı echo _('bu bir deneme yazısıdır'); şeklinde yazıyoruz. Sonra PoEdit ile bütün projeyi tarıyor ve çeviri yapacağımız dili seçiyoruz. Bizim karşımıza bir tablo çıkartıyor solda orjinal halleri sağda bizim çeviri yapacağımız alan oluyor. Kullanılan printf %s gibi ifadesiyle çevirilerde değişkenlerin yerinin farklı olamamasınında önüne geçiyor. Biraz internetten araştırırsanız daha detaylı bilgi bulabilirsiniz.

    MVC mimarisi altında destek vermek gerekirse, PHP:gettext + Twig + i18n + Twig gettext extractor + PoEdit gibi devasa grup ile multilanguage olayını ancak çözebiliyoruz. Twig bu sefer gettext sistemini i18n eklentisinde trans ile birleştiriyor. Twig gettext extractor ile de PoEdit'e çıktıları verebiliyoruz.

    :) Herşeyin akabinde umarım biraz olsun seni spagetti koddan uzaklaştırırım da en azından programların benim bu yazımdan daha fazla verimli olur :)

     

     

    PcK0 tarafından 01/Nis/16 22:39 tarihinde düzenlenmiştir

    Sadece bi imza..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek
    PcK0 bunu yazdı

    Öncelikle kafamdakileri yazayım daha sonra phonegap ile birleştirme konusuna değiniriz. Ve baştan alayım.

    PHP ile HTML kodunu tümleşik yazmak her ne kadar büyük performans sağlayacak gibi dursada uygulamanın geliştirilebilirliğine büyük darbe vuruyor. Proje tamamlandıktan sonra elimizde değişimlere karşı direnç gösteren ve yeni özellik eklenmesi bahsedeceğim sisteme göre çok uzun süren bir kod kalıyor. İlgili sistem farklı platfromlara kaydırılınca çok acı verici bir süreç başlıyor ve kod bahsedeceğim mimariye otomatikman dönüşmek zorunda kalıyor.

     

    Örnek üzerinden gidersek daha kolay olur diye düşünüyorum.

    İstek: abc.com/kullanici/pck0 olsun.

    İlk olarak isteği PHP tarafında yorumluyoruz. Kullanıcılardan pck0 rumuzlu kullanıcının profil sayfası istenmiş. Öyleyse bize pck0 kullanıcısının verileri lazım. Bunu sql ile çekiyoruz. Normalde sınıf olarakta kullanıyor olabiliriz ama karışmasın diye bu verileri $kullanici adında bir dizide tuttuğumuzu varsayalım. Ve işte bu noktada benim söylemek istediğim sistem devreye giriyor. Normalde elimizdeki verileri ekrana

    şeklinde basarız. Bunun yerine buraya bir karar mekanizması ekleyip bu isteğin bir ajax mı yoksa normal bir istek mi olduğuna dair karar mekanizması ekleriz. Eğer bir ajax isteği ise bunu basitçe json_encode() ile göndeririz. Eğer normal bir istek ise burada verilerimizi template engine'e ilgili sayfa adıyla göndeririz. Şöyle ki:

    Kodumuz:

    Eğer istek ajax ise:

    Eğer istek normal ise:

    şeklinde basacak. Ve bunun böyle olmasını sağlayan twig template'miz ise:

    Velhasıl kelam PHP kodumuz o ilk bölümde gösterdiğim gibi HTML kodlarından soyutlanmış olacak. Ve böylece istersek HTML olarak, istersek JSON olarak hatta bahsetmedim ama XML formatında ekrana basabileceğiz. Ve bu konuda sınır olmayacak. Multiplatfroma destek veren bir yapı olacak.

    PhoneGap olayına bunu tanımlamak istersek sadece ve sadece dış çağrımlar için ajax kullanmak gerekecek. Ve bizim kodumuz üstteki yapı ile çok kolay JSON formatında veri aktarımı yapabiliyor. O yüzden isterse native bir mobil uygulama olsun gayet başarılı olarak çalışacaktır. Yani bütün olay aslında bundan ibaret. Ekrana basılacak değişkenleri hemen basmıyor bir karar mekanizması ile tekrar şekillendiriyoruz. Bahsedilen MVC mimarisinin view kısmı böyle. Birçok atlaya atlaya HTML ile ayırmanın neden güzel olduğuna değinmek istedim. Resimler her ne kadar güzel çıkmasada kafada böyle şekillendirmesi bile kolay olacaktır.

     

    Şimdi geldik multilanguage olayına. Klasik PHP ile cevap vermek istersem PHP:gettext ve PoEdit derim. çıktılarımızı echo _('bu bir deneme yazısıdır'); şeklinde yazıyoruz. Sonra PoEdit ile bütün projeyi tarıyor ve çeviri yapacağımız dili seçiyoruz. Bizim karşımıza bir tablo çıkartıyor solda orjinal halleri sağda bizim çeviri yapacağımız alan oluyor. Kullanılan printf %s gibi ifadesiyle çevirilerde değişkenlerin yerinin farklı olamamasınında önüne geçiyor. Biraz internetten araştırırsanız daha detaylı bilgi bulabilirsiniz.

    MVC mimarisi altında destek vermek gerekirse, PHP:gettext + Twig + i18n + Twig gettext extractor + PoEdit gibi devasa grup ile multilanguage olayını ancak çözebiliyoruz. Twig bu sefer gettext sistemini i18n eklentisinde trans ile birleştiriyor. Twig gettext extractor ile de PoEdit'e çıktıları verebiliyoruz.

    :) Herşeyin akabinde umarım biraz olsun seni spagetti koddan uzaklaştırırım da en azından programların benim bu yazımdan daha fazla verimli olur :)

     

     

    Şimdi kafam rahat hocam, 3-4 güne sistemi bu hale getiricem. Yazdıklarını araştırdım, güzel şeyler. Eline sağlık ve teşekkür ederim yardımcı olduğun için :)

    Server side' da da Slim Framework üzerinden Rest API' ye çeviriyim diyorum. Slim zaten lightweight miş, hem de twig ile çalışabiliyormuş.

    Yani kısaca slim + twig + gettext + i18n + poedit yapıcam. 

    şimdi socket.io falan kullanmak istiyorum nodejs ile real time bazı şeylere ihtiyacım var. bu yukardaki arkadaşlar sıkıntı oluşturur mu ? (sanmıyorum ama)

    ek : tek endişem, template engine kullanınca hızdan kaybım olacak mı ? (yani olacaktır da ne kadar olacak acaba)

    ozgunlu tarafından 14/Nis/16 16:56 tarihinde düzenlenmiştir

    Hello, i am nothing. I come from Neverland.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    @ozgunlu

    Hızdan kaybım olacak mı diye sormuşsun. Cache kullanmazsan hızdan fena halde kayıp yaşanır. Template'lerin render'lama süresi biraz kaynak harcıyor. Önüne geçmek için cache kullanıyoruz.

    Gene bir önceki gibi Twig'i ele alarak konuşacağım. Twig ilk template dosyasını ekrana basmak istediğimizde ilk olarak render'layıp klasik php dosyasına çeviriyor. Sonra bunu ekrana basıyor. Tabi normal olarak Twig'i böyle kullanırsak her seferinde dosya render'lanıp çok fazla kaynak harcanacak. Fakat bir cache dizini gösteriyoruz. Eğer cache dizini gösterirsek Twig dosya isminden kafasına göre olduğunu düşündüğüm bir hash değeri üretiyor. Template dosyasını ilk olarak bu hash ile dizinde arıyor. Eğer bulamazsa template dosyasını render'layıp cache dizinine kaydediyor. Böylece bir sonraki istekte render'lama zahmetinden kurtuluyoruz. Fakat Twig'in burada bir eksiği var. Template dosyasını değiştirdiğimizde Twig bunu umursamayıp sadece cache dizininde var mı yok mu diye baktığı için biz ne kadar değiştirsekte gene eski çıktıyı alıyoruz. Bu yüzden bir cache sistemi kullanmak lazım geliyor. Twig'in bu sorununu production'a hazırladığımızda cache sistemini açmak ile ya da her bir istekte template dosyası ile cache dosyasının son değişiklik tarihlerini karşılaştırarak cache dosyası template dosyasının render'ı olduğundan dolayı daha yeni tarihe sahip olması gerektiği şartından yola çıkarak cache dosyası daha eski ise cache dosyasını basitçe silmek ilede önüne geçebiliyoruz. Her ne kadar ikinci seçenek tam bir çözüm olmasada development sırasında uzun render zamanı olan dosyalarda pratiklik sağlayabilir. Benim önerim elbetteki productiona sürmeden hemen önce cache sistemini açmaktır.

     


    Sadece bi imza..
Toplam Hit: 2198 Toplam Mesaj: 15
php html içiçe olmalı mı