作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将网站转换为使用 PHPTAL 模板,目前我正在使用模板编写所有新页面,同时保留现有页面。
旧页面使用标准页眉和页脚,典型页面的内容生成如下:
printHeader();
//print page content
printFooter();
PHPTAL 中的新页面将使用相同的标准页眉/页脚,因此我将它们移动到宏中。我想对新旧页眉和页脚使用相同的源 HTML。为此,我想编辑 printHeader() 和 printFooter() 函数以使用模板打印页眉和页脚宏:
printHeader() {
$source = '<metal:use-macro="macros.xhtml/header" />';
$header = new PHPTAL()
$header->setSource($source);
echo $header->execute();
}
我遇到的问题是我的 header 包含开头 <html>
和 <body>
标记,在页脚中关闭。 PHPTAL 抛出异常,因为我的宏不是有效的 xml:
Not all elements were closed before end of the document. Missing: </tal:block></tal:block></tal:block></body></html></tal:block>
最简单的解决方法是什么?我找到了一种使用结构将这些标签作为字符串包含在内的解决方法,但它看起来很草率:
<tal:block metal:define-macro="header">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<tal:block tal:content="structure string:<html>" />
<head>
head content
</head>
<tal:block tal:content="structure string:<body>" />
header content
有没有更简洁的方法来做到这一点?也许某种 tal 属性将允许它忽略 <html>
缺少的结束标记和 <body>
?
最佳答案
PHPTAL 旨在使格式错误的标记的输出尽可能困难,未关闭的标签是格式错误的标记。
你永远不应该有 printHeader
/printFooter
函数。您需要将其由内而外翻转并具有类似 printContent()
函数的功能,并从包含页眉和页脚的模板中调用它:
<!DOCTYPE>
<title>Header is here</title>
<body>
${php:printContent()}
<p>Footer is here</p>
</body>
(不一定是函数,可以将输出赋值给变量,可以调用宏,宏名也可以是变量)
关于php - 如何在 PHPTAL 宏中打印未关闭的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19148199/
我是一名优秀的程序员,十分优秀!