在面包屑呈现中包含特定属性或子元素文本

Include specific attribute or child-element text in breadcrumb rendering

在作者内部,它显示面包屑,I know you can modify its display to either some other static text or localisation,但我想知道是否可以动态显示属性,或动态执行其他一些特定于上下文的 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>

"Year" 实际上是一个 num 元素。


然而,尝试任何其他变量,甚至 'more static' 像 ${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,但我认为在编辑器变量方面使用内容完成配置文件有一些限制。

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

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

xpath_eval 是有意义的——元素的显示名称可能取决于它的属性(例如 @id 属性),它在文档中的索引(例如 'Section 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;
  };
});