我有自己的简单模板系统,它基于正则表达式。 Here it is
它的设计方式我可以从mysql结果传递数组,它将从定义的模板文件中返回html代码。
所以如果我传递数组
array(3) {
[0]=> array(5) {["DATE"]=> string(11) "21.04. 2013" ["NICK"]=> string(7) "Nashren"}
[1]=> array(5) {["DATE"]=> string(11) "22.10. 2013" ["NICK"]=> string(13) "Superman"}
[2]=> array(5) {["DATE"]=> string(11) "10.07. 2013" ["NICK"]=> string(13) "Superman"}
并有模板
<td class="forum-last"> <strong>{{DATE}}</strong> <br> {{NICK}} </td>
它将按预期返回
<td class="forum-last"> <strong>21.04. 2013</strong> <br> Nashren </td>
<td class="forum-last"> <strong>22.10. 2013</strong> <br> Superman </td>
<td class="forum-last"> <strong>10.07. 2013</strong> <br> Superman </td>
BUT!在这个特定的例子中,执行需要花费数年时间(比如5秒左右)。
我想显示的SQL查询是:
SELECT forum_kategorie.NAME,forum_kategorie.DESC,DATE,uzivatele.NICK,USR
FROM `zpravy`
LEFT JOIN forum_kategorie ON CONCAT( NAME, "forum" ) = URL
LEFT JOIN uzivatele on USR = uzivatele.ID
WHERE DATE = (SELECT MAX(DATE)
FROM zpravy
WHERE CONCAT( NAME, "forum" ) = URL)
GROUP BY NAME
以下是上述脚本的用法。
include("php/themizer.php");
$theme = new Themizer("forum-item",$res);
$list = array("data" => $theme->getResult());
$final = new Themizer("forum-table",$list);
echo $final->getResult();
有什么可能的吗?
答案 0 :(得分:1)
您在连接中使用的列应编入索引。
forum_kategorie.name, zpravy.date, url
答案 1 :(得分:0)
您是否单独测量了操作(mysql查询和模板处理)?
答案 2 :(得分:0)
使用RegEx(或SearchReplace)功能非常慢。 每个请求都说必须解析模板并且必须完成替换。
这样的构造,有许多缺点,如不可缓存等。
看看smarty.net - 这是一个很好的php模板引擎。 易于使用。
如果您不喜欢使用Smarty,您也可以使用普通的PHP。 它也是一个模板引擎。
只需将HTML放入分离的PHP文件中即可。
您可以使用短标记<?=$var>
来填充内容。
诅咒你也可以使用长标签。
此外,您可以使用所有PHP功能,包括循环。
使用带有include
命令的子模板。
尽量避免将程序逻辑与显示逻辑混合。