Hafif PHP5 tabanlı şablon sınıfı / sistem

6 Cevap php

Yeni bir proje için bir şablon sistemi kullanarak baktığımızda, sadece küçük bir site ve smarty yükü ve 'karmaşıklığı' kullanmak istemiyorum. Ben gerçekten başka bir dilde kullanmak için sizi zorlayacak şablon sistemler gibi sadece daha kolay tasarımcılar (görünüşte) için yapmak gerekmez.

Something like this http://www.namepros.com/code/517342-php5-template-class.html is what Im looking at but something which is a bit more robust and proven.

6 Cevap

Kendisi tarafından PHP zaten bir şablon motorudur. Peki neden bir şablon motoru ile yazılmış bir şablon motoru beraberinde getiriyor yükü kesip değil ve sadece o PHP kullanmak?

<h1><?php echo $pageTitle ?></h1>
<div>
    <ul>
    <?php foreach($items as $item): ?>
        <li><?php echo htmlentities($item); ?></li>
    <?php endforeach; ?>
    </ul>
</div>

Eğer ek işlevsellik gerekiyorsa, ViewHelper, örneğin kullanmayı düşünün örneğin, bağlantıları isimleri ekleyerek veya çeviri gibi şeyler saklanması küçük işlevleri

<table>
<?php foreach($items as $key => $item): ?>
    <tr class="<?php echo oddEven($key)?>">
        <td><?php echo productLink($item->id); ?></td>
        <td><?php echo translate($item->description); ?></td>
    </tr>
<?php endforeach; ?>
</table>

Bu çok ayrıntılı ise, HEREDOC and NOWDOC syntax bir göz var ve bu sizin için ne arıyor hala değilse, burada bazı şablon motorları bir listesi:

Or, sen deneysel düşünüyorsanız, XHP, bir şablon motoru Facebook'un uzatma yaklaşımı bakabilirsiniz:

TWIG

Ben kullanıyorum tavsiye ederim Twig

  • genişletilebilir sözdizimi
  • verimli
  • compiles and caches your templates to PHP classes çok küçük bir yük ile
  • Güvenilmeyen şablon kodu değerlendirmek için sandbox modu
  • test ünitesi
  • büyük documentation
  • Birden fazla template inheritance, şablon blokları, otomatik çıkış öncelemeli

O güçlü ve özelleştirilebilir şablon motoru için ihtiyaçlarını açıklar nerede Ayrıca, Fabien Potencier's blog post okuyun.

TWIG Template code

{% extends "layout.html" %}

{% block title %}
    {{ page.title|escape|title }}
{% endblock %}

{% block content %}
    Content of the page...

    {% for user in users %}
      * {{ user.name }}
    {% else %}
        No user has been found.
    {% endfor %}

{% endblock %}

{# this is a comment in twig syntax #}

Symfony Components

Ayrıca web geliştirme için ek bileşenlere gerek, ama zaten tanımlanmış bir kod tabanı var, ek çiftleşmiş bileşen (Xue belirtilen cevap Can) Symfony Components içeren bakmak varsa

Ben sadece bu gerçekten kolay bir açık kaynak projesi yayınladı. Bu Django esinlenerek "Şablon Kalıtım", olduğunu, ve bir çocuk şablondan bir ana şablon parçalarını miras ve geçersiz izin verir. Burada yer:

http://phpti.com/

Ben Nest yazdı. Bu JSP iyi parçalarına dayanan bir çiftleşmiş bir dil, ve php kodu derler. Sen iyi biçimlendirilmiş HTML kod yazmak ve kolayca yeni işlevler vermek için yeni etiketler oluşturabilirsiniz. Yerleşik bazı standart etiketler vardır

http://nest.sourceforge.net/

Bu gibi görünüyor:

<html xmlns:c="urn:nsttl:HTML_Template_Nest_Taglib_Standard">
  <body>
    <ul>
      <c:foreach items="posts" var="post">
        <li>${post->title}</li>
      </c:foreach>
    </ul>
</body>

basit ... sadece class blokları gibi oluşturun:

class MyBlock implements IHtmlRenderizable{
public function toHtml(){
   include('/the/template.phtml');
}
}

ve kullanımı $ this-> ne olursa olsun şablona.

Ben PHP kendisi çok güçlü bir motor şablonu olduğuna inanıyorum.

Sadece çok basit bir şablon motoru gerekiyorsa, örneğin,) (bir str_replace sarın:

function template($source, array $vars, $return=false) {
    foreach ($vars as $key=>$value) {
        $source = str_replace('{'.$key.'}', $value, $source);
    }
    if ($return) {
        return $source;
    } else {
        echo $source;
    }
}

Eğer tam özellikli bir çözüm gerekiyorsa ve bir simple yet flexible template engine from symfony var.