Use new CMS (Migration)¶
Migrate to the new Content Management System and use data from xmm.
Requirements¶
XMM >= 1.23.0
Settings¶
The following changes has to be done in the settings.py First off all you have to deactivate CMS_LEGACY_MODE.
CMS_LEGACY_MODE = False
If you have catalog_node page types to migrate from xmm, the following configration must be made.
CMS_CATALOG_PAGE = {
'page_type': 'default',
'blocks': [{
'active_languages': [],
'attributes': {
'cms_section_background_color': 'transparent',
'cms_section_background_image': None,
'cms_section_background_position': 'center center',
'cms_section_width': 'full',
'cms_section_heading': {lang: '' for lang, lang_label in LANGUAGES},
'cms_section_style': 'frameless',
},
'attributes_desc': {},
'blocks': [{
'active_languages': [],
'attributes': {
'cms_node_node': None,
},
'attributes_desc': {},
'is_active': True,
'is_hidden': False,
'restriction': '',
'type': {'key': 'node'},
'valid_from': None,
'valid_until': None,
}],
'is_active': True,
'is_hidden': False,
'restriction': '',
'type': {'key': 'section'},
'valid_from': None,
'valid_until': None,
}],
}
INSTALLED_APPS¶
Add treewidget and tinymce to the INSTALLED_APPS section.
INSTALLED_APPS = [
'colorfield',
'treewidget',
'tinymce',
'modeltranslation',
...
]
MIDDLEWARE¶
Add the new CMSMiddleware as first entry.
MIDDLEWARE = [
'eshop.modules.cms.middleware.CMSMiddleware',
...
]
VIEWS¶
CMS views are in the cms views package. The inheritance must be checked if the views have been overwritten.
VIEWS = {
'cms-page-index': 'eshop.modules.cms.views.cms_page',
'cms-page': 'eshop.modules.cms.views.cms_page',
}
SEARCH¶
Check search settings and add published_document_class entry. The inheritance must be checked if search objects have been overwritten.
...
('pages', {
'document_class': 'eshop.modules.cms.search.PageDocument',
'published_document_class': 'eshop.modules.cms.search.PublishedPageDocument',
'search_class': 'eshop.modules.cms.search.CMSSearch',
'form_class': 'eshop.modules.cms.forms.CMSSearchForm',
'model_class': 'eshop.modules.cms.models.CMSNode',
'permission': None,
}),
...
TINYMCE¶
Add new tinymce editor settings.
TINYMCE_INCLUDE_JQUERY = False
TINYMCE_DEFAULT_CONFIG = {
'theme': 'silver',
'height': 400,
'branding': False,
'relative_urls': False,
'convert_urls': False,
'removed_menuitems': 'newdocument,visualaid,backcolor,forecolor',
'plugins': (
'advlist,autolink,lists,link,charmap,anchor,table,'
'searchreplace,code,fullscreen,emoticons,table,paste,'
'code,wordcount,help'
),
'toolbar': (
'undo redo | formatselect | '
'bold italic | alignleft aligncenter '
'alignright alignjustify | bullist numlist | table'
),
}
DEBUG_TOOLBAR¶
Add __preview__ lookup to show_toolbar_callback.
def show_toolbar_callback(request):
if '__preview__' in request.GET:
return False
...
MEDIA¶
Add cms media root and upload root to settings.py and create the corresponding directories on the filesystem:
UPLOAD_ROOT = BASE_DIR('upload')
CMS_MEDIA_ROOT = BASE_DIR('media/cms')
Unused settings¶
The following settings keys can be deleted:
CMS_OBJECT
CMS_PAGE_CLASS
CMS_PAGE_CLASSES
CMS_BLOCK_CLASSES
CMS_NOTIFICATIONS_URL
CMS_FORMS
CMS_MODELS
Backend¶
Admin¶
Add notifications and cms-sites to customer admin.
admin_site.register(Notification, NotificationAdmin)
admin_site.register(Device, DeviceAdmin)
admin_site.register(NewsCategory, NewsCategoryAdmin)
admin_site.register(CMSSite, CMSSiteAdmin)
Frontend¶
CMS Templates¶
Check project specific cms templates and change extends to cms package. Check your templates and change logic to get block/page data.
{% extends "cms/bocks/article.html" %}
{% extends "cms/pages/default.html" %}
New you will find the form template in the block directory:
cms/blocks/contact_form.html
Header Template¶
Add CMS navigation entry for cms users to shopheader.html:
{% block hamburger-navigation-account-admin-entries %}
{% if user.is_staff %}
{% url "admin:index" as nav_url %}
{% widget "navigation:mobile-entry" icon="gear" label=_("Administration") url=nav_url target="admin" app="django.contrib.admin" %}
{% elif user.has_cms_permission %}
{% url "cmsadmin:index" as nav_url %}
{% widget "navigation:mobile-entry" icon="edit" label=_("CMS") url=nav_url target="cms" app="django.contrib.admin" %}
{% endif %}
...
{% endblock %}
{% block admin-navigation-admin-entries %}
{% if user.is_staff %}
{% url "admin:index" as nav_url %}
{% widget "navigation:entry" icon="gear" label=_("Administration") url=nav_url target="admin" app="django.contrib.admin" %}
{% elif user.has_cms_permission %}
{% url "cmsadmin:index" as nav_url %}
{% widget "navigation:entry" icon="edit" label=_("CMS") url=nav_url target="cms" app="django.contrib.admin" %}
{% endif %}
...
{% endblock %}
Replace and migrate all page data lookups:
page.attributes.cms_megamenu -> page.content.megamenu
Migrate legacy cms data¶
Execute the following migrate command and sync legacy cms data from xmm and all used media files. Start migration twice to resolve referencing issues.
./manage.py migrate_legacy_cms_data
./manage.py migrate_legacy_cms_data
./manage.py rebuild_index cms
./manage.py rebuild_index published_cms
Docker Konfiguration auf Kundensystem¶
Create new cms media directory.
mkdir /var/lib/eshop/media/cms
Map new volume in docker-compose.yml.
/var/lib/eshop/media/cms:/app/media/cms