如何在CQ5.6中设置doctype?

时间:2014-09-29 15:04:25

标签: html5 cq5 doctype

我已经使用 CQ5.6 工作了大约一个月,我们的测试网站几乎完成了组件。

但是,当我们尝试验证页面时,我们会遇到问题,因为AEM会将<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">放在我们所有页面之上。

现在,我找不到在我们的代码中显式声明Doctype的任何地方。我们的代码中也没有HTML标记,因此我假设AEM将这些包装在所有内容中。

首先,我尝试在页面组件中删除doctype的导入并将其替换为<!DOCTYPE html>但最后我们最终得到了2个doctype声明。首先是XHTML,然后是包装的<html>标签,然后是我的HTML5标签。

我已在文档中读到您可以使用cq:doctype属性设置doctype,但不知道我应该将该属性添加到哪里。

我也尝试将它放在我们页面组件中的head标签上方,但无济于事:

<% Doctype doc= Doctype.valueOf("HTML_5");
   doc.toRequest(request);
%> 
<%= Doctype.fromRequest(request).getDeclaration() %> 

有人可以向我解释我可以为我们的项目将doctype 设置为HTML5吗?

2 个答案:

答案 0 :(得分:3)

CQ默认情况下不会使用Doctype包装页面。可能是您的页面组件将foundation/components/page作为其父(sling:resourceSuperType属性)的情况。

由于component hierarchy and inheritance,基础page.jsp中包含的文档类型会包含在您的网页中,因此看起来好像它正在包装您的HTML。

page.jsp包含doctype,如下所示

<%= Doctype.fromRequest(request).getDeclaration() %>

您可以通过覆盖页面组件本身中基础page.jsp的内容来避免这种情况。

答案 1 :(得分:0)

在此路径foundation/components/page/_NAME_中,您可以覆盖包含head.jsp定义和HEAD语句的DOCTYPE文件。

接下来,您可以看到原始示例: head.jsp example

如果您没有定义自己的自定义模板,那就是原因。您可能需要使用下一个结构创建一个文件夹(/foundation/components/page/_NAME_/):

head.jsp
body.jsp
dialog.xml