Hoppa till innehåll

Hämta bild från Mediaflow

Exempel på hur man kan hämta ut en bild från en Mediaflow modul.

  1. Hämta ut sidans innehåll via REST-API:ets /contentnodes endpoint för sidan.
  2. Hitta den första Mediaflow modulen med en bild.
  3. Plocka ut första bilden.
  4. Returnera bildens properties som är intressanta.
getMediaflowImage.js
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.

  1. Hämta ut sidans innehåll via REST-API:ets /contentnodes endpoint för sidan.
  2. Hitta den första Mediaflow modulen med en bild.
  3. Plocka ut första bilden.
  4. Hämta ut bildnoden via dess URI, skala om den och plocka ut den omskalade bildens URI.
  5. Returnera den omskalade bildern URI och de andra som är intressanta.
getMediaflowImage.js
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,
};
}