我已经设置了一些Sulu模板,并且我已经能够使用这里描述的方法在多个模板中包含整个文件的内容:
https://docs.sulu.io/en/2.1/book/templates.html
我使用的是:
<xi:include href="fragments/common-properties.xml"/
这个很好用
然而,我随后尝试使用xpointer方法包含来自另一个模板的属性(以便我可以在一个文件中包含所有模板的一组公共属性,并为各个模板定义特定的属性)
我的根模板在这里:( root -page-test.xml)
<?xml version="1.0" ?>
<template xmlns="http://schemas.sulu.io/template/template"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude"
xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/template-1.0.xsd">
<key>my-account-page-react</key>
<view>pages/my-account-page-react</view>
<controller>App\Controller\Headless\HeadlessWebsiteController::indexAction</controller>
<cacheLifetime>604800</cacheLifetime>
<meta>
<title lang="en">Test including properties</title>
</meta>
<properties>
<property name="header" type="text_line">
<meta>
<title lang="en">Header</title>
</meta>
</property>
<xi:include href="include.xml"
xpointer="xmlns(sulu=http://schemas.sulu.io/template/template)
xpointer(/sulu:properties/sulu:property)"/>
</properties>
</template>包含我想要包含的属性的模板在这里:(include.xml)
<?xml version="1.0" ?>
<template xmlns="http://schemas.sulu.io/template/template"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude"
xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/template-1.1.xsd">
<key>include-test</key>
<view>pages/my-account-page-react</view>
<controller>App\Controller\Headless\HeadlessWebsiteController::indexAction</controller>
<cacheLifetime>604800</cacheLifetime>
<meta>
<title lang="en">Test include</title>
</meta>
<properties>
<property name="url" type="resource_locator" mandatory="true">
<meta>
<title lang="en">Resourcelocator</title>
</meta>
<tag name="sulu.rlp"/>
</property>
<property name="title" type="text_line" mandatory="true">
<meta>
<title lang="en">Title</title>
</meta>
<params>
<param name="headline" value="true"/>
</params>
<tag name="sulu.rlp.part"/>
</property>
<property name="article" type="text_editor">
<meta>
<title lang="en">Article</title>
</meta>
</property>
</properties>
</template>在加载管理界面时,我从一个ajax请求中得到以下错误:
[ERROR 1612] XPointer evaluation failed: #xmlns(sulu=http://schemas.sulu.io/template/template) xpointer(/sulu:properties/sulu:property) (in C:\xampp\htdocs\<vhost>/config/templates/pages\root-page-test.xml - line 26, column 0)↵[ERROR 1604] could not load include.xml, and no fallback was found (in C:\xampp\htdocs\<vhost>/config/templates/pages\root-page-test.xml - line 26, column 0)↵[ERROR 1871] Element '{http://www.w3.org/2001/XInclude}include': This element is not expected. (in C:\xampp\htdocs\<vhost>/config/templates/pages\root-page-test.xml - line 26, column 0)
这两个文件位于同一目录中
我哪里错了?
发布于 2020-08-19 20:47:13
您的XPointer不正确,因为如果您以/开头,这意味着您从文档的根开始。因此,如果您使用/sulu:properties/sulu:property,则XPointer假定在您试图包含的文件的根目录下应该有一个properties标记。我的建议是创建一个这样的文件(this is also shown in the last code snippet in our documentation in this heading):
<?xml version="1.0" ?>
<properties xmlns="http://schemas.sulu.io/template/template"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/template-1.1.xsd">
<property name="url" type="resource_locator" mandatory="true">
<meta>
<title lang="en">Resourcelocator</title>
</meta>
<tag name="sulu.rlp"/>
</property>
<property name="title" type="text_line" mandatory="true">
<meta>
<title lang="en">Title</title>
</meta>
<params>
<param name="headline" value="true"/>
</params>
<tag name="sulu.rlp.part"/>
</property>
<property name="article" type="text_editor">
<meta>
<title lang="en">Article</title>
</meta>
</property>
</properties>这样,您还可以删除不必要的元素,如view和controller标记,在本例中不需要这些元素。
或者,您也可以调整include的XPointer:
<xi:include href="include.xml" xpointer="xmlns(sulu=http://schemas.sulu.io/template/template)xpointer(/sulu:template/sulu:properties/sulu:property)" />注意xpointer开头的额外sulu:template。
https://stackoverflow.com/questions/63452598
复制相似问题