Page Types and Page Variants Guide
Overview
Page types and page variants provide a flexible system for creating conditional pages based on specific requirements. This guide explains how to implement and use them effectively.
Page Types Configuration
Helper Functions
First, define helper functions to check specific conditions. These functions will be used to determine which page type to load.
const checkMyProductHasBeautyProductTag = (blockData) => {
// Checks if product has BeautyProduct tag
return blockData?.node?.tags?.includes('BeautyProduct');
};
const checkMyProductHasEssentialProductTag = (blockData) => {
// Checks if product has EssentialProduct tag
return blockData?.node?.tags?.includes('EssentialProduct');
};
// Register helper functions
appmaker.addFilter(
'parse-helper-functions',
'theme-helper-fn',
function (value) {
return {
...value,
checkMyProductHasBeautyProductTag,
checkMyProductHasEssentialProductTag,
};
},
);
Page Configuration Structure
The main configuration object (pagesData
) consists of three main sections:
pageTypes
: Defines different page types and their conditionspageVariants
: Defines the block structure for each page typeblocks
: Contains the actual block definitionsdataSource
: Contains data source configurations
const pagesData = {
pageTypes: [
{
// Reserved empty page type - DO NOT MODIFY
type: "empty",
pageSource: "pageVariants",
condition: "{{ lodash.isEmpty(blockData) || lodash.isEmpty(blockData.node) }}",
},
{
// Custom Beauty Product Page
type: "myBeautyPageType",
pageSource: "pageVariants",
condition: "{{checkMyProductHasBeautyProductTag(blockData)}}",
},
{
// Custom Essential Product Page
type: "myEssentialPageType",
pageSource: "pageId",
pageId: "EssentialProductPage",
condition: "{{checkMyProductHasEssentialProductTag(blockData)}}",
}
],
pageVariants: {
// Reserved empty variant - DO NOT MODIFY
empty: {
blocks: [
{
name: "appmaker/in-app-page",
attributes: {
pageId: "ProductNotFound",
},
},
],
},
// Custom Beauty Product Page Variant
myBeautyPageType: {
blocks: [
{
name: "appmaker/my-block",
attributes: {},
},
],
}
},
blocks: [
// Define your blocks here
],
dataSource: {
// Define your data source configuration here
},
};
export default pagesData;
Important Notes
Reserved Page Types
empty
anderror
are reserved page types- Do not override these types when using pageVariants and pageTypes
- Always include the default empty type configuration
Page Sources Two types of page sources are available:
pageVariants
: Uses the block structure defined in pageVariantspageId
: References an externally defined page
Conditions
- Conditions are evaluated using helper functions
- Use proper error handling in condition functions
- Conditions have access to
blockData
object
Best Practices
- Keep helper functions simple and focused
- Use meaningful names for page types
- Document conditions and their expected outcomes
- Test all possible condition scenarios