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 ``wagtailcrx/includes/classifier_nav.html`` and a simple select/dropdown form in ``wagtailcrx/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( 'wagtailcrx.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 wagtailcrx.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.