我正在处理我的模板类,我没有任何好主意在我的 tpl 文件中制作可编辑的 LOOP。(我没有使用 Smarty 或其他框架)。我有这样的 .tpl 文件:
<ul>
{TABLE_ROWS}
</ul>
{TABLE_ROWS} 在 PHP 循环中解析:
while($row = mysql_fetch_array($query))
{
$content = $this->tools->cutString(strip_tags($row['content']), 100);
$time = date("m/Y", $row['time']);
$table_rows .= "<li>
<strong>" . $time . "</strong> » " . $content . "
<div class='riadokZmien'><a href='" . ADMIN_URL . "shortnews/edit/" . $row['id'] . "' class='edit'><strong>Upraviť</strong></a><a href='" . ADMIN_URL . "shortnews/delete/" . $row['id'] . "' onclick=\"return confirm('Naozaj vymazať? Tento krok už nepôjde vrátiť späť.');\" class='del'><strong>Odstrániť</strong></a>
</div></li>";
}
$replace = Array(
'TABLE_ROWS' => $table_rows,
);
$this->loadTemplate('shortnews');
// .......
if(isSet($replace) && $replace)
$this->parseTags($replace);
但如果页面模板完全改变,则无效。然后我必须在我的模块中编辑代码。
我试图解决它如下:
<ul>
{TABLE_ROWS_START}
<li><strong>{row.TIME}</strong> {row.CONTENT}
<div class='riadokZmien'><a href="{ADMIN_URL}shortnews/edit/{row.ID}' class='edit'><strong>Upraviť</strong></a><a href="{ADMIN_URL}shortnews/delete/{row.ID}" onclick=\"return confirm('Naozaj vymazať? Tento krok už nepôjde vrátiť späť.');\" class='del'><strong>Odstrániť</strong></a>
</div></li>
{TABLE_ROWS_END}
</ul>
或类似的东西和这个在PHP中解析为循环,但我没有任何好主意
这是 loadTemplate 方法:
public function loadTemplate($tpl_name)
{
$path = ($this->admin === false ? TEMPLATES_PATH : ADMIN_TPL_PATH);
if(file_exists($path . $this->template_folder . DS . 'tpl' . DS . $tpl_name . '.tpl'))
{
$this->content = file_get_contents($path . $this->template_folder . DS . 'tpl' . DS . $tpl_name . '.tpl');
}
else
{
die ('Cannot load main template: ' . $path . $this->template_folder . DS . 'tpl' . DS . $tpl_name . '.tpl');
}
}
还有 parseTags 方法:
public function parseTags($replace = Array())
{
$replaced = Array();
foreach ($replace as $key => $value)
{
$replaced['{' . $key . '}'] = $value;
}
$this->content = str_replace(array_keys($replaced), array_values($replaced), $this->content);
}
谢谢你的帮助。