Narratives
Watch the video tutorial
The content of this page is presented in a video tutorial, have a look:
Other tutorials
https://boxalino.atlassian.net/wiki/spaces/BPKB/pages/26542259
https://boxalino.atlassian.net/wiki/spaces/BPKB/pages/283705349
Flexible Landing Pages
Dynamic Brand Pages
Personalized Layouts
What is a Narrative?
A Narrative is a page layout (or a set of zones in a page layout) with headless content (headless because the content is not specific to any view, it can be used in any channel: web-site, e-mail, print marketing, …).
A Narrative can be a complete web page layout or the layouts of sections (or zones) of the page.
As you integrate the Narratives in your Website, you decide which narrative appears where (in which pages or page zones) during the technical integration.
For example, for a search result page, the layout of the search results will be defined by a narrative (e.g., as in the example we will see in details later in this page: first a search message, then a banner, then the pagination and sorting option, then a grid of product results, then pagination again and below an SEO text, and on the left of it all the facets (search refinement filters).
You can find the Narrative-view under Marketing > Narratives.
The main Widget of a Narrative
Narratives are always connected to at least one Widget.
This is because the request from your Website to our API is always done on a widget.
The system will then identify the one narrative (in case many are defined) which are connected to this widget that should be used.
This widget is then the main widget of the narrative.
As per the flow below, the main widget will provide the key content to be integrated as content in the narrative layout.
You can add additional sub widgets in the Narrative if you need them (for example, if your narrative shows two blocks of product recommendations, then the first one is typically the main widget which is the one called by your Front-End API request and the second one is a sub widget defined in the narrative).
Create a new narrative
To create a narrative, click on the add-button and give the narrative a unique key. This is how your narrative will later be accessed, so use a name that describes it well and is easy to understand.
For example, you can use the same name as a widget (in case you don’t plan to have more than one narrative for this widget), or add “_default” at the end of the widget name in case you want to have it as the default version but plan to create a more specific narrative for specific cases.
Your widget will then appear at the end of the list, you can then edit it by clicking on the action edit (pencil icon).
On the top right of the dialog, you can define a list of main Widgets for the Narrative.
Why several Narratives for the same main Widget?
There are different ways to configure different Narrative Layouts and Contents for different situations.
One way is to have several Narratives and to make them vary by the Narrative Context (see details below).
Another way is to have one Narrative but to have Conditional Layouts in the narrative for the different cases (see details below)
A third way is to have one Narrative with a Fix Layout but dynamic content defined with Variables (check our documentation here: https://boxalino.atlassian.net/wiki/spaces/BPKB/pages/283705349 )
A less important question: Why several main Widgets for the same Narrative?
The opposite is also possible, to have more than one main Widget defined in one Narrative.
The main reason for doing it is to configure only one Narrative (typically a quite dynamic one) but to use it in the context of different widgets.
Different widgets will automatically provide segmentation in the statistics.
One Narrative is easier to maintain (no need to copy changes back and for).
However, this is not a very common need and typically is not applied.
Title, Aliases, and SEO Content
Above: You can provide here the Title (H1) in Each Language.
Above: in the SEO Content Tab you can define Header information: Page Title, Meta Tags and other parameters as well as the Breadcrumb of the page (to be provided in JSON).
Narrative Context
A narrative is connected to a context. The Narrative Context defines (as a condition) if the Narrative should be considered as active in a given context.
The context by default is empty which means that the Narrative is always active.
A context can be defined on many different criteria (A/B testing variant, Visitor or Customer Segment, Page Context (page URL, current filter, facets selected by the user, search query, …).
Example with a Context Parameter “campaign” set with the Variable “{{var-currentNarrative-uniqueKey}}”. This logic is often used for landing pages where a parameter “campaign” is passed (typically with the url path of the page) and is automatically matched with the Name of the Narrative.
Fix versus Conditional Layout
A Narrative is defined as a list of Layouts (typically only one).
A Layout can be Fix, Conditional, or be a reference to another Narrative (this is simply a way to embed Narratives).
Fix Layout
A Fix layout is a layout that never changes and is always the same for all the different situations.
A Fix Layout has a Context (it only applies if the Context is satisfied, see the explanations about Context above).
A Fix Layout is defined by an ordered List of configured Layout Blocks (see explanation below).
Conditional Layout
A Conditional Layout has a Context as a condition (it only applies if the Context is satisfied, see the explanations about Context above).
Then it has a list of Fix Layouts each connected either to the true or the false (or both) evaluation of the condition.
In this example, we create automatically an A/B test simply by naming “testA” as a test Variant in the condition and we have then 3 Fix layout: the first two will apply to the control variant (testA is false) and the second and third will apply to the test variant (testA is true).
Configure the Layout Blocks Parameters of a Fix Layout
To fill the list of configured Layout Blocks of a Fix Layout, you need to select a Layout Block in the list.
After adding a Layout Block you can configure it by filling in its content.
Each Layout block has its own Parameter Schema, so it means that what field you will see in the form (as in the example above) depend on the definition of the Layout Block.
You can set the content of each parameter with static values (i.e.: writing the content as it should appear to the user).
You can also set the content with Dynamic Variables (or a mix of static text and Dynamic Variable, like, for example: “hello {{template-firstname}}”.
To find out more about how to set dynamic variables: https://boxalino.atlassian.net/wiki/spaces/BPKB/pages/283705349
Nesting Layout Blocks
Some Layout blocks might expect (or support) to have children Layout Blocks defined.
For example, a product slider would typically be a Layout Block with a list of product Layout Blocks inside.
And the nesting is not limited to one level, so you can do children blocks of children blocks of children blocks …
The automated widget content bx-… parameters
As illustrated in this diagram, a few Layout Blocks will be configured by your team with bx-… parameters.
These parameters will automate the filling of specific parts of their content.
As a user, you don’t have to do anything, just to select the Layout Blocks that you want, but here we explained what is happening automatically behind the scene:
bx parameter | type of Layout Blocks | Effect |
---|---|---|
bx-hits | Product Slider Product List | the container of the Final Results of the Widget |
bx-hit | Product | the block that should be duplicated and filled with the appropriate content for each of the Final Results of the Widget |
bx-facets* | Facets | the facets informations (including visual rendering options) which should be used to display the facets content (filtering option for the user on a search or a product listing page). |
bx-pagination* | Toolbar Pagination | the pagination information (user can paginate to page 2, 3, …) |
bx-hitCount* | Toolbar | gives only the number of items to be displayed to the user (often done with bx-pagination |
bx-sort* | ToolBar | gives the option to the user to order the results by a criteria (lowest price, name, …) |
*ONLY WORKS FOR WPO IN THE CONSIDERATION COLUMNS!
The Accessor Parameter
Layout Blocks containing dynamic lists of content provided by a widget will have an accessor parameter (for example the Layout Block “Product List” which has Product Layout Blocks as children)
This accessor parameter can be left empty by default. It will then take the value of the Main Widget (see the section above for details).
However if your container should display the results of another widget, you need to define the widget name as accessor.
For example, this widget has the widget “accessories” as the main Widget. However, it is showing 4 sliders of product recommendations (Accessories, Similar, Complementary, and Related products suggestions).
While the first Layout Block (Accessor) will have an empty accessor parameter (as it will use the main Widget “accessor” by default). All the other ones will have a value defined with the name of their related widget, for example here, for the second one, the widget “similar”.
Save, Test & Deploy
When you are done editing, you can save the narrative and then click Save.
To test your Narrative changes click on the top-right button “Test” (or “Save & Test”). Go test on your stage front-end (wait for 5-10 minutes for the cache to automatically clear). Make API requests with the flag “test”:true enabled.
When you are satisfied with your changes, go to Deployment > Publish, click on the “Publish All” button, and confirm.