Yuvalama ile bir php şablon Ayrıştırıcı arıyor

3 Cevap php

Iam bunu bir php çözümleyici arıyor.

{tag} Replace the tag with text comming from a function

{tag(params)} It must support params

{tag({tag(params)},{tag(params)})} It must support nesting

{tag()?

else

} It must support Tests

{$tag=value} It must support varriables

Size kimse bu yapabileceğiniz bir çözümleyici biliyor musunuz?

Yoksa ben bir tane yaratabilirsiniz biliyorum maby. Ben preg ile bunu yapmak için uğraş vermişler, ama yuvalama oluşturmak için imkansız görünüyor.

Smarty seems to be a bit to big, and i dont know if you can disable all the extra functionality it has. I only need the functionality that i have listet over. In smarty your able to write php code and i dont like that. {php} {/php} So if iam going to use that i need to be able to turn it of.

(Iam CodeIgniter ile kullanmak için gidiyorum.)

3 Cevap

Düzenli ifadelerde yuvalama birleştirmek için, ardışık kalıpları (? R) kullanmak zorunda. Bütün bu eşleşir.

Eğer böyle bir ifade kullanmak gerekir (muhtemelen diğer bazı {} içlerinde ile) metin olarak dıştaki {}-s bulmak için:

/{([^{}]*(?R))*[^{}]+}/

Hakkında buradan okuyabilirsiniz (R?): http://pl2.php.net/manual/en/regexp.reference.recursive.php

{((?>[^{}]+)|(?R))*} orada önerilen bir yapı vardır. Ben inşa olandan belki daha verimli.

Ben sadece Smarty3 ile giderdim. Birisi zaten sizin için geliştirme, test ve optimizasyon yıl yaptığımız zaman neden tekerleği yeniden icat?

Smarty3 yılında {php} etiketi varsayılan olarak devre dışıdır. Ayrıca kullanıcıların şablonları değiştirmek izin eğer php fonksiyon çağrıları ve bu tür devre dışı bırakabilirsiniz security policies burada destekler.

CodeIgniter built-in oluyor çiftleşmiş tanıtmadan önce, çok iyi yaptım. CodeIgniter görünümü şablonlar PHP ile sadece yazılı olarak kullanılan ve böylece istediğiniz herhangi bir PHP özelliklerini kullanmak için ücretsiz: yapıları, işlev çağrılarını ve daha fazlası.

Ben sadece View instead of the Template Parser kullanmanızı öneririz.