首页 > 解决方案 > 在面包屑呈现中包含特定属性或子元素文本

问题描述

在作者中,它显示了一个面包屑,我知道您可以将其显示修改为其他一些静态文本或本地化,但我想知道是否可以动态显示一个属性,或者动态执行一些其他特定于上下文的 xpath。


作为测试,我可以使用本地化编辑器变量更改面包屑${i18n()}

cc_config.xml

<elementRenderings platform="webapp">
    <render element="num" as="${i18n(test)}" annotation="${i18n(test)}"/>

translation-cc.xml

<key value="test">
    <comment></comment>
    <val lang="en_US">Year</val>

“年”实际上是一个num元素。


但是,尝试任何其他变量,甚至是“更静态”的变量,例如${cf}${tp}简单地按字面呈现变量文本,而不是对其进行评估。

cc_config.xml

<elementRenderings platform="webapp">
    <render element="paragraph" as="${xpath_eval(./@eId)}" annotation="${xpath_eval(./@eId)}"/>
    <render element="p" as="${tp}" annotation="${tp}"/>

(段落确实有一个eId属性)


如您所见,我尝试使用annotation; 但这些工具提示也只是按字面意思显示变量。
我还摆弄并尝试了一堆 xpath 的东西,比如@eId/ .@eId/ /@eId,但我认为在使用内容完成配置文件方面存在一些关于编辑器变量的限制。

那么想法是正确的,但我做错了什么,还是不是正确的方式,但还有其他方式可以影响面包屑?也许与架构?

标签: oxygenxml

解决方案


文件中的元素显示名称cc_config.xml不支持大多数编辑器变量。其中大多数,如${cf}(当前文件)和${tp}(总页数)在渲染元素名称时使用没有意义。

xpath_eval是有道理的 - 元素的显示名称可能取决于它的属性(例如@id属性),它在文档中的索引(例如“第 3 节”)等。我们为此案例注册了一个功能请求,我添加了您的投票给它。

作为部分解决方法,您可以使用 JS API 根据元素原始名称及其属性计算元素的显示名称:

goog.events.listen(workspace, sync.api.Workspace.EventType.BEFORE_EDITOR_LOADED, function(e) {
  e.options.elementNameEnhancer = function(elemName, attrs) {
    var displayString = elemName;
    var attr = attrs['id'];
    if (attr) {
      displayString += ' (#' + attr.attributeValue + ')';
    }
    return displayString;
  };
});

推荐阅读