Hämta menyalternativ
Hämta en nivå
Section titled “Hämta en nivå”Hämtar menyalternativ från en given nod.
import NodeIteratorUtil from '@sitevision/api/server/NodeIteratorUtil';import NodeTreeUtil from '@sitevision/api/server/NodeTreeUtil';import Properties from '@sitevision/api/server/Properties';
function createItemData(iterator, callback) { const items = []; while (iterator.hasNext()) { const node = iterator.next(); items.push(callback(node)); } return items;}
export default function getMenuItems(rootNode, currentPage) { const iterator = NodeIteratorUtil.getMenuItems(rootNode); return createItemData(iterator, (node) => ({ id: node.getIdentifier(), name: Properties.get(node, 'displayName'), uri: Properties.get(node, 'rawURI') || Properties.get(node, 'URI'), isCurrent: currentPage.equals(node), isExpanded: NodeTreeUtil.isDescendantOf(currentPage, node), }));}
Exempel på användning:
import router from '@sitevision/api/common/router';import appData from '@sitevision/api/server/appData';import PortletContextUtil from '@sitevision/api/server/PortletContextUtil';
import getMenuItems from './server/getMenuItems';
router.get('/', (req, res) => { const rootNode = appData.getNode('rootNode'); const currentPage = PortletContextUtil.getCurrentPage(); const items = getMenuItems(rootNode, currentPage); // Do something with the items});
Hämta aktivt träd
Section titled “Hämta aktivt träd”Hämtar rekursivt det aktiva trädet från en given nod.
import NodeIteratorUtil from '@sitevision/api/server/NodeIteratorUtil';import NodeTreeUtil from '@sitevision/api/server/NodeTreeUtil';import Properties from '@sitevision/api/server/Properties';
function createItemData(iterator, callback) { const items = []; while (iterator.hasNext()) { const node = iterator.next(); items.push(callback(node)); } return items;}
function hasChildren(node) { return NodeIteratorUtil.getMenuItems(node).hasNext();}
export default function getActiveMenuTree(parentNode, { currentPage, level = 1 } = {}) { const iterator = NodeIteratorUtil.getMenuItems(parentNode); return createItemData(iterator, (node) => { const isExpanded = NodeTreeUtil.isDescendantOf(currentPage, node); return { id: node.getIdentifier(), level, name: Properties.get(node, 'displayName'), uri: Properties.get(node, 'rawURI') || Properties.get(node, 'URI'), isCurrent: currentPage.equals(node), isExpanded, hasChildren: hasChildren(node), children: isExpanded ? getActiveMenuTree(node, { currentPage, level: level + 1 }) : [], }; });}
Exempel på användning:
import router from '@sitevision/api/common/router';import appData from '@sitevision/api/server/appData';import PortletContextUtil from '@sitevision/api/server/PortletContextUtil';
import getActiveMenuTree from './server/getActiveMenuTree';
router.get('/', (req, res) => { const rootNode = appData.getNode('rootNode'); const currentPage = PortletContextUtil.getCurrentPage(); const tree = getActiveMenuTree(rootNode, { currentPage }); // Do something with the tree});
Hämta hela trädet
Section titled “Hämta hela trädet”Hämtar rekursivt hela trädet från en given nod.
import NodeIteratorUtil from '@sitevision/api/server/NodeIteratorUtil';import NodeTreeUtil from '@sitevision/api/server/NodeTreeUtil';import Properties from '@sitevision/api/server/Properties';
function createItemData(iterator, callback) { const items = []; while (iterator.hasNext()) { const node = iterator.next(); items.push(callback(node)); } return items;}
function hasChildren(node) { return NodeIteratorUtil.getMenuItems(node).hasNext();}
export default function getMenuTree(parentNode, { currentPage, level = 1 } = {}) { const iterator = NodeIteratorUtil.getMenuItems(parentNode); return createItemData(iterator, (node) => ({ id: node.getIdentifier(), level, name: Properties.get(node, 'displayName'), uri: Properties.get(node, 'rawURI') || Properties.get(node, 'URI'), isCurrent: currentPage.equals(node), isExpanded: NodeTreeUtil.isDescendantOf(currentPage, node), hasChildren: hasChildren(node), children: getMenuTree(node, { currentPage, level: level + 1 }), }));}
Exempel på användning:
import router from '@sitevision/api/common/router';import appData from '@sitevision/api/server/appData';import PortletContextUtil from '@sitevision/api/server/PortletContextUtil';
import getMenuTree from './server/getMenuTree';
router.get('/', (req, res) => { const rootNode = appData.getNode('rootNode'); const currentPage = PortletContextUtil.getCurrentPage(); const tree = getMenuTree(rootNode, { currentPage }); // Do something with the tree});