PHP şablon nasıl ...

5 Cevap php

Ben PHP çiftleşmiş önemini anlamaya başlıyorum. Ben herhangi bir yeni dil öğrenme önlemek için bir şablon motoru olarak PHP'nin kendisi kullanıyorum. Ben bu konuda bir fikrim var, ancak ben hala bir şey tho net değilim. Ben uzmanlar ne bilmek istiyorum.

Ben tüm tablolar, formlar ve (üstbilgi ve altbilgi dahil) her şeyi ile tam bir sayfa şablonu oluşturmanız gerekir, ya da ben kendi dosyasında vb benim tablolar, formlar, tüm koymak ve sonra gerektiği gibi şablonuna eklemek gerekir.

İşte şeyleri temizlemek için küçük bir örnek ...

Should I

a) içindeki tüm tablolar, formlar ve diğer unsurları ile bir sayfa oluşturmak ve bir nihai ürün olarak kullanan

// Set all the information
$template->title = $username;
$template->user_info = get_user($user_id);
$template->articles = get_articles($user_id);
$template->ads = random_ad($user_info);

// Load the template with everything already in it
$template->load('user_page.tpl')
$template->display();

VEYA

b) kendi dosyasında her tablo, form, ilgili blok elemanı oluşturmak ve sonra nihai bir ürün yaratmak için bunları kullanın

// set the title and load the header template
$header['title'] = $username;
$template->load('header.tpl', $header);

// get the user info as an array and load into user profile template
$user_info = get_user($user_id);
$template->load('user_profile.tpl');

// load the new article form
$template->load('new_article_form.tpl');

// get the articles as an array of info and load into user articles template
$articles = get_articles($user_id);
$template->load('user_articles.tpl', $articles);

// get a random ad based on user info
$ads = random_ad($user_info);
$template->load('advertisements.tpl');

// load the footer template and display final page
$template->load('footer.php');
$template->display();

Yüklenen her dosya nihai sayfada görüntülenecek gerekenleri küçük bir bölümünü içerir nerede.

Kendinizi tekniği tekrarlayın Dont çünkü, ben B düşünürdüm, ama bilmek istiyorum neden olan ve

5 Cevap

Ben şahsen semantik tam tüm belge ve doküman parçaları tutar çünkü ilk yaklaşım, iyi olduğunu söyleyebilirim.

İkinci yaklaşım, büyük olasılıkla dışında geçerlidir birkaç etiketleri olacaktır (sizin footer.tpl bir </div> tarafından kapatılır sizin header.tpl bir <div> olacak demektir için). Bu bir yerde (örneğin) bir sarıcı div ekleyerek, başka bir dosyada kapatın (ya da, sizin düzeni, iki veya üç farklı dosyaları bağlı) hatırlamak zorunda, sizin düzeni değiştirirseniz demektir.

Bu birkaç farklı gömülü dosyaları ile kötü. Şartlı dahil olur - - extra </div> var bu bir dosya zaman, bir site hata ayıklamak için ne kadar zor düşünün. Sen belli belirsiz bir hata raporu almak izini çok çok zor "bazen sayfa tamamen berbat görünüyor, ben kullanmak ne tarayıcı önemli değil". Eğer tablo tabanlı düzenleri kullanarak eğer dahada kötü ..

İlk yaklaşımı kullanarak, hala DRY prensibini kullanabilirsiniz. Eğer bir değişken içine şablon yüklemek. örneğin:

$userVars['name'] = $currentUser->name;
$templateVars['userinfo'] = $template->load('userinfo.php', $userVars);

...
$template->display('template.tpl', $templateVars);

Sen yuva belgeleri sürekli bu şekilde yapabilirsiniz. Birçok faydası vardır:

  • Her dosya semantik tam HTML - açılan tüm etiketler, ayrıca aynı belge içinde kapalıdır. (Muhtemelen unknowningly) başka bir şey bozmadan düzeninin bir bölümünü düzenlemek kolaydır.
  • Belli şablonları çıkış önbelleğe her bulunuyor ve onları yeniden kullanmak
  • Bu siteye AJAX uygulamak kolaydır. Örneğin, ilk sayfa yük bir <div id="stats"> içinde stats.tpl şablon render var. Ayrıca, sadece kendisi tarafından stats.tpl şablonu işleyen bir görünümü var, ve sonra yeniler ki, $('#stats').load('/ajaxstats.php') yapmak için jquery kullanmak o div ama hiç kod tekrarı olmadan.

Ve şablon yeniden bit (örn. formlar) için (yani dahil) gömme, her şablona (header / footer örneğin düzeni) için ortak yapılar için Şablon miras.

Yaklaşım A ve miras olmadan, (IMHO çirkin) ortak düzen elemanları dahil, ya da (daha kötüsü olan) her şablonda tüm düzenini çoğaltarak ya olurdum. Kayar yaklaşım B korunabilirliğe azaltabilir, hangi şey için küçük şablon bit büyük miktarda yaratacaktır.

Ve bunun için, ben gerçekten gerçek, özel çiftleşmiş motoru kullanılarak yerine düz PHP öneriyor. Onlar (; - değişken otomatik kaçan başka miras bir şeydir) hayatınızı kolaylaştırır.

şablon miras muhtemelen temiz kod yapacak. kullanarak düz php şimdi bunu yapabilirsiniz PHP Template Inheritance

Iyi ya da kötü bir çözüm yoktur. Orada teknikleri ve kurallar vardır ama zaman içinde diğerlerinden daha iyi ne yaklaşım öğreneceksiniz.

Sadece ona bakarak ben ikinci yaklaşım daha esnek olmasını sağlar ve küçük parçalar haline sayfayı aşağı kırar söyleyebilirim. Daha küçük bazı zamanlar daha yönetilebilir anlamına gelebilir.

Sadece / değişiklik sayfanın parçalarını değil, tüm sayfayı çalışmak gerekir beri Ayrıca, ikinci çözüm de sayfa üzerinde çalışan fazla 1 kişi verir.

Saygılarımızla,

GregMac önerildiği gibi, birinci çözelti daha iyidir. Ben de çeşitli teknikler kullanarak şablonlar uygulamak çoğu mevcut çeşitli PHP çerçeveler, bir göz için öneririm, o söyledikten sonra.

Bir başlangıç ​​için bu list bakabilirsiniz. Ayrıca bazı fikirler almak için veya kendi motorunu uygulama önlemek amacıyla, bu tür Smarty gibi bazı bağımsız şablon motorları, bakmak isteyebilirsiniz.