Hämta bild från Mediaflow
Exempel på hur man kan hämta ut en bild från en Mediaflow modul.
- Hämta ut sidans innehåll via REST-API:ets
/contentnodes
endpoint för sidan. - Hitta den första Mediaflow modulen med en bild.
- Plocka ut första bilden.
- Returnera bildens properties som är intressanta.
import RestApi from '@sitevision/api/server/RestApi';
/** * @typedef {Object} MediaflowImage * @property {string} displayName - The display name of the image file * @property {string} alt - Alt text for the image * @property {string} caption - Caption text for the image * @property {string} mimeType - MIME type of the image (e.g., "image/webp") * @property {string} URI - Relative URI path to the image * @property {string} URL - Full URL to the image */
/** * Get a Mediaflow image from contentnodes via the REST-API. * @param {import('@sitevision/api/types/javax/jcr/Node').Node} node - The page or article node. * @returns {MediaflowImage|undefined} The Mediaflow image object or undefined if not found */function getMediaflowContentNodeImage(node) { return RestApi .get(node, 'contentnodes') .body ?.find((content) => content?.appId === 'marketplace.mediaflow.mediaflow') ?.properties ?.customContent ?.find(({ type }) => type === 'image') ?.properties ?.image;}
/** * Get a Mediaflow image from page content * @param {import('@sitevision/api/types/javax/jcr/Node').Node} node - The page or article node. * @returns The Mediaflow image or undefined if not found */export default function getMediaflowImage(node) { const image = getMediaflowContentNodeImage(node); if (!image) return undefined; return { uri: image.URI, alt: image.alt, };}
Behöver man skala om bilden (vilket man ofta behöver) måste man även hämta ut noden.
- Hämta ut sidans innehåll via REST-API:ets
/contentnodes
endpoint för sidan. - Hitta den första Mediaflow modulen med en bild.
- Plocka ut första bilden.
- Hämta ut bildnoden via dess URI, skala om den och plocka ut den omskalade bildens URI.
- Returnera den omskalade bildern URI och de andra som är intressanta.
import Utils from '@sitevision/api/server/Utils';import RestApi from '@sitevision/api/server/RestApi';import Properties from '@sitevision/api/server/Properties';
const imageScaler = Utils.getImageScaler(300, 5000);
/** * @typedef {Object} MediaflowImage * @property {string} displayName - The display name of the image file * @property {string} alt - Alt text for the image * @property {string} caption - Caption text for the image * @property {string} mimeType - MIME type of the image (e.g., "image/webp") * @property {string} URI - Relative URI path to the image * @property {string} URL - Full URL to the image */
/** * Get a Mediaflow image from contentnodes via the REST-API. * @param {import('@sitevision/api/types/javax/jcr/Node').Node} node - The page or article node. * @returns {MediaflowImage|undefined} The Mediaflow image object or undefined if not found */function getMediaflowContentNodeImage(node) { return RestApi .get(node, 'contentnodes') .body ?.find((content) => content?.appId === 'marketplace.mediaflow.mediaflow') ?.properties ?.customContent ?.find(({ type }) => type === 'image') ?.properties ?.image;}
/** * Get a scaled image URI. * @param {MediaflowImage} image - The Mediaflow image object. * @returns {string|undefined} The scaled image URI or undefined if not found */function getScaledImageUri(image) { const node = ResourceLocatorUtil.getNodeByUrl(image.URI); if(!node) return undefined; return Properties.get(imageScaler.getScaledImage(node), 'URI');}
/** * Get a Mediaflow image from page content * @param {import('@sitevision/api/types/javax/jcr/Node').Node} node - The page or article node. * @returns The Mediaflow image or undefined if not found */export default function getMediaflowImage(node) { const image = getMediaflowContentNodeImage(node); if(!image) return undefined; return { uri: getScaledImageUri(image) || image.URI, alt: image.alt, };}
- Leta upp alla portlets på sidan av typen
mfpimage
(Bild från MediaflowPro). - Plocka ut bildnodens ID (
imageID
) från första MFP portleten som hittas. - Därefter kan man hämta ut bildens properties som vanligt.
import NodeTreeUtil from '@sitevision/api/server/NodeTreeUtil';import Properties from '@sitevision/api/server/Properties';
export default function getMFPImage(node) { const portlets = NodeTreeUtil.findPortletsByType(node, 'mfpimage'); if (portlets.isEmpty()) return undefined;
const imageId = Properties.get(portlets.get(0), 'imageID'); return imageId && { uri: Properties.get(imageId, 'URI'), alt: Properties.get(imageId, 'alt'), };}
Behöver man skala om bilden (vilket man ofta behöver) måste man även hämta ut noden.
- Leta upp alla portlets på sidan/artikeln av typen
mfpimage
(Bild från MediaflowPro). - Plocka ut bildnodens ID (
imageID
) från första MFP portletens properties. - Plocka ut bildnoden från via dess ID.
- Skala om bilden.
- Därefter kan man hämta ut bildens properties, där URI först hämtas från den omskalade bilden om det gick bra och alt-text hämtas från ursprungsbilden.
import Utils from '@sitevision/api/server/Utils';import NodeTreeUtil from '@sitevision/api/server/NodeTreeUtil';import Properties from '@sitevision/api/server/Properties';import ResourceLocatorUtil from '@sitevision/api/server/ResourceLocatorUtil';
const imageScaler = Utils.getImageScaler(300, 5000);
function getScaledImage(id) { const node = ResourceLocatorUtil.getNodeByIdentifier(id); if(!node) return undefined; return imageScaler.getScaledImage(node);}
export default function getMFPImage(node) { const portlets = NodeTreeUtil.findPortletsByType(node, 'mfpimage'); if (portlets.isEmpty()) return undefined;
const imageId = Properties.get(portlets.get(0), 'imageID');
return imageId && { uri: Properties.get(getScaledImage(imageId) || imageId, 'URI'), alt: Properties.get(imageId, 'alt'), };}