我已经使用 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吗?
答案 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