Включить определенный атрибут или текст дочернего элемента в рендеринг

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

Решение

Элемент отображает имена в 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;
  };
});
Другие вопросы по тегам