0

我有自己的简单模板系统,它基于正则表达式。这里是

它的设计方式是我可以只从 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>

但!在这个特定的例子中,它需要 YEARS 来执行(比如 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();

任何强硬它可能是什么?

4

3 回答 3

1

您在连接中使用的列应该被索引。

forum_kategorie.name, zpravy.date, url

于 2013-10-30T12:57:09.397 回答
0

使用 RegEx(或 SearchReplace)函数真的很慢。每个请求都说必须解析模板并且必须完成替换。

像这样的结构有很多缺点,比如不可缓存等。

看看smarty.net - 这是一个很好的 php 模板引擎。便于使用。

如果你不喜欢使用 Smarty,你也可以使用纯 PHP。它也是一个模板引擎。

只需将您的 HTML 放入单独的 PHP 文件中。您可以使用短标签<?=$var>来输出内容。当然诅咒你也可以使用长标签。此外,您还拥有所有可用的 php 函数,包括循环。将子模板与include命令一起使用。

尽量避免将程序逻辑与显示逻辑混为一谈。

于 2013-10-30T13:07:39.920 回答
0

您是否分别测量了操作(mysql 查询和模板处理)?

于 2013-10-30T12:58:53.297 回答