Hämta relaterad information
Exempel på hur man kan hämta ut relaterad metadata från en nod och hantera de olika typerna av värden som kan förekomma.
import ScriptUtil from '@sitevision/api/server/ScriptUtil';import Properties from '@sitevision/api/server/Properties';import MetadataUtil from '@sitevision/api/server/MetadataUtil';import InstanceTypeUtil from '@sitevision/api/server/InstanceTypeUtil';import NodeTypeUtil from '@sitevision/api/server/NodeTypeUtil';
function isLink(value) { return InstanceTypeUtil.isNode(value) && NodeTypeUtil.isLink(value);}
function isUser(value) { return InstanceTypeUtil.isNode(value) && NodeTypeUtil.isTypeOf(value, [NodeTypeUtil.USER_TYPE, NodeTypeUtil.SIMPLE_USER_TYPE]);}
function isFile(value) { return InstanceTypeUtil.isNode(value) && NodeTypeUtil.isLink(value) && ['FILE', 'IMAGE'].includes(Properties.get(value, 'linkType'));}
function createLinkData(node) { const uri = Properties.get(node, 'rawURI'); const isExternal = Properties.get(node, 'linkType') === 'EXTERNAL'; const isNewWindow = Properties.get(node, 'openInNewWindow');
return { id: node.getIdentifier(), name: Properties.get(node, 'displayName'), uri, isExternal, isNewWindow, assistiveText: [ Properties.get(node, 'description'), isExternal && 'länk till annan webbplats', isNewWindow && 'öppnas i nytt fönster', ].filter(Boolean).join(', '), type: 'link', };}
function createFileData(node) { const uri = Properties.get(node, 'rawURI'); const fileName = Properties.get(uri, 'fileName') || Properties.get(uri, 'displayName'); const isNewWindow = Properties.get(node, 'openInNewWindow'); const extension = fileName?.split('.')?.pop(); const size = ScriptUtil.getHumanPresentableSize(Properties.get(uri, 'length'))?.replace(' ', ''); return { id: node.getIdentifier(), name: Properties.get(node, 'displayName'), uri: Properties.get(node, 'rawURI'), size, isNewWindow, assistiveText: [ Properties.get(node, 'description'), extension, size, isNewWindow && 'öppnas i nytt fönster', ].filter(Boolean).join(', '), type: 'file', };}
function createUserData(node) { return { id: node.getIdentifier(), name: Properties.get(node, 'displayName'), uri: `mailto:${Properties.get(node, 'mail')}`, icon: 'bi-person', type: 'user', };}
function createData(value) { if (isUser(value)) { return createUserData(value); } if (isFile(value)) { return createFileData(value); } if (isLink(value)) { return createLinkData(value); }
return { name: value };}
export default function getRelatedMetadata(node, metadata) { return MetadataUtil .getRelatedMetadataPropertyValues(node, metadata) .toArray() .map(createData);}
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 getRelatedMetadata from './server/getRelatedMetadata';
router.get('/', (req, res) => { const currentPage = PortletContextUtil.getCurrentPage(); const metadata = appData.get('relatedMetadata', 'name'); const relatedMetadata = getRelatedMetadata(currentPage, metadata); // Do something with relatedMetadata});