Şablonları kullanarak php?

5 Cevap php

Nedir gerçek web sitelerinin içine html şablonları aktarmak için, php kullanarak ve gerçek veriler ile tutucular yerine kendi şablon motoru oluşturmak için en iyi yolu ... iyi, benim kendi soru çözelim ...

class Template{

$private $output = '';

public function Load_Template($template){
    ob_start();
    include($template);
    $this->output = ob_get_clean();
}

public function Replace($data){
    $this->output = str_replace(array_keys($data), array_values($data), $this->output);
}
public function Display($add_footer = true){
    echo $this->output;
}

}

Bu gibi basit bir şablon için çalışacak ...

<div>{username}</div>

But what would be the best way to do it with loops in my template. Lets say something like

<ul>
    <li>{username}</li>//Loop this line for each user
</ul>

Ayrıca, ben smarty gibi bir üçüncü taraf motoru kullanmak istemiyorum, ben sadece kendim nasıl bilmek istiyorum. Teşekkür ederim

5 Cevap

PHP kendi şablon motoru kamçılamak olsaydı Dürüst olmak gerekirse, ben sadece PHP kullanmak istiyorum. Sadece sadece "şablonlar" kapsamında değişken enterpolasyon ve döngüler kullanarak kendinizi kısıtlamak.

Kendi şablon motoru yazma zor bir şeydir. Basit bir de olsa, tüm sonra, tamamen yeni bir dil icat ediyoruz. O (basit string yerine ötesinde, yani) çok güçlü olması için, muhtemelen gerçek bir yığın tabanlı ayrıştırıcı yazmak yerine str_replace güvenmek zorundayız.

Sen could, düzenli ifadeler ile bunu yapmak kadar could ayrıştırma HTML düzenli ifadeler ile, ama çok, güvenilir okunması kolay, hata ayıklama kolay, ya da kolay olmayacak gibi uzatmak.

Peki use php itself?

<div><?php echo $username ?></div>

<ul>
    <?php foreach($users as $user): ?>
    <li><?php echo $user->username ?></li> 
    <?php endforeach ?>
</ul>

* Not: Funky endforeach sözdizimi açıkladı here.

Eğer Smarty gibi bir üçüncü taraf motoru kullanmak istemiyorum söz, ama temelde Smarty yapıyor aynı şeyi yapmak için yola çıkıyoruz.

PHP çiftleşmiş hakkında konuşurken insanlar genellikle göz ardı şey olduğunu PHP is a templating language. Eğer sadece şablonları içinde düzenli eski PHP kullanabilirsiniz olamaz hiçbir neden yok. Aslında, bu özgün için dizayn buydu.

Eğer gerçekten kendi çiftleşmiş motoru kurmak istiyorsanız, o zaman oturup loop ve diğer her türlü çiftleşmiş yapılar kullanmak isteyeceksiniz için bir sözdizimi tasarlamak zorunda gidiyoruz. Gibi bir şey [do 5 times] { loop code }. Eğer istersen makyaj. Sonra PHP ile bunu ayrıştırmak zorunda ve ilmekli yapısı ile değiştirmek için şablonu değiştirmek olacak.

Bu büyük bir iş ... Normal PHP kullanarak çok daha kolay olacaktır.

Peki, senin sorunun cevabı en çok preg_replace_callback().

Ben bu tartışmada herkes aynı fikirde - PHP çiftleşmiş için özel dillerin kullanımı anladım asla - bu yüzden sadece onu kullanabilirsiniz PHP biliyorum.

Eğer disiplinli iseniz şeyleri PHP arasındaki belirgin farkı tutmak (örneğin MVC mimari deseni izleyin), ve şeyler görüntülemek PHP, herhangi bir sorun olmayacaktır.

. Yardımcı olabilecek yollar bir çift phtml PHP şablon dosyalarını çağırarak, ve HTML ve PHP hem de içeren templateswhich korumak için biraz daha kolay alternatif PHP sözdizimi kullanıyorsanız:

<?php if ( $a == $b ) : ?>
  <strong>True</strong>
<?php else: ?>
  <strong>False</strong>
<?php endif; ?>