Вход для клиентов и партнеров
в начало сайта
Партнерская программаОнлайн демоСкачатьКарта сайта
 

Регламент
Документация
Часто задаваемые вопросы (FAQ)
Решения типовых вопросов
Форум поддержки
Библиотека разработчика

Посмотрите демо-ролики и убедитесь в том, что "Twilight CMS" очень удобна в управлении, понятна и проста.

Бесплатно скачайте "Twilight.Basic", установите на своем компьютере и изучите систему более детально.

Если вам нужно установить "Twilight CMS" на существующий сайт или разработать новый - обращайтесь в отдел интеграции.

 

Ваше имя
Ваш Email
Вопрос
Twilight.basic
  • Узнайте больше
  • Сравните версии
  • Twilight.selection
  • Узнайте больше
  • Сравните версии
  • Twilight.evolution
  • Узнайте больше
  • Сравните версии
  •  
    Главная // Библиотека разработчика // Справочники // Макроподстановки //

    Menu


    Назначение

    Включение меню в страницы сайта.

    Ключи

    menuid Строка, определяет идентификатор отрисовываемого меню (элемента folder с assign="menu") в menu.xml.
    design Строка, идентификатор дизайна в menu_designs.xml.
    condition Составное условие выполнения макроса.
    currentpage Строка, содержит псевдоним страницы. Позволяет «обмануть» систему и вывести меню на любой странице так, как оно бы выглядело на странице с псевдонимом, заданным с помощью данного ключа.

    Комментарии

    Макрос позволяет оформить меню как угодно, включая DHTML, Javascript, Flash подсветку, выпадающие меню, статические, горизонтальные, вертикальные - любые. Дизайн полностью отделен от структуры данных.

    Структурой меню управляет редактор сайта через админзону. Разработчик только создает корневой элемент folder с атрибутом assign="menu" и задает ему уникальный строковый идентификатор в атрибуте id.

    Все шаблоны оформления для любых меню ("дизайны") хранятся в файле Templates/menu_design.xml.

    Имея несколько шаблонов оформления для одного и того же меню можно по разному оформить данные на разных страницах сайта.

    Принцип вывода данных с помощью данной макроподстановки на страницах сайта таков: в каждом дизайне определяются секции header, footer, item, delimiter, empty. При выводе записей из справочника из этих секций в цикле набирается конструкция:

    header
    item
    delimiter
    item
    delimiter
    ...
    item
    footer

    При отсутствии отрисованных пунктов будет выведена секция empty.

    Элемент item в xml описании дизайна содержит набор элементов level, атрибут id которых определяет часть дизайна, которую нужно выводить для отрисовки пункта меню, расположенного на определенном уровне иерархии. Таким образом, для каждого дизайна меню можно сделать так, чтобы пункты по внешнему виду отличались в зависимости от того, на каком уровне иерархии они находятся. Обычно пункты первого уровня делают более крупными, а вложенные с отступом вправо и более мелким шрифтом.

    Каждый элемент типа level содержит два вложенных элемента - usual и active. Usual определяет дизайн для пункта, который в данный момент не активен. Active - дизайн для активного пункта. Активными пунктами считается вся ветка, в которой находится пункт, указывающий на страницу на которой сейчас находится пользователь. Формулировка сложная, но все достаточно просто: если есть раздел "1. о компании" в котором есть две страницы "1.1. контакты" и "1.2. руководство", а пользователь в данный момент находится на странице "1.1. контакты", то дизайн active будет использован для страниц 1. и 1.1., а дизайн usual - для 1.2. Естественно, что для пункта 1. будет выбран дизайн из секции level с id="1", а для пункта 1.1 из секции level с id="2", поскольку они находятся на разных уровнях иерархии. Так обычно делается подсветка меню.

    В указании уровня через атрибут id элемента level допустимы диапазоны и простые арифметические действия. Например возможны следующие комбинации:

    • level id="1.." (от 1 до бесконечности)
    • level id="1..5"
    • level id="current" (уровень страницы, на которой находится пользователь, в иерархии отрисовываемого меню)
    • level id="1..current-1"
    • level id="current+1..current+4"

    Сначала система отрисовывает только элементы первого уровня. Элементы следующего уровня будут отрисованы только тогда, когда в дизайне встретится служебное слово $Children$.

    Внимание! $Children$ вызывает переход на уровень вниз, поэтому избегайте бесконечной рекурсии - не используйте $Children$ внутри условий типа $Empty[]$/$NotEmpty[]$. Глубина рекурсии будет всегда ограничена (99 уровней), но она приведет к серьезному торможению. Для определения "есть ли у текущего пункта дети" нужно использовать $Attibute:childs$ (содержит пустую или непустую строку когда детей нет или они есть, соответственно).

    Макрос позволяет использовать внутри дизайна локальную подстановку $Attribute:имя_атрибута$ или $PointProperty[имя_атрибута]$ (устарело). Имя атрибута - это xml атрибут или подэлемент в элементе node (странице), на которую указывает отрисовываемый пункт меню. Например, если при отрисовке меню в дизайне написать $Attribute:alias$, то будет выведено содержимое подэлемента alias в тэге node, то есть псевдоним страницы на которую указывает текущий элемент меню.

    Также Система добавляет к тому, что определено в menu.xml разработчиком или предустановлено некоторое количество своих специальных атрибутов "на лету":

    • title - название страницы;
    • drillnumber - сквозной номер (нумерация с 1) пункта в дереве меню. нумеруются только опубликованные пункты, но при этом не учитывается факт отрисовки пункта на экране;
    • branchnumber - номер (нумерация с 1) пункта в текущем уровне текущего родителя (не рекурсивно);
    • level - уровень пункта меню в иерархии (нумерация с 1);
    • childs - строка, содержащая id детей текущего элемента через ":", обычно используется как аргумент при проверке "есть ли дети у текущего элемента";
    • type - содержит строку со значением folder или node или link. Соответственно, этот атрибут сообщает на элемент какого типа ведет ссылка из меню. По умолчанию, если создать в меню ссылку на папку (перетащить её в меню), то атрибут title будет взят от папки, а alias будет присвоен от первой найденной в папке страницы. Иногда это полезно для разработчика, например, если ему нужно создать меню с пунктами для которых нет страниц, но у которых есть подразделы. А иногда это не нужно, тогда разработчик может проанализировать тип элемента и сам решить выводить ли ему ссылку в меню или нет. А также это бывает нужно и для других ситуаций, например для вывода сложных по дизайну меню.
    • isFirst - непустая строка, если пункт является первым отображенным в меню. Первый отображенный на странице пункт не обязательно будет первым пунктом в меню в админзоне, даже если он опубликован (от дизайна зависит).
    • isLast - непустая строка, если пункт является последним отображенным в меню. См. выше комментарий к isFirst.

    Построение графических меню с использованием атрибутов, определенных разработчиком, детально рассмотрено в одной из статей "Книги рецептов" (раздел "Cookbook" в www.twl.ru/tsdn).

    Примеры

    Пример
    $Menu[menuid: mainmenu; design: mainmenu_firstpage; currentpage: alias; condition: boolean]$

    Дизайн для простого вертикального меню с выводом неограниченного числа уровней для отрисовки карты сайта в виде буллетированного списка.

     <menudesign id="sitemap">
      <header/>
      <delimiter/>
      <footer/>
      <item>
       <level id="1050" number="1..">
        <usual>
         <![CDATA[<LI><A HREF="/$Attribute:alias$">$Attribute:title$</LI>$Text[source: "<UL>$Children$</UL>"; condition: $Attribute:childs$!=]$]]>
        </usual>
        <active>
         <![CDATA[<LI><A HREF="/$Attribute:alias$">$Attribute:title$</LI>$Text[source: "<UL>$Children$</UL>"; condition: $Attribute:childs$!=]$]]>
        </active>
       </level>
      </item>
     </menudesign>

    Обратите внимание, что все блоки HTML в тэгах XML обязаны быть помещены в CDATA блок.

    Дизайн, отрисовывающий навигатор типа "хлебные крошки"

     <menudesign id="breadcrumbs">
      <header>
       <![CDATA[<A HREF="/">Главная </A> / ]]>
      </header>
      <delimiter/>
      <footer>
       <![CDATA[<P> </P>]]>  
      </footer>
      <item>
       <level id="1060" number="1..current-1">
        <usual/>
        <active>
         <![CDATA[<A HREF="/$Attribute:alias$">$Attribute:title$</A> / $Children$]]>
        </active>
       </level>
       <level id="1070" number="current">
        <usual/>
        <active>
         <![CDATA[$Attribute:title$]]>
        </active>
       </level>
      </item>
     </menudesign>

    Обратите внимание на применение служебного слова current, для обозначения номера уровня, на котором мы сейчас находимся. Если мы находимся на странице "О компании" (например), ссылка на которую в отрисовываемом этим дизайном меню находится на первом уровне, то current будет равен 1.  Если ссылка на эту страницу в меню будет на уровне вложенности 2, то и current будет равен 2. Таким образом, поддизайны 1060 и 1070 будут применяться к одному и тому же пункту в меню по разному, и отрисовываться он будет по разному, в зависимости от того, на какой странице сайта мы находимся в конкретный момент.

    « к списку макроподстановок

    версия для печати

     
    © 2003-19 Страта Технологии (создание сайтов, разработка cms), Twilight CMS in english.
    Наш адрес: Москва, пр. Маршала Жукова д.51
    Тел.: (495) 222-6436, E-mail: , карта сайта, условия использования информации о CMS
    Звоните через Skype:  

    Реклама: