Skip to content

Content Management

js.sevestre edited this page Mar 17, 2020 · 18 revisions

Content listing

The lang parameter is mandatory for this call.

You can add more filters, see apidoc

contents = api.get_call("content/list", body={"lang":"en"})

Content details

This call is designed for content view

content = api.get_call("content/get", uid="5386179638984704")

NB: content.uid = content.id

Content update

Get content with action=PAGE_EDIT to have all relevant data.

content = api.get_call("content/get", uid="5386179638984704", action="PAGE_EDIT")

Note: the version number is used to lock ressource. You have to put the last version number of a content in version to be allowed to update a content, else a bad request:"CONTENT_NOT_UP_TO_DATE" will be returned.

Content creation

The simplest way to create content is to use an existing template. This template will define all design configuration.

base_template = api.get_call("template/get", uid="123456789")
# note : it's possible to use a content as well.

new_content = {
    "type": "page", # fixed
    "template": base_template[template], # copy all the structure (see below for details)
    "customContentType": base_template["customContentType"], # custom content type id
    "customer": base_template["customer"], # customer id
    "instance": base_template["instance"], # instance id
    "feedKeys": base_template["feedKeys"], # it's the `visibleBy` field in the front interface.
    "publicationDate": base_template[publicationDate],
    "title": {"en": "created content from api"},
    "slug": {"en": "create-content-from-api"}, # WARNING : should be unique per instance
    "metadata": [], # if any, provide metadata value uid
}

new_content_saved = api.get_call("content/save", body=new_content)

Objects explanation

Content

{
    "id" :"134567",
    "type":  "page",
    "status": "LIVE|ARCHIVED",
    "thumbnail" : "media library url",
    "publicationDate" : "2018-06-29T09:28:34.346124",
    "updatedAt": "2018-06-29T09:28:34.346124",
    "authorId": "23142536879786754" # set at creation time with the connected user
}

To create content on behalf other users you have to be connected with this user.

Content.template

The template property contains the whole page structure.

Widgets are directly placed in this structure.

{ "template": {
    "components": [
        {
            "type": "row",
            "cells": [
            {
                "type": "cell",
                "components":[
                {
                    "type": "row|widget",
                    ...
                },
                ...]
            },
            ...]
        },
        ...]
    }
}

You should iterate over all the structure to find the correct widget to update.

Content.thumbnail

A content can have a thumbnail, that is a picture associated to it that show when listed in a content-list widget for instance.

Your media should be uploaded on LumApps, see Media Management

Update an existing thumbnail

# First get the content
content = api.get_call('content/get', uid="6448894901878784")

# Update the thumbnail field by the media blob key 
new_content = {
  ...
  "thumbnail": <your_new_blob_key>
}

# Resave the content
api.get_call('content/save', body=new_content)

Widget

Widget are placed in the content.template tree.

Widget can be identified by their uuid

{
    "type": "widget",
    "widgetType": "contact|html|...",
    "uuid": "ca2bd99c-7b7e-11e8-8255-abba20e0e453",
}

Specific configurations are in properties.

Ex for an html widget:

{
    "type": "widget",
    "widgetType": "html",
    "uuid": "ca2bd99c-...",
    "properties": {
        "content":
            {
            "fr": "<p>Contenu html en français</p>",
            "en": "<p>Html text in english </p>" 
            },
        "id": "identifier set in front > style > advance",
        "class": "class set in front > style > advance",
    }
}

The properties>id (or class) could be used to simplify widget access from code and communication with design team.

Clone this wiki locally