Включить определенный атрибут или текст дочернего элемента в рендеринг - PullRequest
0 голосов
/ 08 января 2019

Внутри автора он отображает хлебную крошку, а Я знаю, что вы можете изменить его отображение на какой-то другой статический текст или локализацию , но мне интересно, возможно ли динамически показать атрибут или выполнить некоторые другие контекстно-зависимые 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, но я думаю, что есть некоторые ограничения в использовании файла конфигурации дополнения контента относительно переменных редактора.

Значит, правильное мышление, но я делаю что-то не так или это не правильный путь, но есть какой-то другой способ повлиять на крошку? Может со схемой?

1 Ответ

0 голосов
/ 09 января 2019

Отображаемые имена элементов в файле 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;
  };
});
...