Hoppa till innehåll

Hämta menyalternativ

Hämtar menyalternativ från en given nod.

server/getMenuItems.js
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:

index.js
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ämtar rekursivt det aktiva trädet från en given nod.

server/getActiveMenuTree.js
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:

index.js
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ämtar rekursivt hela trädet från en given nod.

server/getMenuTree.js
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:

index.js
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
});