PHP İçerik Ayırma

5 Cevap php

Bu yüzden hepimiz biliyoruz ki gerektiği zaman, içerik / tasarım / html PHP, ayrı bir kod değil. (Ben bugün burada tam tersini söylüyorlar insanlar gördük)

Ben, sen daha büyük projeler bunlardan birini istemiyorum anlamına?

<?php

echo '<div id="blah"><b>'
     . $username . '</b>'
     . $stuff . '<more HTML mixed with PHP...>';

?>

Ama: içerikten kodunu ayırmak için iyi bir yaklaşım nedir?

I have been using a simple template system that replaces wildcards in templates mostly.

örn:

<div id="blah"><b>%USERNAME%</b>%STUFF% <...>

(Tek bir dosyada bulunan)

Daha sonra sadece GetTemplate( 'myTemplate', array ( 'USERNAME' => 'Stranger' ) ); benzer bir işlevi çağırabilirsiniz

Finally, the questions:

  • Bu kodu ve içeriği ayıran bir iyi bir yolu var mı?
  • Bunu nasıl yaparsınız bir çerçeve ile çalışma alıyorsunuz?
  • Daha iyi bir yolu var mı?

5 Cevap

Im değil fan ov ek çiftleşmiş dilleri (ki joker yerine) yerine benim şablonları saf php yani ne yaptın benim vertion olacağını tutmak istiyorum:

<div id="blah"><b><?php echo $username ?></b><?php echo $stuff ?><...>

echo GetTemplate( 'myTemplate.php', array ( 'username' => 'Stranger', 'stuff' => 'Stuff' ) );

function GetTemplate($templatePath, array $vars = array())
{
  extract($vars);
  ob_start();
  include($templatePath);
  return ob_get_clean();
}

Ben ihtisasını yardımcı functions/object-> yöntemleri ile de, örneğin bu birleştirmek:

<?php echo link_to($name, $url); ?>

function link_to($name, $url, array $attributes = array())
{
  $attributes['href'] = urlencode($url);
  foreach($attributes as $attrib => $value)
  {
     $attributes[$attrib] = $attrib."=\"$value\"";
  }
  return sprintf('<a %s>%s</a>', implode(" ",$attributes), $name);
}

Ben genellikle bu sık kullanılan etiketler / yapılar yanı sıra content_tag($tag, $content, $attributes); Bu benim rastgele etiketleri niteliklerinden ton için bir php yankı önlemek yardımcı olur gibi bir şey görünüyor genel amaçlı bir html etiketi birine sahip gibi yardımcıları geçerlidir. Açıkçası ben bu yansımaları, bir ton daha iyi okunabilmesi için yapar olanlar için sadece kullandığınız her html etiketi için kullanabilirsiniz Yüklü.

Bildiğim kadarıyla çiftleşmiş motorları gitmek gibi ben php çiftleşmiş dil olarak gerçekten yarar görmüyorum. Bildiğim kadarıyla non-programmers/coders gibi bir döngü için sözdizimi leanr var ve bir değişken i joker veya smarty {} sözdizimi için değişen dont bakın nasıl nasıl bu kadar herhangi bir şey ekler.

PHP kendisi templating dil olduğunu farkına varmalıdır. senin

<div id="blah"><b>%USERNAME%</b>%STUFF% <...>

farklıdır

<div id="blah"><b><?php echo $USERNAME; ?></b><?php echo $STUFF; ?> <...>

Sadece çok yüzeysel. verilmiş, PHP (bir nokta Python, PHP üzerinde olan) yerine istisnalar kendi İkazları ve Uyarıları ile oldukça aptal ve özel uygulama daha kolayca e izin verebilir. g. bir yerde bir şablon içine mantık koyarak iki kötüden (döngüler) ve daha az olduğu ortaya çıkarsa (Smarty sevinçleri oh) atmak yerine bir ölümcül hata üretme. Eğer şablonu (PHP DİKKAT sorunu olurdu), vb tanımlanmamış bir değişken söz eğer atmak isteyebilirsiniz

Denilen PHP için denenmiş-ve-gerçek Templating Motor vardır Smarty. Bu benim için büyük bir artı büyük bir çerçeve, bir parçası değildir. Smarty önbelleğe destekler ve geleneksel bulmak üzerinden diğer performans artırır / nedeniyle çiftleşmiş yerine var bu şablon dosyalarını "derleme" bulunuyor.

Şablonları kullanarak phpBB çalışması gibi. Büyük projeler Onun biraz daha karmaşık onlar da diğer şablonlar ve diğer gelişmiş özellikler de dahil olmak üzere (için) listeleri, izin gibi. Kesinlikle kod ve içerik ayırmak istiyorum.

Bir bonus olarak bu olmayan programcılar html yapmanızı sağlar.

(Ekstra bir ayrıştırma yükü katmıyor) şablon dili olarak PHP kullanır Zend Framework yaklaşım iyi bir apporach gibi görünüyor

Ben gerçekten gibi başka bir yolu limonade framework hangi ob_start kullanır () ve aslında şablonları işlemek için içerir tarafından kullanılan yaklaşım