首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHPTAL宏中打印未闭合的标记

如何在PHPTAL宏中打印未闭合的标记
EN

Stack Overflow用户
提问于 2013-10-03 07:02:36
回答 1查看 336关注 0票数 2

我正在将网站过渡到使用PHPTAL模板的过程中,现在我正在使用模板编写所有新页面,同时保持现有页面不变。

较旧的页面使用标准的页眉和页脚,一个典型的页面的内容生成如下:

代码语言:javascript
复制
printHeader();
//print page content
printFooter();

PHPTAL中的新页面将使用相同的标准页眉/页脚,因此我将它们移动到宏中。我想对新旧页面的页眉和页脚使用相同的源HTML。为此,我想编辑printHeader()和printFooter()函数,以使用模板来打印页眉和页脚宏:

代码语言:javascript
复制
printHeader() {
   $source = '<metal:use-macro="macros.xhtml/header" />';
   $header = new PHPTAL()
   $header->setSource($source);
   echo $header->execute();
}

我遇到的问题是,我的页眉包含开头的<html><body>标记,它们在页脚中是封闭的。PHPTAL引发异常,因为我的宏不是有效的xml:

代码语言:javascript
复制
Not all elements were closed before end of the document. Missing: </tal:block></tal:block></tal:block></body></html></tal:block>

解决这个问题最简单的方法是什么?我已经找到了一个变通方法,使用structure将这些标记作为字符串包含在内,但它似乎很草率:

代码语言:javascript
复制
<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:&lt;html&gt;" />
   <head>
      head content
   </head>         
   <tal:block tal:content="structure string:&lt;body&gt;" />
      header content

有没有更干净的方法来做这件事?也许是某种tal属性,可以让它忽略<html><body>缺少的结束标记

EN

回答 1

Stack Overflow用户

发布于 2013-10-26 19:29:30

PHPTAL的设计目的是使输出格式错误的标记变得尽可能困难,而未闭合的标记就是格式错误的标记。

你永远不应该有printHeader/printFooter函数。你需要把这个从里到外翻转,像printContent()函数一样,从包含页眉和页脚的模板中调用它:

代码语言:javascript
复制
<!DOCTYPE>
<title>Header is here</title>
<body>

  ${php:printContent()}

  <p>Footer is here</p>
</body>

(它不一定是函数,你可以将输出赋给一个变量,你可以调用一个宏,宏名也可以是变量)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19148199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档