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

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

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

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

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

 

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

    СatalogFullTree


    Назначение

    Вывод древовидного рубрикатора каталогов для отрисовки навигационных элементов типа древовидного рубрикатора или "хлебных крошек". В отличие от CatalogTree позволяет отрисовывать не только папки, но и элементы каталога.

    Ключи

    source Строка, содержит имя xml файла со структурой (без расширения). Если ключ не задан будет использоваться значение catalog.
    catalogid Обязательный ключ. Строка, содержит идентификатор каталога (атрибут id элемента folder assign="catalog") в xml файле со структурой данных.
    design Обязательный ключ. Строка, содержит идентификатор дизайна, используемого для отрисовки дерева.
    rootpage Строка, содержит псевдоним (alias) страницы, которая считается корневой для каталога. Используется для правильной "подсветки" категорий и элементов при отрисовке дерева.
    filter Составной фильтр, пары "ключ=значение" разделяемые запятыми. Применяется и к папкам и к элементам дерева. Например:

    filter: iid=9993B26EF38B4517A668A8444881A0C5, sid!=0, title!="Авто"

    Присутствует только в версиях 4.46+.

    Комментарии

    * Устройство каталогов см. в описании работы макроса CatalogTree, которым реализуется навигация по каталогу и который почти полностью аналогичен макросу CatalofFullTree логически. Структура хранения данных каталога описана в статье, посвященной макросу CatalogList.

    Структура любого каталога хранится в xml файле. В качестве примера можно взять файл catalog.xml из набора demoshop.zip (скачивается из закрытой зоны). Файл содержит иерархию категорий, элементов и ярлыков (ссылок на элементы). Ярлыки при отрисовке автоматически преобразуются в элементы, поэтому в дальнейшем их можно не учитывать как самостоятельные логические элементы.

    Общая структура файла с дизайнами (catalog_design.xml)

    <?xml version="1.0" encoding="windows-1251" ?>
    <control-document>
        <entity id="*">
            <catalogdesign id="main">
                <header><![CDATA[Заголовок]]></header>
                <delimiter><![CDATA[Разделитель]]></delimiter>
                <item>
                    <level id="1000" number="1">
                        <category>
                            <usual><![CDATA[Обычная категория уровня 1]]></usual>
                            <active><![CDATA[Активная категория уровня 1 и вызов отрисовки следующего уровня (если нужно) через $Children$]]></active>
                        </category>
                        <element>
                            <usual><![CDATA[Обычный элемент уровня 1]]></usual>
                            <active><![CDATA[Активный элемент уровня 1]]></active>
                        </element>
                    </level>
                    <level id="1010" number="2">
                        ...
                    </level>
                </item>
                <footer><![CDATA[Подвал]]></footer>
                <empty><![CDATA[Когда элементов не найдено]]></empty>
            </catalogdesign>
        </entity>
    </control-document>

    Жирным выделены переменные части, определяемые разработчиком. Тэги CDATA могут отсутствовать, но мы рекомендуем ими обрамлять все блоки HTML для сохранения XML валидности файла с дизайнами.

    Элемент <entity ...> позволяет сделать несколько дизайнов с одинаковым идентификатором для элементов разного типа. Таким образом, возможна отрисовка одним макросом CatalogFullTree сразу всех типов товаров с разными наборами полей. В атрибуте id можно через запятую указывать несколько разных идентификаторов, для которых будет действовать все что находится внутри. Также, можно подставить символ "*", который будет означать "использовать дизайны внутри для всех entity". В принципе, если на проекте всего одна entity, или дизайны для вывода различных entity не отличаются, то секцию <entity ...> можно опустить, что будет эквивалентно указанию id="*".

    Обратите внимание, что возможность указывать разные дизайны для разных entity есть только у этого макроса, а у макроса CatalogTree её нет. Соответственно, если в файле catalog_design.xml есть тэг <entity ...>, то данный файл работать под CatalogTree уже не будет.

    Алгоритм работы макроса

    При отрисовке навигации с помощью данного макроса система проходит последовательно все категории и элементы из выбранного каталога. Для каждого пункта каталога из файла с дизайнами производится выбор секции catalogdesign с указанным в ключе design идентификатором. Далее, из секции <item> выделяется секция <level> с number равным уровню элемента в иерархии каталога. Корневой элемент имеет уровень 1, его подкатегории 2, элементы в них 3 и так далее.

    Функционирование механизма определения уровня элементов полностью аналогично механизму определения уровня пункта в меню (см. макрос $Menu[]$), поэтому тут можно использовать переменную current (текущий уровень) и простейшие арифметические действия, а также интервалы. Таким образом, допустима конструкция <level number="1..current+2">, которая говорит что данная секция дизайна будет применена для всех категорий и элементов в каталоге, лежащих на уровне от 1 до "текущий уровень + 2". Под текущим уровнем понимается тот уровень, на котором сейчас находится пользователь в каталоге. Если он просматривает категорию третьего уровня, то current=3.

    Все секции level в пределах файла catalog_design.xml должны иметь свои уникальные идентификаторы, которые могут быть произвольными строками в пределах допустимых значений для атрибутов тэгов в языке XML. Рекомендуется для простоты использовать символы A-Z, 0-9, "-" и "_", например <level id="uroven_2" number="2">

    Выбрав нужную секцию <level>, система определяет что в данный момент она обрабатывает - категорию или элемент - и выбирает внутри <level> соответствующую секцию <category> или <element>.

    Внутри выбранной секции используется секция <active>, если категория или элемент находятся в ветке, в которой находится сейчас пользователь на сайте, или <usual> для всех остальных случаев. Это нужно для подсветки текущего пути при отрисовке навигации. Если активные пункты и неактивные отличаться по дизайну не должны, то значения этих секций должны быть одинаковы.

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

    Если итоговый дизайн для текущего блока оказывается пустым, то на страницу будет выведена секция <empty>.

    Пример использования данного макроса для вывода развернутого дерева сайтов, сделанных компанией "Страта Технологии" за 2004-2006 годы, можно скачать здесь. Прочитайте readme.txt внутри архива, чтобы узнать как пользоваться примером.

    Внимание: при отрисовке навигации по древовидной иерархии большого объема (300+ категорий и несколько тысяч товаров) на одной странице макрос будет значительно замедлять работу сервера. Для чисто навигационных целей в таких случаях предлагается использовать макрос CatalogTree.

    Вывод атрибутов

    Каждый элемент дерева для отрисовки на сайте необходимо использовать в XML файле с дизайном. Каждый товар или папка, описанные некоторой сущностью в entities.xml, имеют набор полей (атрибутов). Каждое поле для текущего (при последовательном переборе во время отрисовки) элемента дерева может быть выведено в нужном месте дизайна через подстановку  $Attribute:атрибут$.

    В файле catalog_design.xml можно использовать несколько служебных атрибутов, которые не находятся в таблицах с данными, а добавляются Cистемой "на лету".

    Перечень дополнительных атрибутов в каталогах

    Примеры

    Пример
    $CatalogFullTree[catalogid: catalog; design: catalog_design]$

    Выведет каталог с идентификатором catalog из файла catalog.xml (по умолчанию) используя дизайн с идентификатором catalog_design.

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

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

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

    Реклама: