{# app/modules/cms/templates/cms/admin/content-page-edit.html #} {% extends "admin/base.html" %} {% from 'shared/macros/alerts.html' import loading_state, error_state, alert_dynamic %} {% from 'shared/macros/headers.html' import page_header_flex, back_button, action_button %} {% from 'shared/macros/inputs.html' import number_stepper %} {% from 'shared/macros/richtext.html' import quill_css, quill_js, quill_editor %} {% block title %}{% if page_id %}Edit{% else %}Create{% endif %} Content Page{% endblock %} {% block alpine_data %}contentPageEditor({{ page_id if page_id else 'null' }}){% endblock %} {% block quill_css %} {{ quill_css() }} {% endblock %} {% block quill_script %} {{ quill_js() }} {% endblock %} {% block content %} {# Dynamic title/subtitle and save button text based on create vs edit mode #}

Create a new platform default or store-specific page Modify an existing content page

{{ back_button('/admin/content-pages', 'Back to List') }}
{{ loading_state('Loading page...') }} {{ error_state('Error', show_condition='error && !loading') }} {{ alert_dynamic(type='success', message_var='successMessage', show_condition='successMessage') }}

Basic Information

URL-safe identifier (lowercase, numbers, hyphens, underscores only)

Which platform this page belongs to (e.g., OMS, Loyalty+)

This is a platform-wide default page This page overrides the default for selected store only

Page Content

{{ quill_editor( id='content-editor', model='form.content', placeholder='Write your content here...', min_height='300px', toolbar='full', help_text='Use the toolbar to format your content. Supports headings, lists, links, images, and more.' ) }}

Enter Markdown content. Will be converted to HTML when displayed.

{# Available Placeholders (for store default pages) #} {% set placeholders = [ ('store_name', "The store's display name"), ('store_email', "The store's contact email"), ('store_phone', "The store's phone number"), ] %}

Available Placeholders

Use these placeholders in store default pages. They will be automatically replaced with the store's actual information when displayed.

{% for name, description in placeholders %} {% raw %}{{{% endraw %}{{ name }}{% raw %}}}{% endraw %} {% endfor %}

Click a placeholder to copy it to your clipboard.

Homepage Sections (Multi-language content)

Loading sections...
Use subscription tiers from database

When enabled, pricing cards are dynamically pulled from your subscription tier configuration.

SEO & Metadata

/300 characters (150-160 recommended)

Navigation & Display

{{ number_stepper(model='form.display_order', min=0, max=100, step=1, label='Display Order') }}

Lower = first

Make this page visible to the public

{% endblock %} {% block extra_scripts %} {% endblock %}