Ne sorunlar eval kullanarak PHP bu çok temel Şablon Motoru buluyorsunuz?

0 Cevap php

Ben değil gerçekten benim kendi PHP şablon motoru, kullanmakta olduğunuz bu birkaç yıl boyunca "kendi" Ben yıllar önce bir öğretici gördüm gibi. Ancak, daha basit ve kullanımı daha kolay hale kodun en refactored ettik. Ben nadiren Onsuz bir PHP proje yapmak.

Bu çok basit ve sınıf sadece 3 yöntemleri, yük, atamak ve render vardır. load şablon dosyası (genellikle HTML) yükler ve bir dize değişkeni olarak kaydeder. assign {reference} şeklinde değişkenlere HTML başvuruları atamanızı sağlar. Işlemek şablon dosyasını ayrıştırır ve değişkenleri ile referansların yerine geçer. Bu temelde bu. Çok temel, çok basit ve benim için bir zaman tasarrufu.

Ben HTML ve işimizle PHP karıştırmak istemem çünkü bu şablon motoru gibi. Ve bu yüzden çok güçlü olmasına rağmen böyle bir şey için, (WordPress şablonlar gibi) şablon motoru olarak PHP'nin kendisi çok düşkün değilim. Ben. Php dosyaları olarak benim dosyaları kaydetme fikir gibi ve daha sonra include / karışık PHP kodu bir grup ile onlara ihtiyaç yok, ben basit tutmak istiyorum.

Ancak, bu motor şablonu olduğu gibi, koşullar ve döngüler, bazen gerekli olan iki çok önemli şeyler için izin vermez ilkel vardır. Şimdiye kadar şablon dosyaları ayırarak bu soruna geçici çalışma oldum ve daha sonra denetleyicisi tüm koşulların / döngü yapmak. Örneğin, ben öğeleri bir veritabanından gelen bir <ul> listesi vardır, ana şablon dosyası var, ben sadece [(1)] {için bir satır kod ile ayrı bir şablon dosyası gerekir } öğe. Denetleyicisi döngü yapmak ve gerektiği gibi birçok <li>'s kılıyor.

Ben nereden geldiğini anlamak bu yüzden bir giriş oldu. Şimdi gerçek sorunun ...

Ben düşünce ve bu yönteme experimenting alternatifleri ve ben mümkün olduğunca az kod ile HTML şablon dosyalarındaki PHP kullanmaya başlayabilirsiniz oldum. Örneğin, bu gibi:

<ul>
  <?php foreach($array as $val): ?>
  <li><?php echo $val; ?></li>
  <?php endforeach; ?>
</ul>

Ve böyle bir kontrolör şey:

// assuming the data comes from a 
$array = array('Item 1', 'Item 2', 'Item 3'); database...

ob_start();
eval(' ?>'.$TPL->render('main').'<php ');
echo ob_get_clean();
  • Ben yapmak istediğim ilk nokta, bu benim için bir sorun sunmasıdır. Bu tür, bu şablon motoru amacı yendi. Orada echo $val çağırarak, mıyım değiştirilmesi gereken bir başvuru olması gereken yerde. Ama ben kullanılmak üzere bekleyen orada $val değişkeni olduğunda şablon render değiştirilmesi gereken bir başvuru olması tamamen aptalca olmaz mıydı? Ama aynı zamanda benim şablon dosyaları PHP kod birçok kullanma fikrini sevmiyorum, çok fazla şeyi ödün vermeden kadar elimden geldiğince önlemek için tercih ediyorum. Ancak, ben echo yerine bir referans olabilir ve her döngü için $val yerini nasıl görmüyorum. Bu konuda ne almak için?
  • İkincisi, ben bu çözüm olabileceğini düşünüyorum görüş ve [devamı] sorunları istiyorum. Orada yanlış bir şey kodu var ya nasıl vb gelişmiş olabilir, eğer yoksa .. Ben şablonu oluşturmayı basitleştirmek için tüm çıktı tamponlama ve muayene yapmak için ekstra bir yöntemi kullanabilirsiniz biliyorum, ama ben başka şeyler arıyorum Ben gözden kaçan ya da büyük olasılıkla, ya da hakkında sadece bilgi eksik tamamen unutmuşum olabilir.

Belki bu çok fazla düşünüyorum, belki sadece her şeyi unutmak gerekir ve ben son birkaç yıldır yapıyorum bu yapmaya devam. Bu benim için çok güzel çalıştı ve tüm projeleri basitleştirilmiş. In the end, I'm basically looking for a way to simplify conditions and loops in my template files without requiring extra template files, some with only a couple of simple lines of code.

0 Cevap