Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Site Setting to the demo #395

Closed
lb- opened this issue Feb 7, 2023 · 3 comments
Closed

Add Site Setting to the demo #395

lb- opened this issue Feb 7, 2023 · 3 comments

Comments

@lb-
Copy link
Member

lb- commented Feb 7, 2023

Site Settings are a key part of many Wagtail sites https://docs.wagtail.org/en/stable/reference/contrib/settings.html

It would be good to have an example in this demo site of a Site setting, ideally one that is translatable.

An example use case is some footer content that uses BaseSiteSetting (that can be translated).

Additionally, it would be great to have something that uses the BaseGenericSetting such as a logo.

See also #175

@Imshk
Copy link

Imshk commented Mar 3, 2023

I would to like to help on this issue , please provide me more information so I can solve it .

@Hanoon02
Copy link

Hi, I have made a rough sketch of the steps needed to complete this task. Points taken from https://docs.wagtail.org/en/stable/reference/contrib/settings.html. If its valid can I do a PR and add these changes?

We create a new app within the bakerydemo project using python manage.py startapp mysettings
Add it to the INSTALLED_APPS setting -

INSTALLED_APPS = [
 ...
    'mysettings',
 ...
]

Now, create a models.py file in the mysettings app directory and import the BaseSiteSettings model from wagtail.contrib.settings.models

from wagtail.contrib.settings.models import BaseSiteSettings

class MySiteSettings(BaseSiteSettings):
    footer_text = models.CharField(
        verbose_name='Footer text',
        max_length=255,
        null=True,
        blank=True,
    )

    panels = BaseSiteSettings.panels + [
        FieldPanel('footer_text'),
    ]

    class Meta:
        verbose_name = 'Site settings'
        verbose_name_plural = 'Site settings'

Here, I've made MySiteSettings model that extends the BaseSiteSettings model and adds a footer_text field. It also have new panels attribute that includes the footer_text field in the admin interface.

Now, to use the new Site Settings, register it with Wagtail wagtail_hooks.py file

from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from .models import MySiteSettings

class MySiteSettingsAdmin(ModelAdmin):
    model = MySiteSettings
    menu_label = 'Site settings'

modeladmin_register(MySiteSettingsAdmin)

I have extended the ModelAdmin class and set the model attribute to the new setting

Finally run the make migration codes as usual

For site-wide settings, change this in settings.py, so the new settings model is used - WAGTAIL_SITE_SETTINGS_MODEL = 'mysettings.MySiteSettings'

For using BaseGenericSetting as logo, we create a new model that inherits from BaseGenericSetting to represent the logo, and then register it with Wagtail in your app's wagtail_hooks.py file.

@lb-
Copy link
Member Author

lb- commented Mar 30, 2023

Hey @Hanoon02 thanks for this, I realised that the bakery demo site already has a footer model. It's a snippet.

Maybe the site setting could be a simple title suffix (that can be translated), one single char field.
This could then be used here https://github.com/wagtail/bakerydemo/blob/main/bakerydemo/templates/base.html#L15

A second field this model could be a colour field and then this sets the theme colour meta tag. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name/theme-color

Also, I don't think we would need a new app for this, in the base app is fine. Another thing that will need to be in the PR is the fixtures data.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants