Как создать схему рекурсивного меню?


29

Я хочу определить схему для хранения содержимого иерархического меню, которое имеет глубину, неизвестную заранее. Пусть пункты меню являются только парами ссылок/заголовков. Эта структура является автономной, то есть: не, связанной с любой иерархией групп страниц и структур, поэтому представляется разумным использовать встроенные схемы для элементов меню.

Вышеуказанные звуки звучат теоретически, но на практике это немного сложнее. Вот что я пытался и получил:

  1. Создано MenuItem встроенной схемы и попытался сделать это многозначный Items сама ссылка поля. Это не сработало с самого начала, потому что пользовательский интерфейс знает об этой ситуации и скрывает текущую схему из доступных опций в конфигурации встраиваемого поля.

  2. клонированной MenuItem в MenuItemEven и попытался CrossReference их. UI позволяет использовать. Но форма создания компонента выглядит сломанной: после выбора схемы она просто ничего не показывает, даже «нормальные», не встраиваемые поля. (И это требует некоторой мозговой работы, чтобы уничтожить эти схемы, не нарушая пользовательский интерфейс проектирования схемы, самым простым из которых является «необратимый откат истории» для каждого).

  3. Единственный вариант, который работал, заключался в создании выделенных встроенных схем для каждого уровня. Очевидно, это потребовало ослабления начального условия, позволяющего структуре иметь бесконечную глубину (и отбрасывая всю идею рекурсии).

Интуитивно понятно, почему рекурсии встроенных схем не допускается: не существует даже такой объект, как «вложенная схема» на уровне содержания, и вся иерархия пола должна быть создана заранее вплоть до самых низких концов ,

Но есть ли какая-либо «официальная» причина, по которой рекурсивные схемы невозможны в Tridion? Разве это не ограничение UI? Недостаток XML/XSD?

38

XSD разрешил бы это, и это очень часто используемый шаблон. Tridion CME/FieldBuilder не поймет этого, поэтому вам нужно будет создать собственную схему и редактор, чтобы пойти с ним.

Я делал это в прошлом с помощью ссылок компонентов - вы создаете иерархию, как и вы ее определили, но каждая запись в меню представлена ​​компонентом со ссылками на его «дочерние» компоненты.

Поскольку это явно сложно представить визуально, эта реализация была выполнена с помощью специальной страницы, которая позволяет редакторам «видеть» полную иерархию создаваемых ими меню. Во время публикации эта иерархия была «сплющена» в один файл XML с полным деревом навигации.

A - возможно - лучший способ сделать это, поскольку Tridion 2009 - использовать иерархию категорий и ключевых слов для представления структуры вашего меню.

  0

Благодаря Нуну, Так это окончательный вердикт: 1. Технически это возможно, но .. 2. .. не через пользовательский интерфейс? 20 фев. 132013-02-20 09:26:00

  0

Действительно, пользовательский интерфейс не будет понимать XML, поскольку он не будет основан на «Tridion Web Schema». 20 фев. 132013-02-20 20:10:30

+3

+1 Для предложения использовать иерархию категорий и ключевых слов, чтобы представить структуру меню в версиях с Tridion 2009. Этот подход очень гибкий и позволяет вашей структуре навигации отличаться от иерархии структурной группы, если это необходимо. 07 мар. 132013-03-07 10:36:47


5

Я снова вижу этот образец с популярной навигацией типа «скольжение» (из меню гамбургера) и может предлагать два последующих рассмотрения.

  1. Вложенные элементы являются редакционными (ручными кураторами), не основаны на структуре, но (вероятно) связаны с существующим контентом.Поэтому, а не только ссылки Компонентов на другие компоненты, также добавьте эти ссылки на существующие страницы или компоненты.
  2. Сделайте «плоской» схемой со всеми ссылками в ней, аналогично тому, как мы вставляем текст при создании иерархии.
  3. Используйте папки вместо структурных групп.

Первый подход будет иметь каждую ссылку страницы его содержание, связанное, которые затем могут быть:

  • компоненты, связанной со страницей Метаданные
  • компонентами презентации на каждой странице
  • компонентов связаны с a «основной» компонент

Они были бы сплющены в публикации так же, как с подхода Нуно. Ловушка с компонентами на любом подходе - это когда их разрешать и обрабатывать один и тот же Компонент в разных Странах, но это еще одно обсуждение.

flat подход реплицирует то, что мы делаем в документах. при создании иерархии с текстом (в Word, OneNote, Trex и т.п.), мы используем отступы:

  • Пункт 1.0 на уровне 1
    • Пункт 1.1 Уровень 2
    • Пункт 1.2 на уровне 2
      • Пункт 1.2.1 на уровне 3
  • It em 2.0 на уровне 1

Но у нас нет опции «отступ» для схем (если вы не рассматриваете вручную создание пули в областях Rich Text Format), поэтому грубая интерпретация может быть полем для такого уровня :

Using radio buttons to mimic indents

про это форма, которая имеет все свои связи внутри без дополнительных схем не требуется с кон о необходимости обрабатывать логику для «абзацах.»

Наконец, компоненты в папках также могут работать, поскольку вложенность может быть «бесконечной», а редакторы могут вырезать, копировать и вставлять элементы между папками.

При любом подходе я бы рекомендовал объединить эти компоненты с любыми управляющими страницами и/или информацией о SEO.

Обновление: также рассмотрим производительность в любом случае. Как система управления веб-контентом, предназначенная для веб-сайтов и их редакторов, у меня сотни и тысячи элементов хорошо работают в списках и формах проводника Content Manager. Очень большие формы могут влиять на производительность, а также управлять элементами (где бесконечно прокрутка определенно не идеальна).

  0

Интересный подход. Это позволяет создать полную навигацию в одном компоненте, однако она все же несколько громоздка, когда дело касается редакторов, рассматривающих навигацию в CME. Кроме того, возможно, это может стать немного медленной загрузкой в ​​очень большой структуре навигации. 08 янв. 152015-01-08 03:38:26

  0

Да, это будет более громоздко, чем больше полей у вас на предмет. Для одной (Компонент) ссылки это будет похоже на перемещение «страниц» в One Note. Я добавлю оговорку о производительности. 13 янв. 152015-01-13 01:25:28


2

Хотя в вашем вопросе конкретно упоминается, что дизайн, который вы рассматриваете, включает встроенные схемы, вы также можете решить ту же проблему, используя таксономию. Если, как вы говорите, все, что вам нужно, это пары значений имени, тогда ключевые слова позволят вам их захватить, а также иерархию. Если вы хотите добавить что-то вроде ссылки на компонент, то это тоже возможно, добавив подходящие метаданные к вашим ключевым словам.

После публикации таксономии данные для вашего меню будут доступны через API доставки контента.