На Deep-CMS «напал»:

Typical Programmer

Работа с узлами дерева

Для некоторой совместимости с предыдущими версиями Deep-CMS, старый функционал для работы с узлами дерева документов был вынесен в отдельный компонент — extendedTreeUtils. Все его методы работают в точности так, как это было в предыдущих версиях компонентов ядра.

Если в Ваших шаблонах используются конструкции вызова из предыдущих версий Deep-CMS, то самый простой путь — это заменить старые конструкции вызовов на те, которые описаны ниже. Тем не менее, рекомендуется применять основные возможности ядра последней версии, т.к. они максимально оптимизированы и потребляют гораздо меньше ресурсов сервера. Однако, если для решения некоторой спецефичной задачи Вам подходят описанные ниже методы — смело их используйте.

Внимание! Отличительной особенностью данного функционала является то, что он учитывает отношения узлов «родитель-потомок».

extendedTreeUtils::makeTreeArray($lineArray, $parent = 0)

Метод получает на вход «линейный» массив элементов (узлов дерева), где каждый элемент является массивом описывающим один узел дерева:

array(
  array(
    'id'         => 1,
    'parent_id'  => 0,
    'prototype'  => 'simplePage',
    'lvl'        => 1,
    'lk'         => 1,
    'rk'         => 6,
    'page_alias' => '/news.html',
    'node_name'  => 'Новости'
  ),
  array(
    'id'         => 2,
    'parent_id'  => 1,
    'prototype'  => 'simplePage',
    'lvl'        => 2,
    'lk'         => 2,
    'rk'         => 3,
    'page_alias' => '/news/1.html',
    'node_name'  => 'Первая новость'
  ),
  array(
    'id'         => 3,
    'parent_id'  => 1,
    'prototype'  => 'simplePage',
    'lvl'        => 2,
    'lk'         => 4,
    'rk'         => 5,
    'page_alias' => '/news/2.html',
    'node_name'  => 'Вторая новость'
  )
);

На выход возвращается многомерный массив, где элементы рекурсивно вложены внутри других элементов по ключу «children»:

array(
  'id'         => 1,
  'parent_id'  => 0,
  'prototype'  => 'simplePage',
  'lvl'        => 1,
  'lk'         => 1,
  'rk'         => 6,
  'page_alias' => '/news.html',
  'node_name'  => 'Новости',
  'children'   => array(
    array(
      'id'         => 2,
      'parent_id'  => 1,
      'prototype'  => 'simplePage',
      'lvl'        => 2,
      'lk'         => 2,
      'rk'         => 3,
      'page_alias' => '/news/1.html',
      'node_name'  => 'Первая новость',
      'children'   => array()
    ),
    array(
      'id'         => 3,
      'parent_id'  => 1,
      'prototype'  => 'simplePage',
      'lvl'        => 2,
      'lk'         => 4,
      'rk'         => 5,
      'page_alias' => '/news/2.html',
      'node_name'  => 'Вторая новость',
      'children'   => array()
    )
  )
);

Если элемент не имеет потомков, то ключ «children» будет содержать пустой массив.

Второй аргумент метода является не обязательным. Если указано — метод вернет только те узлы, которые являются потомками узла с указанным идентификатором.

extendedTreeUtils::drawTreeLinksList($arr)

Метод получает на вход многомерный массив узлов дерева полученный предыдущим методом и возвращает сгенерированную строку html-разметки вложенных ul-li-a списков, например для отображения карты сайта или многоуровневого меню.

extendedTreeUtils::getTreeLinksList($arr, $parent = 0)

Метод является оберткой к двум первым методам для удобства, что сокращает цепочку вызовов. Первым аргументом принимает на вход линейный массив узлов дерева. Вторым аргументом при необходимости — идентификатор родительского узла, потомков которого необходимо получить на выходе. Возвращает сгенерированную строку html-разметки вложенных ul-li-a списков:

<?=extendedTreeUtils::getTreeLinksList(dataHelper::getChainChildren($id), $id)?>

Данный пример выведет в шаблон вложенный ul-li-a список всех потомков текущего узла.

Deep: 2014-01-26 13:09:43 (обновлено 2014-01-26 14:20:09)

Оставить комментарий

Комментарии:

protection