123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- Classifiers
- ===========
- Classifiers provide a way to create custom categories or groups to organize and filter pages.
- Usage
- -----
- Let's say you want to create a custom category: "Blog Category". Blog Category will be used
- to filter article/blog pages on the site.
- First, create a new Classifier under **Snippets > Classifiers** called "Blog Category"
- and add several Terms underneath the Classifier, for example: "News", "Opinion", and "Press Releases".
- These terms will function as categories. Create and reorder these Terms as needed.
- Save the Classifier when finished.
- Second, classify various Article pages by Blog Category terms:
- * Edit an Article page.
- * Open the **Classify** tab, and select the appropriate terms.
- * Publish the page when finished.
- To enable filtering Article pages by "Blog Category":
- * Edit your Article Landing Page (may be named differently on your project - it should be the
- parent page of your Article Pages).
- * Open the **Layout** tab, enable **Show child pages**, and then select "Blog Category"
- under **Filter child pages by** .
- * Publish or preview the page, and you'll now see filtering options for every term under
- Blog Category.
- Going a bit further, let's show a preview of the top 3 newest blog pages classified as "News"
- automatically on the home page:
- * Edit the home page.
- * In the **Content** tab anywhere in the **Body** add a Responsive Grid Row, and then add a
- **Latest Pages** block.
- * Set the **Parent page** to your Article landing page, and **Classified as** to
- "Blog Category > News".
- * Publish or preview the page, and you'll now see the latest 3 articles classified as "News"
- on the home page.
- Classifiers are not just limited to Article pages, they work an every page on the site.
- Classifiers can be used to create product types, portfolios, categories, and any other
- organizational structures your content may need.
- Implementation
- --------------
- Classifiers are enabled by default on all ``CoderedPage`` models. The filtering HTML UI
- is rendered in the ``{% block index_filters %}`` block on the page template, which originates
- in ``base.html`` but is overridden in various other templates such as ``web_page_notitle.html``
- and ``article_index_page.html``.
- Wagtail CRX provides two filtering templates by default, a Bootstrap nav in
- ``coderedcms/includes/classifier_nav.html`` and a simple select/dropdown form in
- ``coderedcms/includes/classifier_dropdowns.html``. Most likely, you will want to implement your
- own filtering UI based on your own website needs, but you can follow the example in these two
- templates.
- Classifiers are not limited to just Pages though - they can be used on Snippets or any other
- model (Snippet example below)::
- from django.db import models
- from modelcluster.fields import ParentalManyToManyField
- from wagtail.admin.edit_handlers import FieldPanel
- from wagtail.snippets.models import register_snippet
- @register_snippet
- class MySnippet(models.Model):
- name = models.CharField(
- max_length=255,
- )
- classifier_terms = ParentalManyToManyField(
- 'coderedcms.ClassifierTerm',
- blank=True,
- )
- panels = [
- FieldPanel('name')
- FieldPanel('classifier_terms'),
- ]
- This will create a default list of checkboxes or a multi-select in the Wagtail UI
- to select classifier terms. However, if you prefer to have the checkboxes grouped
- by the Classifier they belong to (same UI as the **Classify** tab in the page editor),
- use the built-in ``ClassifierSelectWidget``::
- from coderedcms.widgets import ClassifierSelectWidget
- panels = [
- FieldPanel('name')
- FieldPanel('classifier_terms', widget=ClassifierSelectWidget()),
- ]
- Finally run ``python manage.py makemigrations website`` and ``python manage.py migrate`` to
- create the new models in your project.
|